SVM模式识别与回归软件包(LibSVM)详解

更新时间:2023-09-12 06:53:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

SVM模式识别与回归软件包——LibSVM

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

SVM用于模式识别或回归时,SVM方法及其参数、核函数及其参数的选择,目前国际上还没有形成一个统一的模式,也就是说最优SVM算法参数选择还只能是凭借经验、实验对比、大范围的搜寻或者利用软件包提供的交互检验功能进行寻优。

目前,LIBSVM拥有Java、Matlab、C#、Ruby、Python、R、Perl、Common LISP、LabView等数十种语言版本。最常使用的是Matlab、Java和命令行的版本。

libsvm的初体验 就要做有关SVM的报告了!由于SVM里面的有关二次优化的不是那么容易计算得到的,最起码凭借我现在的理论知识和编程能力是不能达到!幸好,现在又不少的SVM工具,他可以帮助你得到支持向量(SV),甚至可以帮助你得到预测结果,归一化数据等等。其中SVM-light,LibSVM是比较常用的!SVM-light我们实验室有这方面的代码,而我自己就学习了下怎么使用LIBSVM(来自台湾大学林智仁)。实验步骤如下: 1:首先安装LIBSVM,这个不用多说,直接去他的官网上看:http://www.csie.ntu.edu.tw/~cjlin/libsvm/index.html

2:处理数据,把数据制作成LIBSVM的格式,其每行格式为: label index1:value1 index2:value2 ...

其中我用了复旦的分类语料库,当然我先做了分词,去停用词,归一化等处理了 3:使用svm-train.exe训练,得到****.model文件。里面有支持向量,gamma值等信息 4:使用svm-predict.exe做测试 这里有几个问题现在必须说明:

1:有关数据格式, index1:value1 index2:value2 ...这里面的index1,index2必须是有序的。我测试了好多次才发现了这个问题,因为我原来做实验的数据室不必有序的。 2:有关python语言,python有些版本不同导致一些语法也是有差异的,建议使用低版本的,如2.6,比如2.6和3.*版本的有关print的规定是有差别的。

这几个.exe文件里面很多参数可以调的,我暂时是想学习下所以都只用了默认值了。现在做好标记,以后要真做实验用他可以随时用上!

参数内容调试参见:http://blog.sina.com.cn/s/blog_4919c70a0100auun.html 1.首先从主页上下载libsvm、Python和gnuplot 三个软件。 http://www.csie.ntu.edu.tw/~cjlin/

2.准备好数据,首先要把数据转换成Libsvm软件包要求的数据格式为: label index1:value1 index2:value2 ...

其中对于分类来说label为类标识,指定数据的种类;对于回归来说label为目标值。(我主要要用到回归)

Index是从1开始的自然数,value是每一维的特征值。

该过程可以自己使用excel或者编写程序来完成,也可以使用网络上的FormatDataLibsvm.xls来完成。 FormatDataLibsvm.xls使用说明:

先将数据按照下列格式存放(注意label放最后面): value1 value2 ?? label value1 value2 ?? label ??

然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏执行行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。将该数据存放到文本文件中进行下一步的处理。 3.对数据进行归一化。

该过程要用到libsvm软件包中的svm-scale.exe Svm-scale用法:

用法: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为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 ) -s save_filename:表示将缩放的规则保存为文件save_filename; -r restore_filename:表示将缩放规则文件restore_filename载入后按此缩放; filename:待缩放的数据文件(要求满足前面所述的格式)。 缩放规则文件可以用文本浏览器打开,看到其格式为: y

lower upper min max x lower upper index1 min1 max1 index2 min2 max2

?? 其中的lower 与upper 与使用时所设置的lower 与upper 含义相同;index 表 示特征序号;min 转换前该特征的最小值;max 转换前该特征的最大值。数据集的缩放结果在此情况下通过DOS窗口输出,当然也可以通过DOS的文件重定向符号“>”将结果另存为指定的文件。该文件中的参数可用于最后面对目标值的反归一化。反归一化的公式为: (Value-lower)*(max-min)/(upper - lower)+lower 其中value为归一化后的值,其他参数与前面介绍的相同。

建议将训练数据集与测试数据集放在同一个文本文件中一起归一化,然后再将归一化结果分成训练集和测试集。 4.训练数据,生成模型。

用法: svmtrain [options] training_set_file [model_file]

其中, options(操作参数):可用的选项即表示的涵义如下所示 -s svm类型:设置SVM 类型,默认值为0,可选类型有(对于回归只能选3或4):

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)deg ree 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是训练结束后产生的模型文件,该参数如果不设置将采用默认的文件名,也可以设置成自己惯用的文件名。

本实验中的参数-s取3,-t取2(默认)还需确定的参数是-c,-g,-p

另, 实验中所需调整的重要参数是-c 和 –g,-c和-g的调整除了自己根据经验试之外,还可以使用gridregression.py对这两个参数进行优化。(需要补充)

该优化过程需要用到Python(2.5),Gnuplot(4.2),gridregression.py(该文件需要修改路径)。

然后在命令行下面运行:

python.exe gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -s 3 –t 2 -v 5 -svmtrain E:\\libsvm\\libsvm-2.86\\windows\\svm-train.exe -gnuplot

E:\\libsvm\\libsvm-2.86\\gnuplot\\bin\\pgnuplot.exe E:\\libsvm\\libsvm-2.86\\windows\\train.txt > gridregression_feature.parameter

以上三个路径根据实际安装情况进行修改。

-log2c是给出参数c的范围和步长 -log2g是给出参数g的范围和步长 -log2p是给出参数p的范围和步长上面三个参数可以用默认范围和步长 -s选择SVM类型,也是只能选3或者4 -t是选择核函数 -v 10 将训练数据分成10份做交叉验证。默认为5 为了方便将gridregression.py是存放在python.exe安装目录下

trian.txt为训练数据,参数存放在gridregression_feature.parameter中,可以自己命名。 搜索结束后可以在gridregression_feature.parameter中最后一行看到最优参数。

其中,最后一行的第一个参数即为-c,第二个为-g,第三个为-p,最后一个参数为均方误差。前三个参数可以直接用于模型的训练。

然后,根据搜索得到的参数,重新训练,得到模型。 5.测试

用法:svmpredict [options] test_file model_file output_file options(操作参数): -b probability_estimates:是否需要进行概率估计预测,可选值为0 或者1,默认值为0。 model_file 是由svmtrain 产生的模型文件; test_file 是要进行预测的数据文件;

output_file 是svmpredict 的输出文件,表示预测的结果值。

输出结果包括均方误差(Mean squared error)和相关系数(Squared correlation coefficient)。

本文来源:https://www.bwwdw.com/article/h2mh.html

Top