libsvm学习——windows环境下libsvm-3.23在Python的安装过程

一.libsvm简介

       libsvm是台湾林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机库,这套库运算速度挺快,可以很方便的对数据做分类或回归。由于libsvm程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM的库。

       libsvm包含的内容:

(1)java文件夹  ,主要应用于java平台;  
(2)python文件夹,是用来参数优选的工具;  
(3)tools文件夹,主要包含四个python文件,用来数据集抽样(subset),参数优选(grid),集成测试(easy), 数据检查(checkdata);  
(4)windows文件夹 , 包含libsvm四个exe程序包,我们所用的库就是他们,里面还有个heart_scale,是一个样本文件,可以用记事本打开,用来测试用的;
(5)svm-toy文件,一个可视化的工具,用来展示训练数据和分类界面,里面是源码,其编译后的程序在windows文件夹下;  
(6)heart_scale文件,是测试用的训练文件;
(7)其他.h和.cpp文件都是程序的源码,可以编译出相应的.exe文件。其中,最重要的是svm.h和svm.cpp文件,svm-predict.c、svm-scale.c和svm-train.c(还有一个svm-toy.c在svm-toy文件夹中)都是调用的这个文件中的接口函数,编译后就是windows下相应的四个exe程序。另外,里面的 README 跟 FAQ 是很好的帮助文件。

二.下载libsvm和gnuplot

1.libsvm(3.23)下载地址:https://www.csie.ntu.edu.tw/~cjlin/libsvm/

  下载完成后解压缩得到如下文件:我的路径是D:\libsvm-3.23

2.对libsvm.dll进行适配处理

首先确定本机的python版本,我的python是64位libsvm学习——windows环境下libsvm-3.23在Python的安装过程

打开Visual Studio x64 Win64 Command Prompt(2010),输入如下代码:

cd D:\libsvm-3.23
nmake -f Makefile.win clean all

将新生成的D:\libsvm-3.23\windows下的libsvm.dll拷贝到C:\windows\system32目录下。 

3.配置path环境变量

将解压的libsvm文件夹下的tools和windows所在的路径D:\libsvm-3.23\tools和D:\libsvm-3.23\windows添加到path的环境变量中。     

4.下载并安装gnuplot         

gnuplot下载地址:https://sourceforge.net/projects/gnuplot/     

下载完成如下图所示,根据提示即可完成安装   libsvm学习——windows环境下libsvm-3.23在Python的安装过程

gnuplot下载及基本使用,参见https://blog.****.net/weixin_42014622/article/details/82962634

5.修改easy.py和grid.py 

打开D:\libsvm-3.23\tools,找到grid.py文件,用记事本打开,修改svm-train.exe和gnuplot.exe的路径libsvm学习——windows环境下libsvm-3.23在Python的安装过程

6.验证能否使用libsvm

在cmd中输入python,打开python命令行, 输入如下代码:

>>>import os

>>>os.chdir('D:\libsvm-3.23\python')

>>>from svmutil import * 

>>>y, x = svm_read_problem('D:\libsvm-3.23\heart_scale')

>>>m = svm_train(y[:200], x[:200], '-c 4')

>>>p_label, p_acc, p_val = svm_predict(y[200:], x[200:], m)

会计算出一个准确率数值,这时你的libsvm就安装成功了!

libsvm学习——windows环境下libsvm-3.23在Python的安装过程​ 

7.grid.py参数优化

运行cmd,进入dos环境,定位到D:\libsvm-3.23\tools文件夹,输入:

python grid.py heart_scale

会看到dos窗口中飞速乱串的[local]数据,以及一个gnuplot的动态绘图窗口,如下图所示:libsvm学习——windows环境下libsvm-3.23在Python的安装过程

libsvm学习——windows环境下libsvm-3.23在Python的安装过程

大约过10秒钟,就会停止,直接看最后一行: libsvm学习——windows环境下libsvm-3.23在Python的安装过程

其意义表示:C = 2048.0;γ=0.0001220703125;交叉验证精度CV Rate = 84.0741%,这就是最优结果。

然后,打开目录D:\libsvm-3.23\tools,我们可以看到新生成了两个文件:heart_scale.out和heart_scale.png,第一个文件就是搜索过程中的[local]和最优数据,第二个文件就是gnuplot图像。

现在grid.py已经运行完了,可以把最优参数输入到svm-train中进行训练了。定位到D:\libsvm-3.23下,输入:

svm-train -c 2048.0 -g 0.0001220703125 heart_scale trainagain1.model

       其中-c和-g就是优化后的参数。

libsvm学习——windows环境下libsvm-3.23在Python的安装过程

优化之前的结果如下:

libsvm学习——windows环境下libsvm-3.23在Python的安装过程​ 

可以看出,迭代次数从162次上升到了1046次,边界上的支持向量个数从107下降到了91,说明在优化以前边界向量有10多个错误分类,同时,总支持向量个数从132减到了103。

其中,

#iter为迭代次数,nu 是你选择的核函数类型的参数,obj为SVM文件转换为的二次规划求解得到的最小值,rho为判决函数的偏置项b,nSV 为标准支持向量个数(0<a<c),nBSV为边界上的支持向量个数(a=c),Total nSV为支持向量总个数(对于两类来说,因为只有一个分类模型Total nSV = nSV,但是对于多类,这个是各个分类模型的nSV之和)。

参考博客:https://www.cnblogs.com/jiahuiyu/p/5415936.html