LIBSVM使用方法

LIBSVM

1 LIBSVM简介

LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件还有一个特点,就是对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数就可以解决很多问题;并且提供了交互检验(Cross -SVM回归等问题,包括基于一对一算法的多类模式识别问题。SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。ν-SVM回归和ε-SVM分类、νValidation)的功能。该软件包可以在http://www.csie.ntu.edu.tw/~cjlin/免费获得。该软件可以解决C-SVM分类、-SVM回归等问题,包括基于一对一算法的多类模式识别问题。SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。

2 LIBSVM使用方法

LibSVM是以源代码和可执行文件两种方式给出的。如果是Windows系列操作系统,可以直接使用软件包提供的程序,也可以进行修改编译;如果是Unix类系统,必须自己编译,软件包中提供了编译格式文件,我们在SGI工作站(操作系统IRIX6.5)上,使用免费编译器GNU C++3.3编译通过。

2.1 LIBSVM 使用的一般步骤:

1) 2) 3) 4) 5) 6) 按照LIBSVM软件包所要求的格式准备数据集; 对数据进行简单的缩放操作; 考虑选用RBF 核函数; 采用交叉验证选择最佳参数C与g; 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型; 利用获取的模型进行测试与预测。

2.2 LIBSVM使用的数据格式

该软件使用的训练数据和检验数据文件格式如下:

: : ...

其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。 是以1开始的整数,可以是不连续的;为实数,也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差,如果它是未知的,只需用一个数填写这一栏,也可以空着不填。在程序包中,还包括有一个训练数据实例:heart_scale,方便参考数据文件格式以及练习使用软件。可以编写小程序,将自己常用的数据格式转换成这种格式。

2.3 Svmtrain和Svmpredict的用法

Svmtrain(训练建模)的用法:

svmtrain [options] training_set_file [model_file]

Options:可用的选项即表示的涵义如下

-s svm类型:SVM设置类型(默认0)

0 -- C-SVC

1 --v-SVC

2 – 一类SVM

3 -- e -SVR

4 -- v-SVR

-t 核函数类型:核函数设置类型(默认2)

0 – 线性:u'v

