文档章节

如何利用python使用libsvm

mickelfeng
 mickelfeng
发布于 2017/01/17 17:10
字数 1760
阅读 217
收藏 0

Python 之 LIBSVM 使用小结(一)

Python 之 LIBSVM 使用小结(三)

一:libsvm包下载与使用:

     LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进.在作者主页http://www.csie.ntu.edu.tw/~cjlin/可以方便下载。

1.把包解压在C盘之中,如:C:\libsvm-3.18

2.因为要用libsvm自带的脚本grid.py和easy.py,需要去官网下载绘图工具gnuplot,解压到c盘

3.进入c:\libsvm\tools目录下,用文本编辑器(记事本,edit都可以)修改grid.py和easy.py两个文件,找到其中关于gnuplot路径的那项,根据实际路径进行修改,并保存

4.python与libsvm的连接(参考SVM学习笔记(2)LIBSVM在python下的使用 


a.打开IDLE(python GUI),输入 
>>>import sys 
>>>sys.version 
如果你的python是32位,将出现如下字符: 
‘2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)]’ 
这个时候LIBSVM的python接口设置将非常简单。在libsvm-3.16文件夹下的windows文件夹中找到动态链接库libsvm.dll,将其添加到系统目录,如`C:\WINDOWS\system32\’,即可在python中使用libsvm

b.如果你是64位的请参考文献,请参考上述连接。

如果你的python是64位的,也就是说打开IDLE(python GUI),输入
>>>import sys
>>>sys.version
出现如下字符:
'2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)]'
这时你需要首先自己编译64位的动态链接库libsvm.dll。方法如下:
在程序列表中的Microsoft Visual Studio 2010/Visual Studio Tools下找到Visual Studio x64 Win64 Command Prompt(2010),注意一定要是64位的command prompt
cd到LIBSVM所在文件夹libsvm-3.16
输入nmake -f Makefile.win clean all
这时libsvm-3.16的windows目录下将生成64位的动态链接库。将新生成的libsvm.dll复制到系统目录(例如`C:\WINDOWS\system32\')即可。

5.执行一个小例子

import os 

os.chdir('C:\libsvm-3.18\python')#请根据实际路径修改

from svmutil import *

y, x = svm_read_problem('../heart_scale')#读取自带数据

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

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

##出现如下结果,应该是正确安装了

optimization finished, #iter = 257 
nu = 0.351161 
obj = -225.628984, rho = 0.636110 
nSV = 91, nBSV = 49 
Total nSV = 91 
Accuracy = 84.2857% (59/70) (classification)

 

二几个简单的例子

http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/下载实验数据集。并且将数据集拷贝到C:\libsvm-3.18\windows下(因为之后我们需要利用该文件夹下的其他文件,这样比较方便,当然之后你用绝对地址也可以了)

建立一个py文件,写下如下代码:

例1:

import os


os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *

y, x = svm_read_problem('train.1.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.txt')#训练测试数据
m = svm_train(y, x )#训练
svm_predict(yt,xt,m)#测试

执行上述代码,精度为:Accuracy = 66.925% (2677/4000) (classification)

 

常用接口

    svm_train()        : train an SVM model#训练

    svm_predict()      : predict testing data#预测

    svm_read_problem() : read the data from a LIBSVM-format file.#读取libsvm格式的数据

    svm_load_model()   : load a LIBSVM model.

    svm_save_model()   : save model to a file.

    evaluations()      : evaluate prediction results.

- Function: svm_train#三种训练写法

    There are three ways to call svm_train()

    >>> model = svm_train(y, x [, 'training_options'])

    >>> model = svm_train(prob [, 'training_options'])

    >>> model = svm_train(prob, param)

 

有关参数的设置(read me 文件夹中有详细说明):

Usage: svm-train [options] training_set_file [model_file]

options:

-s svm_type : set type of SVM (default 0)#选择哪一种svm

0 -- C-SVC (multi-class classification)

