libsvm用于回归预测的使用步骤总结

Step1:下载相关软件工具包和程序。

1、下载livsvm。连接http://www.csie.ntu.edu.tw/~cjlin/libsvm/ ,我使用的是libsvm-3.12.zip版本,下载后直接解压缩到C;\libsvm-3.12下。

2、下载python27。安装目录C:\Python27,同时将路径添加到系统环境变量中。添加方法:右键点击我的电脑->属性->高级系统设置->环境变量,在系统变量里找到path,点击编辑,在弹出框最后加上C:\Python27(用分号与之前项目分隔开),重启电脑即可。(摘自http://www.cnblogs.com/yangyangcv/archive/2012/05/04/2483000.html)。

3、下载gnuplot。链接https://sourceforge.net/projects/gnuplot/files/gnuplot/5.0.0/,我的系统是64位,所以下载的是gp500-win64-mingw.zipgp500-win64-mingw.exe。存储路径C:\gnuplot

4、下载gridregression.py文件。链接http://download.csdn.net/download/killa11/2225384。下载后直接放在C:\libsvm\tools目录下。

Step2:将原始数据格式转换成libsvm中所要求的数据格式

Label 1:value 2:value ….

Label:是类别的标识,如果是分类,就表示类别标签,如果是回归,就表示目标值。

Value:就是要训练的数据,从分类的角度来说就是特征值,数据之间用空格隔开;

比如: -15 1:0.708 2:1056 3:-0.3333

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

数据格式的转换可以自己编写matlab程序,或者使用相应的格式转换工具。链接http://www.cnblogs.com/yangyangcv/archive/2012/04/16/2452556.html

Step3:用svm-scale.exe对数据集进行归一化处理

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.txttest_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

C:\libsvm\windows文件夹下生成归一化后的两个文件train_set.txttest_set.txt

Step4:用gridregression.py搜索最优参数,主要是c和g

(1) 先用右键—>Eidt with IDLE打开gridregression.py,修改路径。

修改后的路径如图所示:


(2) 参数优化

【在命令提示符下输入以下命令】

C:\Python27\python gridregression.py -log2c-5,5,1 -log2g -5,5,1 -log2p -5,5,1 -v 10 -svmtrainC:\libsvm\windows\svm-train.exe -gnuplot C:\gnuplot\bin\gnuplot.exe train_scale【命令中的参数意义】

C:\Python27\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


在最后一行可以得到参数优化结果,分别为c,g,p,mse

Step5:用svm-train.exe进行训练

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) 打开命令提示符,进入C:\libsvm\windows;

(2) 输入“svm-train.exe -s 3 -t 2 -c 1024.0 -g 4 .0 -p 0.0625 train_scale.txt”,

-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

nBSV为边界上的支持向量个数(a[i]=c)。

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

Step6:用svm-predict.exe进行预测

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文件的差别。

Step7:绘图

 绘图主要在matlab中编程实现

 

 

 

你可能感兴趣的:(Machine,Learning)