1 – 多项式:(r*u'v + coef0)^degree

2 – RBF函数:exp(-r|u-v|^2)

3 –sigmoid:tanh(r*u'v + coef0)

-d degree:核函数中的degree设置(默认3)

-g r(gama):核函数中的?函数设置(默认1/ k)

-r coef0:核函数中的coef0设置(默认0)

-c cost:设置C-SVC,? -SVR和?-SVR的参数(默认1)

-n nu:设置?-SVC,一类SVM和?- SVR的参数(默认0.5)

-p e:设置? -SVR 中损失函数?的值(默认0.1)

-m cachesize:设置cache内存大小,以MB为单位(默认40)

-e ε:设置允许的终止判据(默认0.001)

-h shrinking:是否使用启发式,0或1(默认1)

-wi weight:设置第几类的参数C为weight?C(C-SVC中的C)(默认1)

-v n: n-fold交互检验模式

其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。 training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,文件中包括支持向量样本数、支持向量样本以及Lagrange系数等必须的参数;该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

2.4 Svmpredict的用法

Svmpredict(使用已有的模型进行预测)的用法:

svmpredict test_file model_file output_file

model_file是由svmtrain产生的模型文件;test_file是要进行预测的数据文件;Output_file是svmpredict的输出文件。svm-predict没有其它的选项。

svmtrain -s 0 -c 1000 -t 1 -g 1 -r 1 -d 3 data_file

训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。

svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file

在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SVM (? = 0.1)分类器。

svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file

以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。

LIBSVM使用笔记

1 程序准备:

C:\Python25 //需要安装python2.5

E:\svm\libsvm-2.83 //解压缩libsvm-2.83

E:\svm\libsvm-2.83\gp373w32 //画图工具gnuplot

E:\svm\libsvm-2.83\python //SVM, cross validation

E:\svm\libsvm-2.83\tools //easy.py, grid.py, subset.py

E:\svm\libsvm-2.83\tools1 //生成所需格式的数据,两种方式:matlab 或 excel E:\svm\libsvm-2.83\windows //windows 下面的4个可执行程序

2 修改E:\svm\libsvm-2.83\tools\easy.py:

程序开始加入以下两句:

svmpath =

gnuplot_exe = r

gnuplot_exe = r

grid_py = r

3 修改E:\svm\libsvm-2.83\tools\grid.py:

程序开始加入以下两句:

svmpath =

gnuplot_exe = r

4 数据准备:

1、 使用excel宏

手工转换数据格式,可以通过excel文件FormatDataLibsvm.xls打开包含数据的文本文件,然后用宏将数据转换为libsvm格式。也可以用宏将libsvm格式的数据转换回来。

2、使用matlab

FormatSplitBat.m是一个批量将以Tab或者空格分隔的数据转换为libsvm格式,并且分成占全部数据比例为p的训练集和1-p的测试集,然后调用easy.py的例子。//摘自Libsvm-2_6.mht

修改程序中的三处路径与本机实际存储情况一致,并确保easy.py的第28行能够正确调用grid.py,之后将fileList.txt文件中写入要转换格式的文件列表。这些文件名都在当前路径(E:\svm\libsvm-2.83\data)之下。

运行E:\svm\libsvm-2.83\Tools1\FormatSplitBat.m,程序自动将fileList.txt中提到的文件名的数据内容按照概率p进行随机划分,本程序p为0.5,则有一半划分到train,一半划分到test。另外,本程序划分是循环10次,可以按照自己的要求进行调整。每次循环将每个原数据文档在文件夹E:\svm\libsvm-2.83\data中生成4个文件,分别是:file_i.train, file_i.test, file_iL.train, file_iL.test. 其中,L表示标示变量在左边,为libsvm能够使用的文件。 运行过程中,每一次循环程序都要调用easy.py,grid.py默认采用5倍交叉验证,对c采用的搜索范围和步长分别为[-10, 15]和 1,g的为[10, -15]和-1,可根据需要自行修改grid.py。运行完grid.py,在..\tools1\中每两个有L的文件(train, test)生成了7个文件,分别是train5个,test2个。其中train中生成3个scale (-, out, png),一个range,一个model。Test中一个scale,一个predict。

利用Libsvm进行SVM分类 SVM分类器通常具有较高的分类精度。我这里不想过多的去说SVM是怎么回事,只是提供一种使用SVM进行判别的方法。我使用的是开源的LibSVM实现SVM分类。Google上输入LIBSVM可以很容易的找到代码下载。我使用的是C#版(不过是2.6版),也可以使用C++的2.81版。下面我说说如何使用2.81版中带的编译好的程序完成聚类工作。该版本支持多类判别。

1、数据准备工作

首先输入数据进行处理,生成符合SVM处理规范的文本格式。关于格式的更多说明可以参考软件使用手册。另外此步可以不用归一化,因为LibSVM工具中提供了scale工具,可以自动完成数据的归一化处理工作。

2、程序配置工作

LibSVM 2.81版下载下来后并不能直接操作,还需要一些辅助工作,否则在默认判别的方式下工作判别精度可能非常低。关于此方面的更多内容可以参考《A Practical Guide to Support Vector Classification》一文,该PDF文档可以从LibSVM的网站上下载到。 在使用LibSVM之前首先要安装Pathon,Pathon 2.4可以从Pathon的网站上下载到。 紧接着就是需要装“pgnuplot.exe”,LibSVM使用它完成参数搜索时的绘图工作,该程序没有包含在LibSVM 2.81版的压缩包中,需要自己到网上搜索并下载。另外在LibSVM 2.81中grid.py代码里默认pgnuplot.exe的路径是“c:\tmp\gnuplot\bin\pgnuplot.exe”,你可以将“pgnuplot.exe”放到该路径下或修改grid.py代码指向你自己的路径。

所有这些准备工作完成后,就可以进行SVM分类工作了。

3、SVM分类

使用SVM分类可以执行“libsvm-2.81\tools”目录下的easy.py程序,该程序提供了一套默认的、精度较高的SVM分类算法。

在DOS窗口下输入:C:\Python\Python easy.py Train.txt Test.txt就可以利用Train.txt中的数据进行训练,然后对Test.txt中的数据进行判别。

LIBSVM入门

许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的English,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

1. LIBSVM 软件包简介

LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及C#.net 等各种语言的接口,可以方便的在Windows 或UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS 平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。

2. LIBSVM 使用方法简介

LIBSVM 在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩操作的svmscale.exe。它们都可以直接在DOS 环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。

LIBSVM 使用的一般步骤是:

1) 按照LIBSVM软件包所要求的格式准备数据集;

2) 对数据进行简单的缩放操作;

3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;

4) 采用交叉验证选择最佳参数C与g ;

5) 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;

6) 利用获取的模型进行测试与预测。