1 -- nu-SVC (multi-class classification)

2 -- one-class SVM

3 -- epsilon-SVR (regression)

4 -- nu-SVR (regression)

-t kernel_type : set type of kernel function (default 2)#是否用kernel trick

0 -- linear: u'*v

1 -- polynomial: (gamma*u'*v + coef0)^degree

2 -- radial basis function: exp(-gamma*|u-v|^2)

3 -- sigmoid: tanh(gamma*u'*v + coef0)

4 -- precomputed kernel (kernel values in training_set_file)

-d degree : set degree in kernel function (default 3)

-g gamma : set gamma in kernel function (default 1/num_features)

-r coef0 : set coef0 in kernel function (default 0)

-c cost : set the parameter C of C-SVC, epsilon-SVR, and nu-SVR (default 1)

-n nu : set the parameter nu of nu-SVC, one-class SVM, and nu-SVR (default 0.5)

-p epsilon : set the epsilon in loss function of epsilon-SVR (default 0.1)

-m cachesize : set cache memory size in MB (default 100)

-e epsilon : set tolerance of termination criterion (default 0.001)

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1)

-b probability_estimates : whether to train a SVC or SVR model for probability estimates, 0 or 1 (default 0)

-wi weight : set the parameter C of class i to weight*C, for C-SVC (default 1)

-v n: n-fold cross validation mode

-q : quiet mode (no outputs)

三提高预测的准确率:

通过一定的过程,可以提高预测的准确率(在文献2中有详细介绍):

a.转换数据为libsvm可用形式.(可以通过下载的数据了解格式)

b.进行一个简单的尺度变换

c.利用RBF kernel,利用cross-validation来查找最佳的参数 C 和 r

d.利用最佳参数C 和 r ,来训练整个数据集

e.测试

 

再看例子1:

1.进入cmd模式下,输入如下代码,将现有数据进行适度变换,生成变换后的数据文件train.1.scale.txt

image

参数说明:

-l 变换后的下限

-u 变换后的上限

-s 参考上文

 

2执行以下代码

import os


os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *

y, x = svm_read_problem('train.1.scale.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据
m = svm_train(y, x )#训练
svm_predict(yt,xt,m)#测试

精确度为Accuracy = 95.6% (3824/4000) (classification)。

可见我们只是做了简单的尺度变换后,预测的正确率大大提升了。

 

3通过选择最优参数,再次提高预测的准确率:(需要把tools文件下的grid.py拷贝到'C:\libsvm-3.18\windows'下)

import os
os.chdir('C:\libsvm-3.18\windows')#设定路径
from svmutil import *
from grid import *

rate, param = find_parameters('train.1.scale.txt', '-log2c -3,3,1 -log2g -3,3,1')

y, x = svm_read_problem('train.1.scale.txt')#读入训练数据
yt, xt = svm_read_problem('test.1.scale.txt')#训练测试数据
m = svm_train(y, x ,'-c 2 -g 4')#训练
p_label,p_acc,p_vals=svm_predict(yt,xt,m)#测试

执行上面的程序,find_parmaters函数,可以找到对应训练数据较好的参数。后面的log2c,log2g分别设置C和r的搜索范围。搜索机制是以2为底指数搜索,如 –log2c –3 , 3,1 就是参数C,从2^-3,2^-2,2^-1…搜索到2^3.

搜索到较好参数后,在训练的时候加上参数的设置。

另外,读者可以自己试试数据集2,3.

 

详细资料,请参见参考文献。PS:个人建议,比较复杂的问题,一上来还是先参考官方的文档,或者paper,书籍,比较好。然后再结合网络博客等资料可以快速理解解决问题。

 

参考文献与资料:

1.libsvm作者主页:http://www.csie.ntu.edu.tw/~cjlin/

2.A practical guide to support vector classification

3.libsvm包中的read me文件

4.数据集下载地址:http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/

5.SVM学习笔记(2)LIBSVM在python下的使用

6.svm相关理论,统计学习方法第七章,A tutorial on support vector regression,A Tutorial on Support Vector Machines for Pattern

http://www.cnblogs.com/GuoJiaSheng/p/4480497.html

小福利,资料打包下载

http://pan.baidu.com/s/1mwJ18

http://www.cnblogs.com/GuoJiaSheng/p/4480497.html

本文转载自:http://www.cnblogs.com/Dzhouqi/p/3653823.html

mickelfeng

mickelfeng

粉丝 237
博文 2801
码字总数 604377
作品 0
成都
高级程序员
私信 提问
MATLAB安装libsvm工具箱的方法

支持向量机(support vector machine,SVM)是机器学习中一种流行的学习算法,在分类与回归分析中发挥着重要作用。基于SVM算法开发的工具箱有很多种,下面我们要安装的是十分受欢迎的libsvm工...

东聃
2018/08/12
0
0
python下使用libsvm:计算点到超平面的距离

最近在看的资料里涉及到计算 点到支持向量机分类超平面的距离 这一点内容,我使用的svm是libsvm。 由于是新手,虽然看了一些资料,但中英转换误差等等原因导致经常出现理解错误,因此对libsv...

小梳子一直走
2014/03/17
2.8K
0
LibSvm使用说明和LibSvm源码解析

kernel_type rbf //训练采用的核函数类型,此处为RBF核gamma 0.0769231 //RBF核的参数γnr_class 2 //类别数,此处为两分类问题total_sv 132 //支持向量总个数rho 0.424462 //判决函数的偏置...

haoji007
2018/05/13
0
0
sparkmlib的sample_binary_classification_data.txt 和sample_libsvm_data.txt内容怎么换成实际项目内容

sample_binary_classification_data.txt 和sample_libsvm_data.txt的内容怎么理解和使用 sparkmlib的sample_binary_classification_data.txt 和sample_libsvm_data.txt内容怎么换成实际项目内......

知行合一1
2017/09/30
211
0
【毕设进行时-工业大数据,数据挖掘】LIBSVM 初步测试

正文之前 打摆子的日子很快就要一去不复返了。想想有点悲伤。今天做了下LibSVM的初步运用,也写了个从数据库读取数据,然后改造成LibSVM需要的数据格式的类,需要的自取。 正文 这是个从前面...

HustWolf
2018/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

zk中选举Leader时的网络IO QuorumCnxManager解析

每台服务启动过程中,会启动一个QuorumCnxManager,负责各台服务器之间底层Leader选举过程中的网络通信 当集群中有服务器服务中断时,zk会重新选举leader 内部类 Message定义消息结构 包含了...

writeademo
24分钟前
2
0
使用mdBook 替代 gitbook。

为什么要替代gitbook gitbook 有个模板问题:如果md文件中有连续的大括号(比如:&{{父亲 40}}),gitbook会把{{ 父亲 40 }}中的父亲 40当做一个模板变量。如果这个变量不存在,会报错 Temp...

王坤charlie
27分钟前
3
0
TL-A7HSAD采集卡硬件的处理器、NOR FLASH、DDR3

TL-A7HSAD是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的高速数据采集卡,可配套广州创龙TMS320C6655、TMS320C6657、TMS320C6678开发板使用。该采集卡包含1个双通道250MSPS*12Bit的高...

Tronlong创龙
39分钟前
3
0
项目启动报fastjson版本可能过低

进行项目启动的过程中,之前都正常,这次启动突然就失败了: 查看日志说的是版本过低,后来查看官方网站版本,替换了最新版本: 选择了最新版本的1.2.60,1.2.62尝试后都不行,后来查看网上搜...

aiChuang
39分钟前
3
0
McDonald’s is using Alexa and Google to accepting job applications

McDonald’s today announced a new initiative the fast food chain is calling the “Apply Thru,” in which owners of Amazon Alexa or Google Assistant devices can begin job applic......

wowloop
43分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部