2

我是Matlab新手。是否有任何示例代码用于使用SVM对某些数据(具有 41 个特征)进行分类,然后将结果可视化?我想使用SVM方法对数据集(有五个类)进行分类。我阅读了“支持向量分类的实用指南”文章并看到了一些示例。我的数据集是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在我的svmclassifybut when is 中使用true,我收到此警告:

The display option can only plot 2D training data

有人可以帮我吗?

4

2 回答 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);

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

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

测试完成后会显示您想要的准确度,但仅适用于整个数据集。

如果你需要分别对正负样本的准确率,你仍然应该使用预测的标签自己计算。

希望对你有帮助!

于 2017-03-05T08:12:20.457 回答
0

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

于 2013-07-01T06:44:56.180 回答