2.1 LIBSVM 使用的数据格式

LIBSVM使用的训练数据和测试数据文件格式如下:: : …其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。是以1 开始的整数,表示特征的序号;为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如: +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

2.2 svmscale 的用法

对数据集进行缩放的目的在于:

1)避免一些特征值范围过大而另一些特征值范围过小;

2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常

将数据缩放到[ -1,1]或者是[0,1]之间。用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper]

[-s save_filename] [-r restore_filename] filename(缺省值: lower = -1,upper = 1,没有对y进行缩放)其中,

-l:数据下限标记;lower:缩放后数据下限;

-u:数据上限标记;upper:缩放后数据上限;

-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

-s save_filename:表示将缩放的规则保存为文件save_filename;

-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

filename:待缩放的数据文件(要求满足前面所述的格式)。

缩放规则文件可以用文本浏览器打开,看到其格式为:

lower upper

lval1 uval1

lval2 uval2

其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。

使用实例:

1) svmscale –s train3.range train3>train3.scale表示采用缺省值(即对属性值缩放到[ -1,1]的范围,对目标值不进行缩放)对数据集train3 进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

2) svmscale –r train3.range test3>test3.scale表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线性的地对数据集test3 进行缩放,结果保存为test3.scale。

2.3 svmtrain 的用法

svmtrain实现对训练数据集的训练,获得SVM模型。

用法: svmtrain [options] training_set_file [model_file]其中,

options(操作参数):可用的选项即表示的涵义如下所示

-s svm类型:设置SVM 类型,默认值为0,可选类型有:

0 -- C- SVC

1 -- n – SVC

2 -- one-class-SVM

3 -- e – SVR

4 -- n – SVR

-t 核函数类型:设置核函数类型,默认值为2,可选类型有:

0 -- 线性核:u'*v

1 -- 多项式核: (g*u'*v+ coef 0)degree

2 -- RBF 核:e( u v 2) g –

3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

-d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ; -r coef 0:设置核函数中的coef 0,默认值为0;

-c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

-n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

-p e :设置n - SVR的损失函数中的e ,默认值为0.1;

-m cachesize:设置cache内存大小,以MB为单位,默认值为40;

-e e :设置终止准则中的可容忍偏差,默认值为0.001;

-h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

-wi weight:对各类样本的惩罚系数C加权,默认值为1;

-v n:n折交叉验证模式。其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

使用实例:

1)svmtrain train3.scale train3.model训练train3.scale,将模型保存于文件train3.model,并在dos窗口中输出如下结果:

optimization finished, #iter = 1756

nu = 0.464223

obj = -551.002342, rho = -0.337784

nSV = 604, nBSV = 557

Total nSV = 604其中,#iter为迭代次数,nu 与前面的操作参数-n n 相同,obj为SVM文件转换为的二次规划求解得到的最小值,rho 为判决函数的常数项b,nSV 为支持向量个数,nBSV为边界上的支持向量个数,Total nSV为支持向量总个数。训练后的模型保存为文件train3.model,用记事本等文本浏览器打开可以看到其内容如下(其后“%”后内容为笔者所加注释):

svm_type c_svc % 训练所采用的svm类型,此处为C- SVC

kernel_type rbf % 训练采用的核函数类型,此处为RBF核

gamma 0.047619 % 与操作参数设置中的g 含义相同

nr_class 2 % 分类时的类别数,此处为两分类问题

total_sv 604 % 总共的支持向量个数

rho -0.337784 % 决策函数中的常数项b

label 0 1 % 类别标签

nr_sv 314 290 % 各类别标签对应的支持向量个数

SV % 以下为支持向量

1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1

1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1... ... ...

1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1

% 对于分类问题,上面的支持向量的各列含义与训练数据集相同;对于回归问题,略有不同,与训练数据中的标签label(即y值)所对应的位置在模型文件的支持向量中现在存放的是Lagrange 系数a 值,即为下面决策函数公式中的a 值:

* *

1

() ( )( ( ) ( )) ( ) ( , )

( , )

K

i i i i i i

i i sv

i i

i sv

fx a a x x b a a k x x b

ak x x b

= = - F F + = - +

= + g

2.4 svmpredict 的用法

svmpredict 是根据训练获得的模型,对数据集合进行预测。

用法:svmpredict [options] test_file model_file output_file

options(操作参数):

-b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有其它的选项。

LIBSVM

1 LIBSVM简介

