美文网首页
libsvm简单应用

libsvm简单应用

作者: ixnsuperior | 来源:发表于2018-09-11 17:01 被阅读0次

前言

这段时间一直在折腾svm,svm的原理这里不多说,看andrew,或者网上一些大神的介绍就能很容易理解是怎么回事,对于应用层来说这层面的理解就足够了,如果还想要更深入的理解可以往下推导svm的过程。
由于网上的预训练回归模型效果不佳,于是下面将使用libsvm对tid2013数据集进行重新训练

准备工作

0、下载tid2013数据集(科学上网),地址http://www.ponomarenko.info/tid2013.html
1、下载libsvm,地址https://www.csie.ntu.edu.tw/~cjlin/libsvm/,在win直接下载即可
2、python安装,直接anaconda安装即可
3、下载gnuplot。地址https://sourceforge.net/projects/gnuplot/files/gnuplot/
win下载exe,linux下载tar.gz
4、下载gridregression.py文件。地址:https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/gridsvr/gridregression.py

数据准备

Label 1:value 2:value ….
Label:是类别的标识,如果是分类,就表示类别标签,如果是回归,就表示目标值。
Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开;
比如: -15 1:0.708 2:1056 3:-0.3333

需要注意的是,如果特征值为0,特征冒号前面的序号可以不连续。这样做可以减少内存的使用,并提高做矩阵内积时的运算速度。

数据统一

svmscale通常将数据缩放至[-1,1]或者[0,1]之间。

格式如下:
svm-scale.exe [-l lower] [-u upper] [-y y_lower y_upper] [-s save_name] [-r store_name] filename;

将修改好格式的数据文件,即train_set.txt和test_set.txt文件复制到libsvm中的windows文件夹下。

具体操作:
(1) 打开“命令提示符”,进入dos命令环境下,
(2) 输入命令:cd C:\libsvm\windows,进入libsvm中的windows下
(3) 输入命令:svm-scale.exe -l 0 -u 1 train_set.txt>train_scale.txt。
(4) 输入命令:svm-scale.exe -l 0 -u 1 test_set.txt>test_scale.txt。

用gridregression.py搜索最优参数c和g

1、修改gridregression.py的路径
2、命令行上操作:
python gridregression.py train_scale

python gridregression.py [-log2cbegin,end,step] [-log2g begin,end,step] [-log2p begin,end,step] [-v fold][-svmtrain pathname] [-gnuplot pathname] [odditional parameters for svm-train]dataset

使用最优参数训练

svmtrain主要实现对训练数据集的训练,并可以获得SVM回归模型。
使用方法:svm-train [options] training_set_file [model_file]
options为操作参数,可用的选项即表示的涵义如下:
-s 设置svm类型:

     0 – C-SVC

     1 – v-SVC

     2 – one-class-SVM

     3 – ε-SVR

     4 – n - SVR

-t 设置核函数类型,默认值为2

     0 -- 线性核:u'*v

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

     2 -- RBF 核:exp(-γ*||u-v||2)

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

-ddegree: 设置多项式核中degree的值,默认为3

-gγ: 设置核函数中γ的值,默认为1/k,k为特征(或者说是属性)数;

     -r coef 0:设置核函数中的coef 0,默认值为0;

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

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

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

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

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

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

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

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

     -v n:n折交叉验证模式;

     model_file:可选项,为要保存的结果文件,称为模型文件,以便在预测时使用。

具体使用:
(1) 打开命令提示符,进入libsvm\windows;
(2) 输入“svm-train.exe -s 3 -t 2 -c 1024.0 -g 4 .0 -p 0.0625 train_scale”,
-s是选择SVM的类型。对于回归来说,只能选3或者4
3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数。然后c,g,p是Step4中寻出的优化参数,代入即可。

运行结果运行结果:
iter 为迭代次数,
nu 为选择的核函数类型参数,
obj为SVM文件转换为的二次规划求解得到的最小值;
rho为判决函数的偏置项b,
nSV为标准支持向量个数(0<a[i]<c),
nBSV为边界上的支持向量个数(a[i]=c)。

在windows中会生成一个train_scale.model文件。可以用来进行下面的预测了。

用svm-predict预测

svm-predict 是根据训练获得的模型,对数据集合进行预测。
使用方法:svm-predict [options] test_file model_file output_file
参数说明:
options为操作参数,可用的选项即表示的涵义如下所示:
-b probability_estimates——是否需要进行概率估计预测,可选值为0 或者1,默认值为0。
model_file ——是由svm-train 产生的模型文件;
test_file—— 是要进行预测的数据文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一个,svm-predict会在output_file中给出正确的label结果,如果知道label的值,就会输出正确率;
output_file ——是svm-predict 的输出文件,表示预测的结果值。
操作:
输入svm-predict.exe test_scale train_scale.model out.txt

第一行是均差,第二行是相关系数。如果预测结果不好,可能是你的参数选择不当,还可能是你的特征值选择的有问题。

在windows下会生成一个out.txt文件,可以打开看一下和test-scale.txt文件的差别。

参考

出自:https://blog.csdn.net/Jibaoxian/article/details/52181588
常见问题:https://www.cnblogs.com/-ldzwzj-1991/p/5897199.html
libsvm for python:https://blog.csdn.net/shengerjianku/article/details/54237376

相关文章

网友评论

      本文标题:libsvm简单应用

      本文链接:https://www.haomeiwen.com/subject/qrsugftx.html