码迷,mamicode.com
首页 > 其他好文 > 详细

用libsvm进行回归预测

时间:2015-06-20 23:25:50      阅读:312      评论:0      收藏:0      [点我收藏+]

标签:

最近因工作需要,学习了台湾大学林智仁(Lin Chih-Jen)教授等人开发的SVM算法开源算法包。

为了以后方便查阅,特把环境配置及参数设置等方面的信息记录下来。

 

SVM属于十大挖掘算法之一,主要用于分类和回归。本文主要介绍怎么使用LIBSVM的回归进行数值预测。

LIBSVM内置了多种编程语言的接口,本文选择Python。

 

 

1  LIBSVM官方网址

 

http://www.csie.ntu.edu.tw/~cjlin/libsvm/

可在这里下载LIBSVM的开源包,特别推荐初学者阅读文章A practical guide to SVM classification 和开源包自带的readme文件。可解决你的很多疑问。

 

2  安装环境

 

开源包版本 LIBSVM-3.20 

操作系统  Win7 64bit

Python版本:python2.7.9                        下载链接 https://www.python.org/downloads/

gnuplot: Gnuplot Version 5.0 (Jan 2015)   下载链接 http://sourceforge.net/projects/gnuplot/files/

 

 

3 回归预测

 

A practical guide to SVM classification推荐的方法流程是这样的。

技术分享

需要说明的是,回归预测需要gridsearch三个参数 gamma 、cost和epsilon;具体意义见下图红框。

技术分享

开源包自带的grid.py 文件是针对分类用的,回归需要用gridregression.py文件。该文件需要另外下载。另外附带一份介绍LIBSVM使用的材料。 下载链接 http://pan.baidu.com/s/1bnfNmv9

下载完成后,把gridregression.py文件中的svm-train和gnuplot的安装路径修改为自己主机的安装路径。一定要认真,笔者在这里浪费好多时间。

 

3.1 数据格式整理

技术分享

3.2 归一化

回归预测需要对训练集trainset进行归一化,并对测试集testset进行同样的归一化。

$  svm-scale -y -1 1 -s scale train.txt > trainScale.txt

$ svm-scale -r scale test.txt > testScale.txt

 

-y 参数表示要对label进行归一化。可在cmd输入svm-scale 回车, 查看各参数的意义。

 

3.3 gridsearch 寻找最优参数

 

python gridregression.py -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 trainScale.txt > trainrs.txt

 

-s 3 表示进行回归 -t 2 表示使用径向基核函数

 

后查看trainrs.txt

技术分享

 

红框中的三个数字对应最好的cost 、gamma和epsilon;

 

3.4 训练trainScale

svm-train -s 3 -t 2 -c 64 -g 0.03125 -p 0.125 trainScale.txt

会生成trainScale.txt.model 文件

 

3.5 预测testScale

svm-predict testScale trainScale.txt.model  predict-result.txt

查看predict-result.txt内容

技术分享

 

3.6 对结果反归一化

 

比如x属于原来的测试集, 范围是[min, max], 而scale后的范围是[m, n]

那么x对应归一化的值y是什么?y = (x-min)/(max-min) *(n-m) + m

 

那如果已知y, x又是多少呢?

x = (y-m)/(n-m) * (max-min) + min

可按照x = (y-m)/(n-m) * (max-min) + min 对predict-result.txt内容进行反归一化,从而得到最终的预测值。

 

4 总结

说明:上述流程中sacle 过程不一定要使用,具体问题具体分析。还是要多试验,多看效果。笔者在上述流程中犯了好多错误,希望读者尽量避免。

其实最难的部分在于特征信号的选取,即哪些因子作为feature去拟合label?

 

(完)

 

用libsvm进行回归预测

标签:

原文地址:http://www.cnblogs.com/hdu-2010/p/4591147.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!