一: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路径的那项,根据实际路径进行修改,并保存

4python与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位的请参考文献,请参考上述连接。

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

参数说明:

-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://pan.baidu.com/s/1mwJ18

 

版权说明转载请标明出处:http://www.cnblogs.com/Dzhouqi/p/3653823.html

如何利用python使用libsvm的更多相关文章

  1. 学习笔记24—win10环境下python版libsvm的安装

    1.前言 由于毕业设计需要用到libsvm,所以最近专心于配置libsvm,曾经尝试过在matlab中安装,但是没有成功.最终在Python环境中完成安装. 2.LIBSVM介绍 LIBSVM 是台湾 ...

  2. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  3. 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片

    概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...

  4. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  5. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  6. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  7. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  8. 《利用python进行数据分析》读书笔记 --第一、二章 准备与例子

    http://www.cnblogs.com/batteryhp/p/4868348.html 第一章 准备工作 今天开始码这本书--<利用python进行数据分析>.R和python都得 ...

  9. 有关利用python获取网页, 以及KDD近几年论文标题与摘要链接

    最近一直在看KDD的论文,不过,由于老师并没有什么合理的方向性,所以考虑把kdd中的大部分内容都利用python将所有标题.摘要获取下来. 还有一个原因在于,看acm上的摘要,都只显示了两行,再看多点 ...

随机推荐

  1. Xamarin 实现android gridview 多选

    参考文章:http://blog.csdn.net/zhouyuanjing/article/details/8372686 GridView初始化代码: gridViewStudent = Find ...

  2. Nodejs微信接口

    代码重要部分都已详细注释,test.js为实例,如果启动url请求,那么程序默认对json格式数据友好,如果有特殊需要,请自行修改返回数据的处理格式 大概功能简介为下: this._token 提供t ...

  3. DTCMS会员中心快速更改样式思路

    非常简便 制作一个public.css文件,包含网站头部和底部的样式代码 每个会员中心模版导入这个文件就可以 把原先style.css的头部和底部样式代码删除

  4. Windows平台下为Python添加MySQL支持

    到Python官网下载MySQL-python-1.2.5.win32-py2.7.exe 安装MySQL-python-1.2.5.win32-py2.7 附 64位MySQL-python下载地址 ...

  5. uniquery 在win2008 下hold的问题。

    TmpQry.ReadOnly := True; 加上这句解决,原因未知!

  6. VLAN和Trunk

    Vlan实验题: 如图所示 解答过程 (一)相同vlan之间的设备全连通 1. 在SW1和SW2上分别创建vlan2和vlan3, 命令如下 SW1# vlan database SW1(vlan)# ...

  7. hibernate的n+1问题

    下面选自<精通Hibernate:Java对象持久化技术详解>作者:孙卫琴 在Session的缓存中存放的是相互关联的对象图.默认情况下,当Hibernate从数据库中加载Customer ...

  8. 一些shell脚本实例

    在群里也混了不少时间了.总结一些实例 #统计QQ消息里面某个用户改名字的记录# awk -f# 聊改名字记录#特殊例子 例如#2013-11-28 9:23:56 北京-AA-Vip<12345 ...

  9. Windows Service 访问远程共享权限设置

    最近为实现共享目录之间的文件同步,开发了一个Windows Service. 考虑到在拷贝过程中,如果网络忽然抽风访问不了,导致文件拷贝不完整的情况,果断抛弃.Net 自带的 COPY 方法,而使用D ...

  10. opencv学习笔记(01)——操作图像的像素

    #include <opencv2\core\core.hpp> #include <opencv2\highgui\highgui.hpp> #include <ope ...