libsvm与python的使用
由于课程和课题的原因,这两天试用了一下国立台湾大学Chih-Chung Chang和Chih-Jen Lin编写的libsvm函数库,发现的确是一款写得很不错的软件,而且上手也比较容易,用了一个晚上的时间基本搞定了libsvm的基本用法以及它和python的接口,以下的内容均基于win32系统,尚未在Linux下尝试过。
首先我们需要下载libsvm,最新版是11月17日刚推出的libsvm2.83,可以在libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guide,写得很不错,浅显易懂,适合初学者使用,基本的使用只需要libsvm这一个软件即可,但如果需要使用它自带的python脚本的话,还需要安装python,最新版是2.5,可以在python的主页http://www.python.org上下载。另外,libsvm自带的两个脚本grid.py和easy.py中均用到了绘图工具gnuplot,因此还需要下载一个gnuplot软件,下载地址:ftp://ftp.gnuplot.info/pub/gnuplot/,注意要下载win32版本的,比如win32的4.0版本对应的文件应为gp400win32.zip。
下载完成后,接下来就是安装。其中只有python2.5需要安装(一般默认安装到c:\python25下),将libsvm解压到c:\libsvm下,将gnuplot解压到c:\gnuplot下。将c:\python25,c:\libsvm\windows,c:\gnuplot\bin三个文件夹添加到系统路径里面,方便日后使用。
安装完毕后,进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存。然后我们可以下载guide文章里提到的那三个数据集作为实验数据集,也将其放在tools目录下,在libsvm\tools下执行以下命令检验效果:
python easy.py train.1 test.1
如果弹出了gnuplot的窗口并可以看到动态的绘制图形的过程,那么恭喜你,实验成功!最后输出的结果应该和guide文章里提到的结果类似(当然c和g的值有可能并不和文章里的相同,但最后在测试集上的错误率应该相差不大)。执行的过程中可能防病毒软件会弹出提示说rootshell之类的警告,不必理会。
接下来我们研究一下libsvm和python的接口的问题,这个问题我自己也困扰了很久。首先,按照libsvm\python目录下的readme文件所说,在win32环境下,我们要编译得到svmc.dll这个文件(细心的人会发现,libsvm已经在\libsvm\windows\python目录下自带了这个文件,但它可能是为其它的python版本编译的,为保险起见,我们尝试重新编译它),在libsvm目录下键入如下命令(以vs.net2003为例,其它版本的c++编译器可能需要略微修改):
vcvars32
这个文件在C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\下,请确保这个路径在你的系统路径里面。此命令设置了VC++的环境变量。
键入以下命令:
nmake -f Makefile.win python
并将生成的libsvm\windows\python\svmc.dll文件复制到libsvm\python目录下,并改名svmc.pyd(非常重要!)。
在libsvm\python目录下键入以下命令以检验效果:
python svm_test.py
如果能看到程序执行结果,说明libsvm和python之间的接口已经配置完成,以后就可以直接在python程序里调用libsvm的函数了!
转自:http://yaowt.spaces.live.com/blog/cns!7280d7d3cc41a4ab!564.entry
如果你要用easy.py的话
1.下载libsvm
2.下载pathon。因为libsvm下载后的easy.py不能直接操作,需要python语言的支持
可以去http://www.python.org/或去网上搜索一下,默认安装
3.下载pgnuplot,一般大家下载的都是一个gp373w32文档,里面有直接可执行的pgnuplot.exe,不用安装。(以前在网上看到的步骤都是“安装pgnuplot”这样的句子,让我这个菜鸟想了好久怎么把它安装到机子上,笨!)libsvm是用他完成绘图的
4.修改pgnuplot在grid.py中的路径(easy.py在执行的过程中要调用grid.py的)
,默认的gnuplot_exe = r"c:\tmp\gp373w32 \pgnuplot.exe",用ULtraEdit打开grid.py,修改成你自己pgnuplot.exe的路径
5.libsvm是在DOS环境中工作的,所以打开命令提示符,我的方法比较笨,先修改路径名到easy.py和grid.py所在的文件夹下,例如d:\livsvm\python
然后输入:c:\python23\python easy.py heart_scale 就可以了
上面我写的都没有说版本问题,因为libsvm好象有版本 兼容问题,一般如果用python24不行的话就把python24换成python23,如果还不行的话而你又是XP系统的话,换个别的机子换个系统试试,我曾经把各种组合试了一遍,才得出的吐血经验!
另外:如果还是不行的话,建议你在easy.py和grid.py中加入一些简单的输出语句看看是哪里的问题,python语言的输出语句很简单如:在觉得有问题的句子前面加上 print '1',后面加上一句 print '2',看看是否1,2都能输出(不懂python语言,也只知道这些了)
1.我安装的python是python-2.5.1,安装在C盘的c:\Python25路径下
2.我的gnuplot是直接用的研学论坛上的附件Libsvm-2_6.rar里的,等下我把它传上来.解压后就可以看到在文件夹gp373w32里,其余的文件和文件夹都不需要,只要文件夹gp373w32就可以了.我直接把文件夹拷出来放在D盘D:\gp373w32路径下. 林智仁的libsvm-2.82在我另外一个帖子里有(不在开始,中间部分,自己找一下)
3.林智仁的libsvm-2.82放在D盘D:\libsvm-2.82路径下
4.把D:\libsvm-2.82\tools中的easy.py和grid.py复制到D:\libsvm-2.82\python中
5.在D:\libsvm-2.82\python中修改easy.py和grid.py的路径:
(1): 点中easy.py在右键中选Edit with IDLE打开
将else下面的路径修改如下(当然这是我的路径,如果你放的地方不同,则按你自己的修改):
else:
# example for windows
svmscale_exe = r"D:\libsvm-2.82\windows\svmscale.exe"
svmtrain_exe = r"D:\libsvm-2.82\windows\svmtrain.exe"
svmpredict_exe = r"D:\libsvm-2.82\windows\svmpredict.exe"
gnuplot_exe = r"D:\gp373w32\pgnuplot.exe"
grid_py = r"D:\libsvm-2.82\python\grid.py"
(2):点中grid.py在右键中选Edit with IDLE打开
将else下面的路径修改如下(当然这是我的路径,如果你放的地方不同,则按你自己的修改):
else:
# example for windows
svmtrain_exe = r"D:\libsvm-2.82\windows\svmtrain.exe"
gnuplot_exe = r"D:\gp373w32\pgnuplot.exe"
6.将D:\libsvm-2.82中的文件heart_scale放到D:\libsvm-2.82\python中
现在就可以到dos下去运行easy.py和grid.py拉:
首先进入cd c:\Python25
再python D:\libsvm-2.82\python\easy.py D:\libsvm-2.82\python\heart_scale
回车就可以看到出结果拉
这几天在用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
浙公网安备 33010602011771号