下载好libsvm后,验证libsvm下载好了吗?将其路径导入到matlab里,windows——包含libSVM四个exe程序包,我们所用的库就是它们,然后在matlab命令框输入
1.mex –setup
2.选择vc++
3.之后输入make
问题一:Error: D:\libsvm\libsvm-3.21\matlab\make.m failed (line 13)
未找到 E:\百叶通\matlab\libsvmread.c;请检查您是否位于正确的当前文件夹,并检查 'E:\百叶通\matlab\libsvmread.c' 的拼写。
解决方法:啊,太粗心了,看了一下我的当前路径居然不是libsvm所在路径,改过来就好了,
之后再输入make,然后在当前文件夹下多了4个文件,libsvmread.mexw64、libsvmwrite.mexw64、svmpredict.mexw64、svmtrain.mexw64
问题二:
找不到D:\libsvm\libsvm-3.21\matlab\svmtrain.exp
找不到 D:\libsvm\libsvm-3.21\matlab\svmtrain.exp
找不到D:\libsvm\libsvm-3.21\matlab\svmpredict.exp
找不到D:\libsvm\libsvm-3.21\matlab\svmpredict.exp
解决方法:把出现的四个文件复制到D:\libsvm\libsvm-3.21\Windows下就好了。
开始使用matlab自带的数据来验证一下libsvm装好了嘛。
load heart_scale
问题三:
错误使用 load
ASCII 文件 heart_scale的第 3 行中的列数必须与前面行中的列数相同。
解决方法:使用libsvmread函数,在matlab下直接libsvmread(heart_scale)就好了。
总结一下全过程如下:
1.mex –setup
2.选择vc++
3.make
4. [heart_scale_label,heart_scale_inst] =libsvmread('../heart_scale');
model=svmtrain(heart_scale_label,heart_scale_inst,'-c1 -g 0.07');
[predict_label,accuracy,dec_values]=svmpredict(heart_scale_label,heart_scale_inst,model);
此处的训练集和测试集用的是同一组数据。
结果:
optimization finished, #iter = 134
nu = 0.433785
obj = -101.855060, rho = 0.426412
nSV = 130, nBSV = 107
Total nSV = 130
Accuracy = 86.6667% (234/270)(classification)
其中,#iter为迭代次数,nu是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV为标准支持向量个数(0<a[i]<c),nBSV为边界上的支持向量个数(a[i]=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。
最后会生成一个model,如图