如何在Matlab中使用支持向量机(SVM)?

3

我刚接触Matlab,请问是否有相关的样例代码,可以用SVM分类一些数据(有41个特征),然后可视化结果呢?我想使用SVM方法对一个包含5类的数据集进行分类。

我阅读了《支持向量机分类实践指南》这篇文章,并看到了一些示例。我的数据集名称为kdd99。我编写了以下代码:

%% Load Data
[data,colNames] = xlsread('TarainingDataset.xls');
groups = ismember(colNames(:,42),'normal.'); 
TrainInputs = data;
TrainTargets = groups;
%% Design SVM
C = 100;
svmstruct = svmtrain(TrainInputs,TrainTargets,...
    'boxconstraint',C,...
    'kernel_function','rbf',...
    'rbf_sigma',0.5,...
    'showplot','false');
%% Test SVM
[dataTset,colNamesTest] = xlsread('TestDataset.xls');
TestInputs = dataTset;
groups = ismember(colNamesTest(:,42),'normal.'); 
TestOutputs = svmclassify(svmstruct,TestInputs,'showplot','false');

但我不知道如何获取我的分类的准确度MSE,我在svmclassify中使用showplot,但当它为true时,我收到以下警告:

The display option can only plot 2D training data

请问有人可以帮助我吗?


5
你需要更多了解机器学习的基础知识,它不是一个可以盲目使用的好工具,也不是一件容易的事情。 - Raff.Edward
我同意@Raff.Edward的观点,但你应该关注交叉验证来衡量你的误差/准确性。 - David Maust
2个回答

2

我建议您使用另一个SVM工具箱,即libsvm。链接如下: http://www.csie.ntu.edu.tw/~cjlin/libsvm/

将其添加到matlab的路径中后,您可以像这样训练和使用模型:

model=svmtrain(train_label,train_feature,'-c 1 -g 0.07 -h 0'); 
% the parameters can be modified
[label, accuracy, probablity]=svmpredict(test_label,test_feaure,model);

如果输入有两种以上的类型(0/1),则train_label必须是一个向量,否则它将自动成为nSVM。

train_feature是n个样本的n*L矩阵。在使用之前最好对特征进行预处理。在测试部分,它们应该以同样的方式进行预处理。

测试完成后,您将看到所需的准确度,但这只是整个数据集的准确度。

如果需要单独计算正样本和负样本的准确度,则仍然需要使用预测标签进行计算。

希望这可以帮助您!


0

您的特征空间有41个维度,绘制超过3个维度是不可能的。 为了更好地理解您的数据和SVM的工作方式,建议从线性SVM开始。这种类型的SVM是可解释的,这意味着在训练后,您的41个特征中的每一个都有一个权重(或“重要性”)与之相关联。然后,您可以使用plot3()函数将您的数据放在线性SVM的“最佳”三个特征上进行绘制。注意使用这些特征时数据的分离效果,并相应地选择基础函数和其他参数。


非常感谢您的帮助!我已经修改了上面的代码,并且没有出现错误。但我的问题是如何获取我的分类的准确性或均方误差(MSE)?我的修改后的代码为:[data,colNames] = xlsread('TarainingDataset.xls');groups =ismember(colNames(:,42),'normal.');Attributes = data(:,1:41);Classes = groups;C = 100;svmstruct = svmtrain(Attributes,Classes, 'boxconstraint',C, 'kernel_function','rbf', 'rbf_sigma',0.5);[dataTset,colNamesTest] = xlsread('TestDataset.xls');newclass = svmclassify(svmstruct,dataTset); - leyla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接