我是 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
有人可以帮助我吗?
答案 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个“最佳”特征相对应。请注意您的数据与这些功能的分离程度,并相应地选择基本功能和其他参数。