libsvm使用过程遇到的问题总结

下载好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,如图


model:是训练得到的模型,是一个结构体(如果参数中用到-v,得到的就不是结构体,对于分类问题,得到的是交叉检验下的平均分类准确率;对于回归问题,得到的是均方误差)使用-v是在参数寻优时寻找最优参数所用的,在正常模型训练时不用-v参数。



猜你喜欢

转载自blog.csdn.net/weixin_38300566/article/details/80375703
今日推荐