转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦

说一说我对用LIBSVM进行回归预测的粗浅认识(整理完成于2012年5.11)

作者 :  师梦

      吾本工程小硕一枚,前用matlab建模,已然完成。某日,正沾沾自喜之际,吾师曰:“汝已为之,甚好。然此法仅用于后期处理,若在线,数控之机床不识别之,汝改之,标准C即可”。吾大惊,标准C?难也,难也。然师命不可违。吾即度之,然度娘不甚给力,正愁苦之际,学长曰:“可尝试libsvm。”吾大喜,遂改之。吾本非程序员,故重重困难,可想而知。怎奈三周之调试,才得体验“程序虐我千百遍,我待程序如初恋”之精髓。%>_<%吾只三周,已然疲倦如此,况程序员之一生乎?

      然吾终完成,做此文以记之,非炫耀之本,只为众人之便。此文仅吾一家之言,疏漏之处,在所难免,若能引得众人围观,共同探讨之,改之,则吾之荣幸。

嘿嘿,小小的“序”了一下哦~~O(∩_∩)O~~,由于只是用libsvm作为一种工具来服务自己的课题,所以不对libsvm本身做深入研究,鉴于自己开始做的时候遇到了很多的困难,也查了很多的资料,所以这篇文字就写的尽量详细一些,给大家以方便。好啦,一起来开始libsvm的奇妙之旅吧。(P.S:本人win7系统,本文所述步骤均为亲测正确。)

本文,将按照以下的顺序来说明libsvm的用法:

1.Libsvm之初相识

1)libsvm简介(略)

2)Libsvm、python、gnuplot下载

3)环境变量的设置以及如何在DOS下寻找路径

2.Libsvm之再体验(此阶段,你会真正体验到“若只如初见”的感觉。%>_<%)

1)将原始数据改为libsvm所规定的数据格式。2种方法:使用excel自带功能或者自己编程实现。

2)用svm-scale.exe对数据集进行归一化处理。

3)用gridregression.py搜索最优参数,主要是c和g。

4)用svm-train训练模型。

5)用svm-predict预测。

一、Libsvm之初相识

1、libsvm简介(略)

Libsvm主要是用来模式识别与回归,这部分可以自己上网去看,在此略。

2、Libsvm、python、gnuplot下载

会不会奇怪为什么还要下载python和gnuplot这两个软件很重要,是后面搜索最优参数要用到的,也是很关键的一步。

我用的版本:libsvm-3.12,Python2.4,对于gnuplot,我用的是gp400win32.zip,下面是下载地址:

Libsvm-3.12:http://www.csie.ntu.edu.tw/~cjlin/(libsvm创始人台湾大学林智仁副教授个人主页)
Python2.4:http://download.csdn.net/detail/linghu9990/3512232(这个是不要积分的)

gp400win32.zip:http://ishare.iask.sina.com.cn/f/14895214.html?from=like

Gridregression.py:http://download.csdn.net/detail/killa11/2225384

将其复制到libsvm下的python2.4文件夹下。

将Libsvm-3.12和gp400win32.zip解压,这两个都不用安装。Python2.4要安装。下面是它们的路径(个人习惯,可以重命名文件或者对文件夹进行整理,以便后续运行):

Libsvm:G:\shukong下面(这里我将libsvm-3.12重命名为libsvm)

Python:G:\shukong\libsvm下面(python2.4重命名为python)记得将python下面的python.exe复制到libsvm下的tools中

gp400win32.zip:G:\shukong\libsvm下面(只保留了gnuplot这个文件夹)

3、环境变量的设置以及如何在DOS下寻找路径

1)环境变量的设置(不明白为什么要设置环境变量@[email protected],但为了避免后续出了问题不知怎么解决,还是设置了)

添加环境变量到path:右击“计算机(我的电脑)”->属性->高级系统设置->高级->环境变量->系统变量列表里双击path在变量值最后添加“;G:\shukong\libsvm\windows”,这就对Libsvm环境变量设置好了,然后设置python环境变量,也和上面一样,在变量值最后添加“;G:\shukong\libsvm\tools”。如图1:

2)如何在DOS下寻找路径(这部分会的可以不用看,像我这种菜鸟,还是百度才知道的%>_<%)

点击“开始”按钮,进入“命令提示符”,默认路径是“C:\User\acer>”。这里有两种情况:一是像我是放在G盘的,所以要将路径改为G盘,方法是:直接在命令提示符里输入“G:”然后回车,就进入G盘的根目录了。如图2:

还有就是虽然在C盘,但是不在“C:\User\acer>”,这时就先要进入C盘的根目录,方法如下:在命令提示符下输入“cd\”然后回车即可。如图3:

以上两种情况,进入根目录以后,我们就可以进入libsvm的路径,在这里,我们先进入“G:\shukong\libsvm>”(只是我自己在G盘,你要根据自己实际路径进入),方法如下:

在命令提示符中输入“cd shukong”,然后回车,再输入“cd libsvm”然后回车即可。如图4:

二、Libsvm之再体验

怎么样,初相识还不是很难的吧,下面个人感觉就有点麻烦了。大家耐心哈。

1、将原始数据改为libsvm所规定的数据格式。

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

[label] [index1]:[value1] [index2]:[value2] …

目标值 第一维特征编号:第一维特征值 第二维特征编号:第二维特征值…

例如:2.3 1:5.6 2:3.2

表示训练用的特征有两维,第一维是5.6,第二维是3.2,目标值是2.3

原始数据改为libsvm所规定的数据格式有2种方法:

1)使用网络上FormatDataLibsvm.xls来完成(我的excel版本不支持宏命令,所以此种方法没有用)。

FormatDataLibsvm.xls使用说明:

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

value1 value2 … label

value1 value2 … label

value1 value2 … label

b. 然后将以上数据粘贴到FormatDataLibsvm.xls中的最左上角单元格,接着工具->宏->执行FormatDataToLibsvm宏。就可以得到libsvm要求的数据格式。

2)采用编程实现

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

value1 value2 … label

value1 value2 … label

value1 value2 … label

b.本人使用的是简单的matlab编程来实现(以下是本人部分数据)

原数据(data1.txt)如图5:

转换之后的数据(svmdata1.txt)如图6:

用matlab进行数据转换之后,把svmdata1.txt复制到libsvm文件夹下的tools文件夹即可。

3)数据格式转换好了,那么在libsvm的tools文件夹下还有一个工具,可以用来检查你的数据格式是否正确,那就是checkdata.py。方法是:

打开"命令提示符",进入到libsvm中的tools文件夹下,(怎么样进入我已在上面介绍过),然后输入命令“checkdata.py svmdata1.txt”回车,若显示“No error”,则表示数据格式正确。我的数据结果如图7。(注:如果用这个matlab程序转换的话,一定是no error的。^_^)

这一步一般不会有太大的问题。

2、用svm-scale.exe对数据集进行归一化处理。

因为原始数据可能范围过大或过小, svmscale可以先将数据重新scale (縮放) 到适当范围使训练与预测速度更快。通常将数据缩放至[-1,1]或者[0,1]之间。

使用方法:svm-scale.exe [-l lower] [-u upper] [-y y_lower y_upper] [-s save_name] [-r store_name] filename;其中

-l:数据下限标记;

lower:缩放后数据下限 缺省值: lower = -1;

-u:数据上限标记;

upper:缺省值: upper =  1,代表着没有对y进行缩放;

-y:是否对目标值同时进行缩放;

y_lower:为下限值;

y_upper:为上限值;(回归需要对目标进行缩放,因此该参数可以设定为 –y -1 1 );

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

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

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

在进行这一步的时候,我们要用到的数据是上一步已经改好格式的数据,即svmdata1.txt,所以要把svmdata1.txt复制到libsvm中的windows文件夹下。

具体操作,打开“命令提示符”,进入libsvm中的windows下,输入命令“svm-scale.exe -l 0 -u 1 svmdata1.txt>data.txt”。如图8。

这里,我们把svmdata1.txt里面的数据缩放为[0,1]之间,并另存为data.txt,这时,在windows下面会多出一个data.txt,里面就是你要的数据。我没有保存规则,就不用-s。这里也有几个问题:

a.请看下图9:

和上图对比,感觉输入的命令是一样的,但是却提示错误,打开data.txt却并没有数据,却是英文的svm-scale的用法,刚开始,一直这样,我痛苦死了,后来仔细一看才明白,原来那个是英文的‘l’而我写的是数字‘1’,这样一改就好了。图10:

归一化后的数据如图11:

可以看到前几行索引没有‘3’,这是因为索引为‘3’的value是0,所以为了节省内存,就不显示了,这并不是错误,不要担心。

3、用gridregression.py搜索最优参数,主要是c和g。

数据都准备好了之后,就可以用svm-train来训练模型了,然而,了解svm-train的都知道,训练的时候又很多的参数,而这些参数又不能随便选,会有最优的,但是人工去选的话,会很麻烦,我看好多人都说用libsvm自带的grid.py进行参数的搜索,但是我查了,也实践了,好像grid.py不支持回归的,于是我用gridregression.py来搜索最优参数。

有关gridregression.py的下载,在第一步已经说了,不在赘述。先打开gridregression.py,注意用Eidt with IDLE打开,然后里面有些参数要改一下。

