如何在 Matlab 中使用 SVM?
Posted
技术标签:
【中文标题】如何在 Matlab 中使用 SVM?【英文标题】:How to use SVM in Matlab? 【发布时间】:2013-06-27 21:29:45 【问题描述】:我是 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');
但我不知道如何获得我的分类的 accuracy 或 mse,我在我的 showplot
中使用 svmclassify
但什么时候是 @987654325 @,我收到此警告:
The display option can only plot 2D training data
谁能帮帮我?
【问题讨论】:
一般来说你需要了解更多关于机器学习的知识,它不是一个好的或容易盲目使用的工具。 我同意@Raff.Edward 的观点,但您应该看的是交叉验证来衡量您的错误/准确性。 【参考方案1】:我建议您使用另一个 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 矩阵。您最好在使用该功能之前对其进行预处理。在测试部分,它们应该以相同的方式进行预处理。
测试完成后会显示您想要的准确度,但仅适用于整个数据集。
如果需要分别对正负样本的准确率,仍需使用预测的标签自行计算。
希望对您有所帮助!
【讨论】:
【参考方案2】:您的特征空间有 41 个维度,绘制超过 3 个维度是不可能的。 为了更好地理解您的数据和 SVM 的工作方式,我们从线性 SVM 开始。这种类型的 SVM 是可解释的,这意味着您的 41 个特征中的每一个在训练后都有一个与其相关的权重(或“重要性”)。然后,您可以将 plot3() 与来自线性 svm 的 3 个“最佳”特征的数据一起使用。请注意您的数据与这些特征的分离程度,并相应地选择基函数和其他参数。
【讨论】:
感谢您的帮助!我已经修改了上面的代码,我没有错误。但是我的问题是如何获得我的分类的准确性或mse???我更改的代码是:[ data,colNames]=xlsread('TarainingDataset.xls');groups=ismember(colNames(:,42),'normal.');属性 =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);以上是关于如何在 Matlab 中使用 SVM?的主要内容,如果未能解决你的问题,请参考以下文章