LIBSVM是台湾大学林智仁(Lin Chih-Jen)副教授等开发设计的一个简单、易于使用和快速有效的SVM模式识别与回归的软件包,他不但提供了编译好的可在Windows系列系统的执行文件,还提供了源代码,方便改进、修改以及在其它操作系统上应用;该软件还有一个特点,就是对SVM所涉及的参数调节相对比较少,提供了很多的默认参数,利用这些默认参数就可以解决很多问题;并且提供了交互检验(Cross -SVM回归等问题,包括基于一对一算法的多类模式识别问题。SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。ν-SVM回归和ε-SVM分类、νValidation)的功能。该软件包可以在http://www.csie.ntu.edu.tw/~cjlin/免费获得。该软件可以解决C-SVM分类、-SVM回归等问题,包括基于一对一算法的多类模式识别问题。SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。

2 LIBSVM使用方法

LibSVM是以源代码和可执行文件两种方式给出的。如果是Windows系列操作系统,可以直接使用软件包提供的程序,也可以进行修改编译;如果是Unix类系统,必须自己编译,软件包中提供了编译格式文件,我们在SGI工作站(操作系统IRIX6.5)上,使用免费编译器GNU C++3.3编译通过。

2.1 LIBSVM 使用的一般步骤:

1) 2) 3) 4) 5) 6) 按照LIBSVM软件包所要求的格式准备数据集; 对数据进行简单的缩放操作; 考虑选用RBF 核函数; 采用交叉验证选择最佳参数C与g; 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型; 利用获取的模型进行测试与预测。

2.2 LIBSVM使用的数据格式

该软件使用的训练数据和检验数据文件格式如下:

: : ...

其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。 是以1开始的整数,可以是不连续的;为实数,也就是我们常说的自变量。检验数据文件中的label只用于计算准确度或误差,如果它是未知的,只需用一个数填写这一栏,也可以空着不填。在程序包中,还包括有一个训练数据实例:heart_scale,方便参考数据文件格式以及练习使用软件。可以编写小程序,将自己常用的数据格式转换成这种格式。

2.3 Svmtrain和Svmpredict的用法

Svmtrain(训练建模)的用法:

svmtrain [options] training_set_file [model_file]

Options:可用的选项即表示的涵义如下

-s svm类型:SVM设置类型(默认0)

0 -- C-SVC

1 --v-SVC

2 – 一类SVM

3 -- e -SVR

4 -- v-SVR

-t 核函数类型:核函数设置类型(默认2)

0 – 线性:u'v