改前如图12:

改后如图13:

其实要改的就这些,主要是把svmtain_exe和gnuplot_exe的路径改为自己的路径就行。

然后就可以进行寻优了。要先把路径调好,注意调到G:\shukong\libsvm\python2.4下。

然后输入下面的语句:python G:\shukong\libsvm\python2.4\gridregression.py -svmtain G:\shukong\libsvm\windows\svm-train.exe -gnuplot G:\shukong\libsvm\gnuplot\bin\pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 G:\shukong\libsvm\tools\data.txt如图14:

这个比较多字母,容易输错,我是在worrd文档里键入,然后复制到命令提示符中,回车,就开始跑了,在命令提示符窗口中看到运行过程。过程可能会比较长,我的数据少,很快就有结果了。

另:我在网上看的,如果输入python G:\shukong\libsvm\python2.4\gridregression.py -svmtain G:\shukong\libsvm\windows\svm-train.exe -gnuplot G:\shukong\libsvm\gnuplot\bin\pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 G:\shukong\libsvm\tools\data.txt>gridregression_data.parameter比上面的输入多了最后的“>gridregression_data.parameter”,表示将结果保存在gridregression_data.parameter中,会在python文件夹中多出一个gridregression_data.parameter文件,但是在命令提示符中不会看到运行过程,这种方法我也尝试了,但是时间会非常长,大概花了4个小时,而且网上用这个方法的人也是运行了大概24小时,还是没结束,所以,还是不要保存为好,用上面的输入就行。寻优结果如图15:

可以看到寻优的过程,只需关注最后一行即可。最后一行分别为c,g,p,mse,一般来说mse这个参数不是很重要,是越小越好吧(至于为什么是越小越好,我也不清楚哇~~)。

4、用svm-train训练模型。

svmtrain我们在前面已经接触过,他主要实现对训练数据集的训练,并可以获得SVM模型。

用法: svmtrain [options] training_set_file [model_file]

其中,options为操作参数,至于参数的可的选项及表示的涵义,大家可以在livbsvm中自带的readme里面看得到,很详细,不再赘述。这里只介绍我所选择的参数及其值。

打开命令提示符,进入G:\shukong\libsvm\windows然后输入“svm-train -s 3 -t 2 -c 1024.0 -g 4 .0 -p 0.0625 data.txt”,这里-s是选择SVM的类型。对于回归来说,只能选3或者4,3表示epsilon-support vector regression, 4表示nu-support vector regression。-t是选择核函数,通常选用RBF核函数。然后c,g,p我们已经寻出,直接运行即可。如图16:

#iter 为迭代次数, nu 与前面的操作参数 -n n 相同, obj 为 SVM 文件

转换为的二次规划求解得到的最小值, rho 为判决函数的常数项 b , nSV 为支持

向量个数, nBSV 为边界上的支持向量个数, Total nSV 为支持向量总个数。

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

5、用svm-predict预测。

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

用法:svmpredict [options] test_file model_file output_file

其中,options为操作参数,可用的选项即表示的涵义如下所示:

-b probability_estimates——是否需要进行概率估计预测,可选值为0 或者1,默认值为0。

model_file ——是由svmtrain 产生的模型文件;

test_file—— 是要进行预测的数据文件,格式也要符合libsvm格式,即使不知道label的值,也要任意填一个,svmpredict会在output_file中给出正确的label结果,如果知道label的值,就会输出正确率;

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

还是在命令提示符windows下输入“svm-predict  test.txt  data.txt.model out.txt”,如图17:

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

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

至此,用libsvm进行回归预测的大概步骤就是这个样子,只是个人总结,不妥之处,还希望大家讨论指出。

时间: 2024-10-12 23:23:00

转自网络用LIBSVM进行回归预测的粗浅认识————————作者师梦的相关文章

用libsvm进行回归预测

最近因工作需要,学习了台湾大学林智仁(Lin Chih-Jen)教授等人开发的SVM算法开源算法包. 为了以后方便查阅,特把环境配置及参数设置等方面的信息记录下来. SVM属于十大挖掘算法之一,主要用于分类和回归.本文主要介绍怎么使用LIBSVM的回归进行数值预测. LIBSVM内置了多种编程语言的接口,本文选择Python. 1  LIBSVM官方网址 http://www.csie.ntu.edu.tw/~cjlin/libsvm/ 可在这里下载LIBSVM的开源包,特别推荐初学者阅读文章A

[转载]浏览器的工作原理:新式网络浏览器幕后揭秘

