本文源于SVM算法应用中实际遇到的问题。
算法实现的程序是按着麦好的《机器学习实践指南》自己敲的。
问题出现在第18行,找不到LibSvm这个库。
为了解决这个问题,进行了几个小时,一系列的尝试,终于。。。这个问题仍然没有解决,但是成功安装了libsvm,过程中还是遇到了很多问题,所以想和大家分享。
LIBSVM是台湾大学林智仁(LinChih-Jen)教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;
首先推荐林智仁教授的学习网站LIBSVM -- A Library for Support Vector Machines
http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html#nuandone
在安装libsvm之前首先要安装好python和gnuplot(命令行的交互式绘图工具)
我计算机的环境是win7(64位),python2.7(32位)
1.从上面网址下载的gnuplot安装位置C:\ProgramFiles\gnuplot
2.从上面网址下载的DownloadLIBSVM处下载的libsvm解压在C盘根目录下C:\libsvm-3.21\libsvm-3.21无需安装。里面包含Java、matlib、python的文件,我们选择python。
3.在C:\libsvm-3.21\libsvm-3.21\tools中的easy.py和grid.py中修改gnuplot的路径(可用记事本、word、sublime text打开),将self.gnuplot_pathname设置为自己gnuplot.exe的路径。
我的路径是:self.gnuplot_pathname = r'C:\Program Files\gnuplot\bin\gnuplot.exe',修改后保存。
4.连接python与libsvm
首先查看python版本(32 or 64),在网上查了一些方法,说32位比较容易,直接在C:\libsvm-3.21\libsvm-3.21\windows中找到libsvm.dll将添加到系统目录C:\Windows\System32中即可。若为64位的,则比较繁琐,需要首先自己编译64位的动态链接库libsvm.dll。我是32位,尝试后发现还是不可以。
后来在令一篇博客中找到了答案。libsvm-3.21是默认64位编译的,如果你的Python是32位,请先修改C:\libsvm-3.21\libsvm-3.21中的makefile.win(不是makefile)中的CFLAGS =/nologo /O2 /EHsc /I. /D _WIN64 /D _CRT_SECURE_NO_DEPRECATE,将其中的D_WIN64改成D_WIN32。
4.用Visual Studio Win32Command Prompt(2010)(vs命令行工具)进行编译,我的电脑安装了visual studio 2010,打开vs,在“工具”中并没有找到,原来是需要自己添加。“工具”->“外部工具”,点击右上方“添加”->“确定”。
内容填写如下,参数一栏前面是自己vs的安装路径,直到vsvars32.bat,“确定”。
然后会在“工具”中看到Visual Studio 2010 Command Prompt
单击打开,因为我的安装路径是这样的,所以如下图所示。
我们要先进入libsvm中,用cd..退到上一层,用C:定位到c盘,进入libsvm目录进行编译。
这时libsvm的文件将进行重新编译。
然后将新生成的C:\libsvm-3.21\libsvm-3.21\windows下的libsvm.dll拷贝到C:\windows\system32目录下。这时libsvm就可以使用了。
5.测试
测试成功。
*虽然还是没有解决最初的问题,但还有有一点点收获。其间参考了很多博客,感谢大家的分享。本文没有涵盖所有的情况,只是根据自己的软件版本和具体情况而言。文中的截图是自己测试过程中的截图,测试有效。对于我最初的问题,希望大家可以帮忙解决,谢谢。(之前安装了mlpy库,现在安装了libsvm,但mlpy.libsvm()无法使用,现在安装的libsvm应该与mlpy库无关)