这几天在用libsvm(2.8.6)中的一些工具,总结一下.
libsvm的一些工具还是非常有用的,1.可以调用subset.py将你的样本集合按你所想要的比例进行抽样出两个子样本集合.2.还可以调用grid.py做关于(C,gamma)的交叉验证参数选择,可以轻松的搜索到最好的参数对(C,gamma).3.还可以调用easy.ph一步到位完成svm的整个挖掘过程,最后得出交叉验证精度,最有参数对和测试集上的测试精度.4.还可以调用checkdata进行检查你的数据格式是否有错误.这些操作可以让大伙省事很多.
libsvm(2.8.6)中主要有四个工具:easy.py,subset.py,grid.py,checkdata.py.
运行环境要求和设置:
需要准备两个工具.
一个工具是:python编译环境,这个到网上下一个来安装就好了(注意要设置环境变量path),下载python.exe 2.5.1; 另一个工具就是gnuplot.exe,到网上下一个,我用的是版本4.2的,下载gnuplot.exe 安装完上面的软件还不能运行,还要修改easy.py,grid.py的设置.将他们对应的代码" gnuplot_exe = r"c:\tmp\gnuplot\bin\pgnuplot.exe""都改为你的pgnuplot.exe所在的路径,
比如我的文件在当前目录的上一级目录,就是和tools文件夹在同一级目录,那么我的设置应该为" gnuplot_exe = r"..\gnuplot\bin\pgnuplot.exe"".
这样设置就完成了,我们只需要到控制台下运行上面相应的四个程序即可.
注意:下面的python命令中,我们默认所有需要处理的样本数据集都是放在在tools目录下,如果数据文件不在tools目录下则我们需要用绝对路径指定数据的位置.
下面分别介绍调用格式:
从其文档可以发现其功能分别为:
(1) easy.py:只要简单输入,就可以完成svm挖掘的所有步骤,即:
1. Conduct simple scaling on the data
2.Consider the RBF kernel K(x; y)
3.Use cross-validation to nd the best parameter C and
4.Use the best parameter C and to train the whole training set
5.Test
对于初学者而言这个文件无非是他们的救命稻草,可以简单看看他的语法:
在控制台下走到easy.py所在的目录下:
$ python easy.py train.3 test.3
Scaling training data...归一化数据
Cross validation...在训练集上做交叉验证
Best c=128.0, g=0.125 CV rate=88.9186 (通过网格搜索法对每个参数对做交叉验证,选择交叉验证精度最高所对应的参数.)
Training...( 将上面得到的参数对在训练集合上做模型训练)
Output model: crttrain.model (保存模型到文件)
Scaling testing data... (归一化数据)
Testing...(用训练得出的模型对测试集进行测试)
Accuracy = 87.8049% (36/41) (classification)(测试的精度)
Output prediction: crttest.predict (输出预测结果)
(在交叉验证过程中,会有一个图形界面显示参数选择的情况,這就是gnuplot.exe的作用了)
(2).grid.py:用于做交叉验证,选择最好的参数对.
用法:
在控制台下走到grid.py所在的目录下:
$python grid.py crttrain
[local] 5 -7 86.9186 (best c=32.0, g=0.0078125, rate=86.9186)
[local] -1 -7 85.1744 (best c=32.0, g=0.0078125, rate=86.9186)
[local] 5 -1 77.0349 (best c=32.0, g=0.0078125, rate=86.9186)
.......
[local] 13 -15 85.1744 (best c=32.0, g=0.0078125, rate=86.9186)
[local] 13 3 55.5233 (best c=32.0, g=0.0078125, rate=86.9186)
[local] 13 -9 83.1395 (best c=32.0, g=0.0078125, rate=86.9186)
[local] 13 -3 79.6512 (best c=32.0, g=0.0078125, rate=86.9186)
32.0 0.0078125 86.9186 (c=32,gamma=0.0078125 交叉验证精度)
(3) subset.py 用于按个数分割样本集成训练集和测试集.
用法:
在控制台下走到subset.py所在的目录下:
$python subset.py crt 100 crttrain crttest
参数说明:
crt:样本集合;
100:训练集样本个数;
crttrain:存储100个训练样本;
crttest:存储剩下的样本集做为测试集;
如果成功没有输出信息,反之则有错误提示.
(4) checkdata.py 用于检测样本集存储格式是否正确
在控制台下走到subset.py所在的目录下:
$python checkdata.py crt
No error. (表示没有错)