如何在Matlab中使用SVM?

时间:2013-06-30 17:27:08

标签: matlab machine-learning classification svm

我是 Matlab 的新手。是否有任何示例代码用于使用 SVM 对某些数据(具有41个功能)进行分类,然后可视化结果?我想使用 SVM 方法对数据集(有五个类)进行分类。 我阅读了“A Practical Guide to Support Vector Classication”文章,并看到了一些例子。我的数据集是 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 ,我在showplot中使用了svmclassify但是什么时候true,我收到这个警告:

The display option can only plot 2D training data

有人可以帮助我吗?

2 个答案:

答案 0 :(得分: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);

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

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

测试完成后,您将看到所需的准确度,但仅适用于整个数据集。

如果您需要单独使用正面和负面样本的准确度,您仍应使用预测标签自行计算。

希望这会对你有帮助!

答案 1 :(得分:0)

您的要素空间有41个维度,绘制更多的3个维度是不可能的。 为了更好地理解您的数据,SVM的工作方式是从线性SVM开始。 SVM的这种格式是可解释的,这意味着您的41个特征中的每个特征在训练后都具有与之关联的权重(或“重要性”)。然后,您可以使用plot3()将数据与线性svm中的3个“最佳”特征相对应。请注意您的数据与这些功能的分离程度,并相应地选择基本功能和其他参数。

相关问题