原文地址 序言 这是一篇全面介绍 WebKit 和 Gecko 内部操作的入门文章,是以色列开发人员塔利·加希尔大量研究的成果.在过去的几年中,她查阅了所有公开发布的关于浏览器内部机制的数据(请参见资源),并花了很多时间来研读网络浏览器的源代码.她写道: 在 IE 占据 90% 市场份额的年代,我们除了把浏览器当成一个"黑箱",什么也做不了.但是现在,开放源代码的浏览器拥有了过半的市场份额,因此,是时候来揭开神秘的面纱,一探网络浏览器的内幕了.呃,里面只有数以百万行计的 C++ 代码.

波尔远程控制软件与网络人远程控制软件大比拼

波尔远程控制软件与网络人远程控制软件大比拼 日期:2015-08-19     作者:mgs   波尔远程控制软件与网络人远程控制软件同为远程控制软件,它们各自有什么优点呢?到底是波尔远程控制软件比较好还是网络人远程控制软件比较好呢?今天小编就带大家来看看波尔远程控制软件与网络人远程控制软件的差距究竟在哪里.首先,网络人远程控制软件获得国家的安全认证,它有三个不同的软件版本适用于不同的场合分别为办公版(免费的).企业版.旗舰版.掌控版,另外还有网络人的远程开机卡.网络人远程关机卡(还有手机版的)

2 C++ ACE 面向对象跨平台网络库学习

2   C++ ACE  面向对象跨平台网络库学习  ACE I/O相关对象 阻塞式 TCP连接Linux Kernel网站服务器的443端口 非阻塞模式 TCP连接百度服务器 设置 TCP连接超时: ACE 客户端 TCP模式.请求HTTP 一个简单的 TCP HTTP server HTTP server 代码 创建网页文件 浏览器测试访问结果 ACE UDP通信单播测试: UDP 单播 服务器端: UDP 单播 客户端: ACE UDP 多播实验: UDP 多播 发送端程序: UDP 多播

[转载] Google数据中心网络技术漫谈

原文: http://www.sdnlab.com/12700.html?from=timeline&isappinstalled=0#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2751b6d1&sukey=fc78a68049a14bb247c537e229e9301ea4dca80236df4f4e775535c08f0a24420a9ac4d726c99dad63a9f6e4c88271ed 真羡慕 google 强大的网络基础设施啊,

facebook网络团队是如何炼成的?

编者按:诚如2015全球未来网络暨SDN技术大会上阿里巴巴首席架构师庞俊英女士(OpenFlow与VxLAN在云网络的应用)所说的,想要网络SDN化.具备更高的可维护性.更具弹性以及更加可视化,目前遇到的困难之一就是关于people的,目前的网络界的技术人员要么太软要么太硬,我们需要全栈架构师.那么可以来看看facebook是如何打造自己的网络团队,他们是如何管理和运维如此复杂和庞大的网络的. 一直以来Facebook内部都有一项针对员工职业发展规划的项目叫着"hack-a-month"

三种网络数据传输方式比较(byte stream,protobuf,json)

三种网络数据传输方式比较(byte stream,protobuf,json) 2014-08-27 10:39:04 分类: LINUX 原文地址:三种网络数据传输方式比较(byte stream,protobuf,json) 作者:yuyunliuhen 针对于tinynet进行了三种数据传输方式的测试,包括最初的byte stream,protobuf,以及比较流行json方式.跟之前的几次测试一样,模型为echo模型,都是以epoll为例,每个连接每秒发送10个包,每个数据包约100by

网络文学的“圈地”与“护城”

在中国互联网发展历程超过20年历史的漫长过程中,网络文学一直是中国互联网发展过程中的参与者和见证者,尤其是网络文学推动的数字阅读趋势,更是使得kindle等电子阅读器成为逐渐取代纸质书籍趋势的推动力.今天,人们用智能手机.kindle等移动终端阅读数字产品,这种变化的推动力正来源于当初网络文学的促进作用. 网络文学在这20年的发展历程中为中国互联网带来了辉煌,但它也在这20年的发展历程中经历了新生.壮大.倒闭.继续茁壮成长等阶段,其中一些网络文学平台虽然倒在了过去的征途上,但余留下来并发展到今天

搜索引擎综述(来自网络,图片连接…

互联网在近10年的得到飞速发展,互联网正在逐渐深入人们的生活,改变人们的生活.互联网经济也经历了风风雨雨,从缓慢起步到急速膨胀,从泡沫破灭到逐步回暖:从"网络广告"到"拇指经济",从"网络游戏"到"搜索力经济".目前,搜索引擎成为最受人们关注的焦点之一,也成为亿万富翁的制造摇篮.越来越多的公司都希望在搜索引擎这座金矿中挖到筐金子,其中许多人会选择拥有自己的搜索引擎.国内著名搜索引擎公司百度(http://www.baidu.c