1 – 多项式:(r*u'v + coef0)^degree

2 – RBF函数:exp(-r|u-v|^2)

3 –sigmoid:tanh(r*u'v + coef0)

-d degree:核函数中的degree设置(默认3)

-g r(gama):核函数中的?函数设置(默认1/ k)

-r coef0:核函数中的coef0设置(默认0)

-c cost:设置C-SVC,? -SVR和?-SVR的参数(默认1)

-n nu:设置?-SVC,一类SVM和?- SVR的参数(默认0.5)

-p e:设置? -SVR 中损失函数?的值(默认0.1)

-m cachesize:设置cache内存大小,以MB为单位(默认40)

-e ε:设置允许的终止判据(默认0.001)

-h shrinking:是否使用启发式,0或1(默认1)

-wi weight:设置第几类的参数C为weight?C(C-SVC中的C)(默认1)

-v n: n-fold交互检验模式

其中-g选项中的k是指输入数据中的属性数。option -v 随机地将数据剖分为n部分并计算交互检验准确度和均方根误差。以上这些参数设置可以按照SVM的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。 training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,文件中包括支持向量样本数、支持向量样本以及Lagrange系数等必须的参数;该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

2.4 Svmpredict的用法

Svmpredict(使用已有的模型进行预测)的用法:

svmpredict test_file model_file output_file

model_file是由svmtrain产生的模型文件;test_file是要进行预测的数据文件;Output_file是svmpredict的输出文件。svm-predict没有其它的选项。

svmtrain -s 0 -c 1000 -t 1 -g 1 -r 1 -d 3 data_file

训练一个由多项式核(u'v+1)^3和C=1000组成的分类器。

svmtrain -s 1 -n 0.1 -t 2 -g 0.5 -e 0.00001 data_file

在RBF核函数exp(-0.5|u-v|^2)和终止允许限0.00001的条件下,训练一个?-SVM (? = 0.1)分类器。

svmtrain -s 3 -p 0.1 -t 0 -c 10 data_file

以线性核函数u'v和C=10及损失函数?= 0.1求解SVM回归。

LIBSVM使用笔记

1 程序准备:

C:\Python25 //需要安装python2.5

E:\svm\libsvm-2.83 //解压缩libsvm-2.83

E:\svm\libsvm-2.83\gp373w32 //画图工具gnuplot

E:\svm\libsvm-2.83\python //SVM, cross validation

E:\svm\libsvm-2.83\tools //easy.py, grid.py, subset.py

E:\svm\libsvm-2.83\tools1 //生成所需格式的数据,两种方式:matlab 或 excel E:\svm\libsvm-2.83\windows //windows 下面的4个可执行程序

2 修改E:\svm\libsvm-2.83\tools\easy.py:

程序开始加入以下两句:

svmpath =

gnuplot_exe = r

gnuplot_exe = r

grid_py = r

3 修改E:\svm\libsvm-2.83\tools\grid.py:

程序开始加入以下两句:

svmpath =

gnuplot_exe = r

4 数据准备:

1、 使用excel宏

手工转换数据格式,可以通过excel文件FormatDataLibsvm.xls打开包含数据的文本文件,然后用宏将数据转换为libsvm格式。也可以用宏将libsvm格式的数据转换回来。

2、使用matlab

FormatSplitBat.m是一个批量将以Tab或者空格分隔的数据转换为libsvm格式,并且分成占全部数据比例为p的训练集和1-p的测试集,然后调用easy.py的例子。//摘自Libsvm-2_6.mht

修改程序中的三处路径与本机实际存储情况一致,并确保easy.py的第28行能够正确调用grid.py,之后将fileList.txt文件中写入要转换格式的文件列表。这些文件名都在当前路径(E:\svm\libsvm-2.83\data)之下。

运行E:\svm\libsvm-2.83\Tools1\FormatSplitBat.m,程序自动将fileList.txt中提到的文件名的数据内容按照概率p进行随机划分,本程序p为0.5,则有一半划分到train,一半划分到test。另外,本程序划分是循环10次,可以按照自己的要求进行调整。每次循环将每个原数据文档在文件夹E:\svm\libsvm-2.83\data中生成4个文件,分别是:file_i.train, file_i.test, file_iL.train, file_iL.test. 其中,L表示标示变量在左边,为libsvm能够使用的文件。 运行过程中,每一次循环程序都要调用easy.py,grid.py默认采用5倍交叉验证,对c采用的搜索范围和步长分别为[-10, 15]和 1,g的为[10, -15]和-1,可根据需要自行修改grid.py。运行完grid.py,在..\tools1\中每两个有L的文件(train, test)生成了7个文件,分别是train5个,test2个。其中train中生成3个scale (-, out, png),一个range,一个model。Test中一个scale,一个predict。

利用Libsvm进行SVM分类 SVM分类器通常具有较高的分类精度。我这里不想过多的去说SVM是怎么回事,只是提供一种使用SVM进行判别的方法。我使用的是开源的LibSVM实现SVM分类。Google上输入LIBSVM可以很容易的找到代码下载。我使用的是C#版(不过是2.6版),也可以使用C++的2.81版。下面我说说如何使用2.81版中带的编译好的程序完成聚类工作。该版本支持多类判别。

1、数据准备工作

首先输入数据进行处理,生成符合SVM处理规范的文本格式。关于格式的更多说明可以参考软件使用手册。另外此步可以不用归一化,因为LibSVM工具中提供了scale工具,可以自动完成数据的归一化处理工作。

2、程序配置工作

LibSVM 2.81版下载下来后并不能直接操作,还需要一些辅助工作,否则在默认判别的方式下工作判别精度可能非常低。关于此方面的更多内容可以参考《A Practical Guide to Support Vector Classification》一文,该PDF文档可以从LibSVM的网站上下载到。 在使用LibSVM之前首先要安装Pathon,Pathon 2.4可以从Pathon的网站上下载到。 紧接着就是需要装“pgnuplot.exe”,LibSVM使用它完成参数搜索时的绘图工作,该程序没有包含在LibSVM 2.81版的压缩包中,需要自己到网上搜索并下载。另外在LibSVM 2.81中grid.py代码里默认pgnuplot.exe的路径是“c:\tmp\gnuplot\bin\pgnuplot.exe”,你可以将“pgnuplot.exe”放到该路径下或修改grid.py代码指向你自己的路径。

所有这些准备工作完成后,就可以进行SVM分类工作了。

3、SVM分类

使用SVM分类可以执行“libsvm-2.81\tools”目录下的easy.py程序,该程序提供了一套默认的、精度较高的SVM分类算法。

在DOS窗口下输入:C:\Python\Python easy.py Train.txt Test.txt就可以利用Train.txt中的数据进行训练,然后对Test.txt中的数据进行判别。

LIBSVM入门

许多想用lib-svm解决分类或者回归的初学者可能像我一样一开始摸不着头绪。面对长篇的English,头都大了。有好心人把自己的经验总结了,我们就一起共享吧!

1. LIBSVM 软件包简介

LIBSVM 是台湾大学林智仁(Chih-Jen Lin)博士等开发设计的一个操作简单、易于使用、快速有效的通用SVM 软件包,可以解决分类问题(包括C- SVC、n - SVC )、回归问题(包括e - SVR、n - SVR )以及分布估计(one-class-SVM )等问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择,可以有效地解决多类问题、交叉验证选择参数、对不平衡样本加权、多类问题的概率估计等。LIBSVM 是一个开源的软件包,需要者都可以免费的从作者的个人主页http://www.csie.ntu.edu.tw/~cjlin/ 处获得。他不仅提供了LIBSVM的C++语言的算法源代码,还提供了Python、Java、R、MATLAB、Perl、Ruby、LabVIEW以及C#.net 等各种语言的接口,可以方便的在Windows 或UNIX 平台下使用,也便于科研工作者根据自己的需要进行改进(譬如设计使用符合自己特定问题需要的核函数等)。另外还提供了WINDOWS 平台下的可视化操作工具SVM-toy,并且在进行模型参数选择时可以绘制出交叉验证精度的等高线图。

2. LIBSVM 使用方法简介

LIBSVM 在给出源代码的同时还提供了Windows操作系统下的可执行文件,包括:进行支持向量机训练的svmtrain.exe;根据已获得的支持向量机模型对数据集进行预测的svmpredict.exe;以及对训练数据与测试数据进行简单缩操作的svmscale.exe。它们都可以直接在DOS 环境中使用。如果下载的包中只有C++的源代码,则也可以自己在VC等软件上编译生成可执行文件。

LIBSVM 使用的一般步骤是:

1) 按照LIBSVM软件包所要求的格式准备数据集;

2) 对数据进行简单的缩放操作;

3) 考虑选用RBF 核函数2 K(x,y) e x y = -g - ;

