(本文整理自flydreamGG博客,在此表示感谢)
libsvm中有进行参数调优的工具grid.py和easy.py可以使用,这些工具可以帮助我们选择更好的参数,减少自己参数选优带来的烦扰。
所需工具:libsvm、gnuplot(gp460win32)
本机环境:Windows 7(32),Python 2.7
步骤:
1.安装好Python,并且解压libsvm
以本机为例:
Python路径:C:\python27
libsvm路径:C:\Users\fhl\Documents\MATLAB\libsvm-master
(不要嘲笑我的路径,新手入门时以为libsvm是MATLAB中的工具,所以就放在了MATLAB中,后来就懒得改了)
gnuplot路径:C:\Users\fhl\Documents\gnuplot\bin
(gnuplot是为了绘图和选取参数的,工具包网上有,也可以跟我要)
2.grid.py使用方法
文件grid.py是对C-SVC的参数c和γ(gama)做优选的,原理也是网格遍历,假设我们要对目录d:/libsvm/program/tools下的样本文heart_scale做优选,其具体用法为:
第一步:打开C:\Users\fhl\Documents\MATLAB\libsvm-master下的tools文件夹,找到grid.py文件。用python打开(不能双击,而要右键选择“Edit with IDLE”或者先打开IDLE,再添加进去),修改svmtrain_exe和gnuplot_exe的路径。
svmtrain_exe = r”C:\Users\fhl\Documents\MATLAB\libsvm-master\windows\svm-train.exe”
gnuplot_exe = r”C:\Users\fhl\Documents\gnuplot\bin\pgnuplot.exe”
(这里面有一个是对非win32的,可以不用改,只改# example for windows下的就可以了)
第二步:运行cmd,进入dos环境,定位到C:\Users\fhl\Documents\MATLAB\libsvm-master\tools文件夹,这里是放置grid.py的地方。
第三步:输入以下命令:
C:\python27\python grid.py heart_scale
你就会看到dos窗口中飞速乱串的[local]数据,以及一个gnuplot的动态绘图窗口。大约过10秒钟,就会停止。Dos窗口中的[local]数据时局部最优值,这个不用管,直接看最后一行:
2048.0 0.0001220703125 84.0741
其意义表示:C = 2048.0;γ=0.0001220703125;交叉验证精度CV Rate = 84.0741%,这就是最优结果。
第四步:打开目录C:\Users\fhl\Documents\MATLAB\libsvm-master\tools,我们可以看到新生成了两个文件:heart_scale.out和heart_scale.png,第一个文件就是搜索过程中的[local]和最优数据,第二文件就是gnuplot图像。
现在,grid.py已经运行完了,你可以把最优参数输入到svmtrain中进行训练了.
在运行程序时,一定要把路径设对,否则就会报错,如果尝试各种方法还是出错,那么可能是工具包的版本不对,可以尝试换一下版本。
这里谈一下我遇到的问题,我再输入第三步的命令之后,程序运行了一小会,出现如下错误:
Error[22]: Invalid argument
后来在网上查了一下,有人说可以可以开启管道,加个延迟等一下,让gnuplot就绪后再运行,具体方法就是在grid.py中的第9行和第95行分别加入:
import time
和
time.sleep(3) //3秒延迟
我在往里添加代码的时候,可能是grid的版本不同导致代码不一样,所在行数感觉不一样,所以第一行代码我没有添加,第二行代码我也没有在95行添加,而是在下面的位置添加:
然后再重新运行一下前面的命令就可以了。
其实,程序运行到这里的时候,gnuplot已经打开了也就是说“就绪”了,所以我感觉代码添不添加问题不是很大,不过没有验证。
2.easy.py使用方法 (这一步,因为暂时没有做好test文件,所以没有运行)
文件easy.py对样本文件做了“一条龙服务”,从参数优选,到文件预测。因此,其对grid.py、svm-train、svm-scale和svm-predict都进行了调用(当然还有必须的python和gnuplot)。因此,运行easy.py需要保证这些文件的路径都要正确。当然还需要样本文件和预测文件,这里样本文件还是用heart_scale,预测文件我们复制一份然后改名heart_test,下面说一下使用方法:
第一步:打开easy.py,修改# example for windows下的几个路径:
第二步:运行cmd,进入dos环境,定位到放置easy.py的目录
C:\Users\fhl\Documents\MATLAB\libsvm-master\tools
第三步:输入命令:
C:\python26\python easy.py heart_scale heat_test
你就会看到一个gnuplot的动态绘图窗口。大约20s以后停止,dos窗口显示为:
Scaling training data…
Cross validation…
Best c=2048.0, g=0.0001220703125 CVrate=84.0741
Training…
Output model: heart_scale.model
Scaling testing data…
Testing…
Accuracy = 85.1852% (230/270) (classification)
Output prediction: heart_test.predict
这就是最终预测结果,可以看到第三行就是调用grid.py的结果。在d:/libsvm/program/tools下你会看到又多了7个文件,都是以前我们碰到的过程文件,都可以用记事本打开。