准备工作:
- https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下载LIBSVM;(LIBSVM工具相较于MATLAB自带的工具:1).支持多分类及回归(‘-s 0’ ,‘-s 1' -> 多分类'-s 3';'-s 4' -> 回归;'-s 2' -> one-class SVM),matlab自带的仅支持二分类,且不支持回归2).支持核函数种类多样(linear;polynomial;RBF(radial basis function);sigmoid;precomputed kernel)3).解决算法是SMO(序列最小化),matlab自带的三种SMO,QP(经典二次规划),LS;4).能够调节RBF核函数的参数,matlab自带的不能调节)
- 将libsvm文件夹设为matlab搜索路径,并进入.../libsvm-3.xx/matlab目录;
- 运行mex -setup,选择编译器(前提是要安装有C++编译器,如VS2010);
- 命令窗口输入:make,生成四个文件:libsvmread.mexw32,libsvmwrite.mexw32,svmtrain.mexw32,svmpredict.mexw32(原程序是C++编译的,这四个文件是编译后包含了能够在matlab环境下运行的算法);
接下来便可以进行数据分类了:
- 在.../libsvm3.xx目录下运行:[label,inst] = libsvmread('heart_scale')(’heart_scale‘默认在libsvm主目录下,且libsvm要求有参数接受读取的结果,读取结果为:inst:270*13label:270*1)
- 运行:model = svmtrain(label,inst)(训练函数,由于matlab自带有svmtrain函数,因此需要进入matlab/toolbox/搜索svmtrain.m,将其改为svmtrain_matlab.m,否则会调用自带的svmtrain函数)
- 其中:model.Paramaters = [-s,-t,-d,-g,-r](model的Paramaters输出了参数组)
-
运行:[predict,accuracy,probabilityEstimates] = svmpredict(label,inst,model)(利用模型预测所有样本,libsvm要求所有接受参数都填写,否则无输出)
- accuracy是一个3*1矩阵,
86.6666666666667->准确度
0.533333333333333->MSE(mean squared error)
0.532639204545455->r^2(squared correlation coefficient)