4) 采用交叉验证选择最佳参数C与g ;

5) 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;

6) 利用获取的模型进行测试与预测。

2.1 LIBSVM 使用的数据格式

LIBSVM使用的训练数据和测试数据文件格式如下:: : …其中 是训练数据集的目标值,对于分类,它是标识某类的整数(支持多个类);对于回归,是任意实数。是以1 开始的整数,表示特征的序号;为实数,也就是我们常说的特征值或自变量。当特征值为0 时,特征序号与特征值都可以同时省略,即index可以是不连续的自然数。与第一个特征序号、前一个特征值与后一个特征序号之间用空格隔开。测试数据文件中的label 只用于计算准确度或误差,如果它是未知的,只需用任意一个数填写这一栏,也可以空着不填。例如: +1 1:0.708 2:1 3:1 4:-0.320 5:-0.105 6:-1 8:1.21

2.2 svmscale 的用法

对数据集进行缩放的目的在于:

1)避免一些特征值范围过大而另一些特征值范围过小;

2)避免在训练时为了计算核函数而计算内积的时候引起数值计算的困难。因此,通常

将数据缩放到[ -1,1]或者是[0,1]之间。用法:svmscale [-l lower] [-u upper] [-y y_lower y_upper]

[-s save_filename] [-r restore_filename] filename(缺省值: lower = -1,upper = 1,没有对y进行缩放)其中,

-l:数据下限标记;lower:缩放后数据下限;

-u:数据上限标记;upper:缩放后数据上限;

-y:是否对目标值同时进行缩放;y_lower为下限值,y_upper为上限值;

-s save_filename:表示将缩放的规则保存为文件save_filename;

-r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放;

filename:待缩放的数据文件(要求满足前面所述的格式)。

缩放规则文件可以用文本浏览器打开,看到其格式为:

lower upper

lval1 uval1

lval2 uval2

其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表示特征序号;lval 为该特征对应转换后下限lower 的特征值;uval 为对应于转换后上限upper 的特征值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。

使用实例:

