1、SVM 工具箱快速入手简易教程(by faruto)一. matlab 自带的函数(matlab 帮助文件里的例子)只有较新版本的 matlab 中有这两个 SVM 的函数=svmtrain svmclassify=简要语法规则=svmtrainTrain support vector machine classifierSyntaxSVMStruct = svmtrain(Training, Group)SVMStruct = svmtrain(., Kernel_Function, Kernel_FunctionValue, .)SVMStruct = svmtrain(., RBF_Si
2、gma, RBFSigmaValue, .)SVMStruct = svmtrain(., Polyorder, PolyorderValue, .)SVMStruct = svmtrain(., Mlp_Params, Mlp_ParamsValue, .)SVMStruct = svmtrain(., Method, MethodValue, .)SVMStruct = svmtrain(., QuadProg_Opts, QuadProg_OptsValue, .)SVMStruct = svmtrain(., SMO_Opts, SMO_OptsValue, .)SVMStruct =
3、 svmtrain(., BoxConstraint, BoxConstraintValue, .)SVMStruct = svmtrain(., Autoscale, AutoscaleValue, .)SVMStruct = svmtrain(., Showplot, ShowplotValue, .)-svmclassifyClassify data using support vector machineSyntaxGroup = svmclassify(SVMStruct, Sample)Group = svmclassify(SVMStruct, Sample, Showplot,
4、 ShowplotValue)=实例研究=load fisheriris%载入 matlab 自带的数据有关数据的信息可以自己到 UCI 查找,这是 UCI 的经典数据之一,得到的数据如下图:tu1其中 meas 是 150*4 的矩阵代表着有 150 个样本每个样本有 4 个属性描述,species 代表着这 150 个样本的分类.data = meas(:,1), meas(:,2);%在这里只取 meas 的第一列和第二列,即只选取前两个属性.groups = ismember(species,setosa);%由于 species 分类中是有三个分类:setosa,versicolor
5、,virginica,为了使问题简单,我们将其变为二分类问题:Setosa and non-Setosa.train, test = crossvalind(holdOut,groups);cp = classperf(groups);%随机选择训练集合测试集有关 crossvalind 的使用请自己 help 一下其中 cp 作用是后来用来评价分类器的.svmStruct = svmtrain(data(train,:),groups(train),showplot,true);%使用 svmtrain 进行训练,得到训练后的结构 svmStruct,在预测时使用.训练结果如图:tu2cla
6、sses = svmclassify(svmStruct,data(test,:),showplot,true);%对于未知的测试集进行分类预测,结果如图:tu3classperf(cp,classes,test);cp.CorrectRateans =0.9867%分类器效果测评,就是看测试集分类的准确率的高低.二.台湾林智仁的 libsvm 工具箱该工具箱下载libsvm-mat-2.86-1: libsvm-mat-2.86-1.rar (73.75 KB) 安装方法也很简单,解压文件,把当前工作目录调整到libsvm 所在的文件夹下,再在 set path 里将 libsvm所在的文件
7、夹加到里面.然后在命令行里输入mex -setup %选择一下编译器make 这样就可以了.建议大家使用 libsvm 工具箱,这个更好用一些.可以进行分类多类别,预测=svmtrainsvmpredict=简要语法:Usage=matlab model = svmtrain(training_label_vector, training_instance_matrix , libsvm_options);-training_label_vector:An m by 1 vector of training labels (type must be double).-training_inst
8、ance_matrix:An m by n matrix of m training instances with n features.It can be dense or sparse (type must be double).-libsvm_options:A string of training options in the same format as that of LIBSVM.matlab predicted_label, accuracy, decision_values/prob_estimates = svmpredict(testing_label_vector, t
9、esting_instance_matrix, model , libsvm_options);-testing_label_vector:An m by 1 vector of prediction labels. If labels of testdata are unknown, simply use any random values. (type must be double)-testing_instance_matrix:An m by n matrix of m testing instances with n features.It can be dense or spars
10、e. (type must be double)-model:The output of svmtrain.-libsvm_options:A string of testing options in the same format as that of LIBSVM.Returned Model Structure=实例研究:load heart_scale.mat%工具箱里自带的数据如图:tu4其中 heart_scale_inst 是样本,heart_scale_label是样本标签model = svmtrain(heart_scale_label, heart_scale_inst,
11、 -c 1 -g 0.07);%训练样本,具体参数的调整请看帮助文件predict_label, accuracy, dec_values = svmpredict(heart_scale_label, heart_scale_inst, model);%分类预测,这里把训练集当作测试集,验证效果如下: predict_label, accuracy, dec_values = svmpredict(heart_scale_label, heart_scale_inst, model); % test the training dataAccuracy = 86.6667% (234/270)
12、 (classification)=这回把 SVM 这点入门的东西都说完了,大家可以参照着上手了,有关 SVM 的原理我下面有个简易的 PPT,是以前做项目时我做的当时我负责有关 SVM 这一块代码实现讲解什么的,感兴趣的你可以看看,都是上手较快的东西,想要深入学习 SVM,你的学习统计学习理论什么的挺多的呢SVM.ppt (391 KB) -有关 SVM 和 libsvm 的非常好的资料,想要详细研究 SVM 看这个-libsvm_guide.pdf (194.53 KB) libsvm_library.pdf (316.82 KB) OptimizationSupportVectorMachinesandMachine