libsvm与python的使用

想用python测试SVM神经网络,试用了一下国立台湾大学Chih-Chung Chang和Chih-Jen Lin编写的libsvm函数库,发现的确是一款写得很不错的软件,而且上手也比较容易,用了一个晚上的时间基本搞定了libsvm的基本用法以及它和python的接口,以下的内容均基于win32系统,尚未在Linux下尝试过。

首先我们需要下载libsvm,现在的版本刚推出的libsvm3.16,可以在libsvm的主页http://www.csie.ntu.edu.tw/~cjlin/libsvm/上下载得到,建议同时下载一个libsvm的初学者guide,写得很不错,浅显易懂,适合初学者使用,基本的使用只需要libsvm这一个软件即可,但如果需要使用它自带的python脚本的话,还需要安装python,我用的版本是2.7,可以在python的主页http://www.python.org上下载。另外,libsvm自带的两个脚本grid.py和easy.py中均用到了绘图工具gnuplot,因此还需要下载一个gnuplot软件,下载地址:http://people.duke.edu/~hpgavin/gnuplot.html,注意要下载win32版本的,比如win32的4.0版本对应的文件应为gp400win32.zip。

下载完成后,接下来就是安装。其中只有python2.5需要安装(一般默认安装即可),将libsvm和gnuplot解压到不带中文路径的目录下。

安装完毕后,进入libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存。然后我们可以下载guide文章里提到的那三个数据集(网址:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/)作为实验数据集,也将其放在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://www.cnblogs.com/me115/archive/2010/04/16/1713549.html

About 智足者富

http://chenpeng.info

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>