1) svmscale –s train3.range train3>train3.scale表示采用缺省值(即对属性值缩放到[ -1,1]的范围,对目标值不进行缩放)对数据集train3 进行缩放操作,其结果缩放规则文件保存为train3.range,缩放集的缩放结果保存为train3.scale。

2) svmscale –r train3.range test3>test3.scale表示载入缩放规则train3.range 后按照其上下限对应的特征值和上下限值线性的地对数据集test3 进行缩放,结果保存为test3.scale。

2.3 svmtrain 的用法

svmtrain实现对训练数据集的训练,获得SVM模型。

用法: svmtrain [options] training_set_file [model_file]其中,

options(操作参数):可用的选项即表示的涵义如下所示

-s svm类型:设置SVM 类型,默认值为0,可选类型有:

0 -- C- SVC

1 -- n – SVC

2 -- one-class-SVM

3 -- e – SVR

4 -- n – SVR

-t 核函数类型:设置核函数类型,默认值为2,可选类型有:

0 -- 线性核:u'*v

1 -- 多项式核: (g*u'*v+ coef 0)degree

2 -- RBF 核:e( u v 2) g –

3 -- sigmoid 核:tanh(g*u'*v+ coef 0)

-d degree:核函数中的degree设置,默认值为3; -g g :设置核函数中的g ,默认值为1/ k ; -r coef 0:设置核函数中的coef 0,默认值为0;

-c cost:设置C- SVC、e - SVR、n - SVR中从惩罚系数C,默认值为1;

-n n :设置n - SVC、one-class-SVM 与n - SVR 中参数n ,默认值0.5;

-p e :设置n - SVR的损失函数中的e ,默认值为0.1;

-m cachesize:设置cache内存大小,以MB为单位,默认值为40;

-e e :设置终止准则中的可容忍偏差,默认值为0.001;

-h shrinking:是否使用启发式,可选值为0 或1,默认值为1;

-b 概率估计:是否计算SVC或SVR的概率估计,可选值0 或1,默认0;

-wi weight:对各类样本的惩罚系数C加权,默认值为1;

-v n:n折交叉验证模式。其中-g选项中的k是指输入数据中的属性数。操作参数 -v 随机地将数据剖分为n 部分并计算交叉检验准确度和均方根误差。以上这些参数设置可以按照SVM 的类型和核函数所支持的参数进行任意组合,如果设置的参数在函数或SVM 类型中没有也不会产生影响,程序不会接受该参数;如果应有的参数设置不正确,参数将采用默认值。training_set_file是要进行训练的数据集;model_file是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

使用实例:

1)svmtrain train3.scale train3.model训练train3.scale,将模型保存于文件train3.model,并在dos窗口中输出如下结果:

optimization finished, #iter = 1756

nu = 0.464223

obj = -551.002342, rho = -0.337784

nSV = 604, nBSV = 557

Total nSV = 604其中,#iter为迭代次数,nu 与前面的操作参数-n n 相同,obj为SVM文件转换为的二次规划求解得到的最小值,rho 为判决函数的常数项b,nSV 为支持向量个数,nBSV为边界上的支持向量个数,Total nSV为支持向量总个数。训练后的模型保存为文件train3.model,用记事本等文本浏览器打开可以看到其内容如下(其后“%”后内容为笔者所加注释):

svm_type c_svc % 训练所采用的svm类型,此处为C- SVC

kernel_type rbf % 训练采用的核函数类型,此处为RBF核

gamma 0.047619 % 与操作参数设置中的g 含义相同

nr_class 2 % 分类时的类别数,此处为两分类问题

total_sv 604 % 总共的支持向量个数

rho -0.337784 % 决策函数中的常数项b

label 0 1 % 类别标签

nr_sv 314 290 % 各类别标签对应的支持向量个数

SV % 以下为支持向量

1 1:-0.963808 2:0.906788 ... 19:-0.197706 20:-0.928853 21:-1

1 1:-0.885128 2:0.768219 ... 19:-0.452573 20:-0.980591 21:-1... ... ...

1 1:-0.847359 2:0.485921 ... 19:-0.541457 20:-0.989077 21:-1

% 对于分类问题,上面的支持向量的各列含义与训练数据集相同;对于回归问题,略有不同,与训练数据中的标签label(即y值)所对应的位置在模型文件的支持向量中现在存放的是Lagrange 系数a 值,即为下面决策函数公式中的a 值:

* *

1

() ( )( ( ) ( )) ( ) ( , )

( , )

K

i i i i i i

i i sv

i i

i sv

fx a a x x b a a k x x b

ak x x b

= = - F F + = - +

= + g

2.4 svmpredict 的用法

svmpredict 是根据训练获得的模型,对数据集合进行预测。

用法:svmpredict [options] test_file model_file output_file

options(操作参数):

-b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件;test_file 是要进行预测的数据文件;output_file 是svmpredict 的输出文件,表示预测的结果值。svmpredict 没有其它的选项。


相关内容

  • 一种研究图匹配问题的核方法
  • 摘要:随着计算机技术与网络技术的高速发展,大量的数据充斥着我们周围的世界.面对这些复杂的海量数据,如何才能准确无误地对它们进行辨别与分析,这对于人们来说是一个非常具有挑战性的问题.在计算机领域,图是一种非常灵活的数据结构,对图等含有结构化信息数据的进行学习,是模式识别和机器学习领域的一种重要问题.该 ...

  • 基于SVM方法的中文实体关系抽取
  • 基于SVM方法的中文实体关系抽取① 徐芬王挺陈火旺 国防科学技术大学计算机学院,湖南长沙,410073 E-mail:纽煎蛰H盘曲!塑 摘要:实体关系抽取是很多自然语言处理任务的重要基础.本文针对中文中实体关系的特点,设计了-系列的特征.包括词.词性标注.实体和出现信息.包含关系和知网提供自瞩念信息 ...

  • GLCM纹理特征提取_SVM
  • 第26卷第7期2009年7月 计算机应用研究 ApplicationResearchofComputers V01.26No.7 Jul.2009 基于纹理特征提取的图像分类方法 研究及系统实现木 谢菲,陈雷霆,邱航 (电子科技大学计算机科学与工程学院,成都610054) 摘要:深入研究灰度共生矩阵 ...

  • 基于结构域组合信息预测蛋白质相互作用
  • 生物信息学 ChinaJournalofBioinformatics 技术与方法 基于结构域组合信息预测蛋白质相互作用 王兰,刘融,周艳红 (华中科技大学生物信息与分子成像湖北省重点实验室,武汉430074) 摘要:基于多个结构域联合作用导致蛋白质间相互作用的假设,提出了一种预测蛋白质间相互作用的新 ...

  • 基于颜色的皮肤检测综述
  • 第12卷 第3期2007年3月 中国图象图形学报JournalofImageandGraphics Vol.12,No.3 Mar.,2007 基于颜色的皮肤检测综述 徐战武 朱淼良 (浙江大学计算机学院,杭州 310027) 摘 要 在系统回顾和比较了基于颜色的皮肤检测的方法和技术(其中包括:颜色 ...

  • 法律方法与法学方法概念辨析
  • 法律方法与法学方法概念辨析 2007年11月26日23:35:34 来源:<学习与探索> 2007/02 赵玉增 摘 要 近年来,随着法学研究的转向,法律方法越来越受到人们的关注,但何谓法律方法?学界仍存在着不同的认识,本文在介绍方法概念意义的基础上,梳理了关于法律方法的种种分析.界定或 ...

  • 产品与使用方法九
  • 产品与使用方法九 1.货名:小产调理精华油 使用方法:(1)用热毛巾热敷腹部2分钟 (2)直接取本产品3ML顺时针按摩腹部.子宫.两侧卵巢位置直至发热吸收 (3)每天1-2次,每天沐浴后睡觉前使用效果最佳 2.货名:搽搽白瞬间无瑕精华素35g补水抗皱提拉紧致保湿美白精华素 使用方法:(1)把脸洗干净 ...

  • shi方法的证实和确认
  • 方法的证实和确认 一 认可方法概述 (一)方法分类 CNAS-CL01:2006规定实验室可以应用标准方法.非标准方法和实验室制定的方法进行检测和校准.一般可将方法分为标准方法和非标准方法两大类. 1 标准方法 指标准组织发布的方法,包括: (1) 国内标准,由国内标准化组织或机构发布的标准.包括我 ...

  • 茯苓综合加工工艺技术
  • 1.一种利用干茯苓分离和鉴定茯苓菌种方法 2.一种土茯苓提取物的制备方法及其制备的土茯苓提取物和用途 3.一种土茯苓提取物的制备方法及其制备的土茯苓提取物和用途 4.土茯苓皂甙.黄酮类提取物及其制备方法 5.茯苓袋料栽培方法 6.一种新型药物茯苓素的制造方法 7.茯苓多糖饮料及其制造工艺 8.一种茯 ...