libsvm学习笔记

来源:互联网 发布:linux下iperf使用方法 编辑:程序博客网 时间:2024/05/27 09:45

下面这篇是在我硕士答辩后,于2007年暑期总结的笔记,如今做实验需要用到这些东西,于是又拿出来翻看,特贴出来作为自己或他人查看的资料:

Libsvm的使用:

虽然有些事情是不随我愿的,但是我还是要做,因为我并不讨厌其本身。

记住,生活还是要继续~~~~~

下载libsvmhttp://www.csie.ntu.edu.tw/~cjlin/libsvm/

阅读libsvm文件夹中的README,没有扩展名,用记事本打开即可。按照README中介绍的libsvm的数据格式准备训练数据文件,也可用自带的hesrt_scale文件。

 

一、svmscale

1、新建一个空的VC控制台项目名为svmangel,将svm-scale.c加入,编译运行,生成可执行文件svmangel.exe

2、将文件svmangel.exe及要缩放的文件heart放到e盘下,heart文件要符合libsvm格式。

3、在命令提示符窗口下输入命令

E:/>svmangel –s angel.rang heart>angelsvm.scale

就是将文件heart-s的要求缩放,同时产生缩放规则文件angel.rang,将缩放结果放到文件angelsvm.scale中。回车后即可在e盘下产生文件angel.rangangelsvm.scale

缩放时要对训练数据和预测数据同时进行缩放!!

缩放原理:

1、训练时:

对于每一维特征分量(即每一列),求出最大值fmax,最小值fmin。想要缩放的目标最大值,最小值为maxmin,根据公式

如果 value=fmax value= max

如果 value=fmin value= min

如果 fmin<value<fmax value=min+(max-min)*(value-fmin)/(fmax-fmin)

同理可对目标值y进行缩放。

2、预测时:

对于多个样本进行预测,先计算出每一维特征分量(即每一列)的最大值pmax,最小值pmin。根据训练时的缩放比例(max-min)/(fmax-fmin)进行缩放。目标最大值、最小值为amaxamin,则amax=pmax*(max-min)/(fmax-fmin)amax=pmax*(max-min)/(fmax-fmin)得出amaxamin根据公式对分量value进行缩放

如果 value=pmax value= amax

如果 value=pmin value= amin

如果 pmin<value<pmax value=amin+(amax-amin)*(value-pmin)/(pmax-pmin)

同理可对目标值y进行缩放。

 

二、svmtrain

用法与svmscale差不多,训练参数的设置详见README。同时生成model 文件,就是SVM模型,其中记录的是支持向量的数据。

 

二、svmpredict

1、新建一个空的VC控制台项目名为svmpre,svm-predict.csvm.cppsvm.h加入,编译运行,生成可执行文件svmpre.exe

2、将文件svmpre.exe及建立好的模型文件svm.model和要预测的文件pre放到e盘下,pre文件要符合libsvm格式。其中类别按照格式一列任意填写。

3、在命令提示符窗口下输入命令

E:/> svmpre pre svm.model out

e盘下产生输出文件out记录预测的类别。同时和原始文件pre任意输入的类别进行比较输出准确率及相关信息。可以利用这一点用训练数据对建好的模型进行测试调整参数。

 

 

SVM参数的选择:

1、 ftp://ftp.gnuplot.info/pub/gnuplot/上下载画图插件gnuplot,下载win32版本。

2、 http://www.python.org/上下载python,我下的是2.3.4。将python安装在C盘下。

3、 libsvm放置C盘下。

4、将libsvm/tools中的easy.pygrid.py拷到C:/Python23下。

5、修改文件目录(因为有人说相对目录不行,所以我采用绝对目录)

将文件easy.py中的目录改为如下:

if not is_win32:

svmscale_exe = "c:/libsvm/windows/svmscale.exe"

svmtrain_exe = "c:/libsvm/windows/svmtrain.exe"

svmpredict_exe = "c:/libsvm/windows/svmpredict.exe"

grid_py = "c:/Python23/grid.py"

gnuplot_exe = "c:/gnuplot/bin/pgnuplot.exe"

else:

# example for windows

svmscale_exe = r"c:/libsvm/windows/svmscale.exe"

svmtrain_exe = r"c:/libsvm/windows/svmtrain.exe"

svmpredict_exe = r"c:/libsvm/windows/svmpredict.exe"

gnuplot_exe = r"c:/gnuplot/bin/pgnuplot.exe"

grid_py = r"c:/Python23/grid.py"

将文件grid.py中的目录改为如下:

if not is_win32:

svmtrain_exe = "c:/libsvm/windows/svmtrain.exe"

gnuplot_exe = "c:/gnuplot/bin/pgnuplot.exe"

else:

# example for windows

svmtrain_exe = r"c:/libsvm/windows/svmtrain.exe"

gnuplot_exe = r"c:/gnuplot/bin/pgnuplot.exe"

1、 进入C:/Python23>

有很多问题是DOS使用不当或目录不对的问题

键入 python grid.py train.scale

其中train.scale是缩放后的数据文件,同时生成train.scale.out,这是对参数优化过程的纪录。

 

grid.py是利用交叉验证来进行参数选择的,默认的将训练集分为5份,步长为1进行搜索。

easy.py不仅对参数进行选择,同时利用选择好的参数进行训练,得出SVM模型。

libsvm/tools中有README文件,没有扩展名,用记事本打开就可以,这里面有详细

说明。

有些东东还没有试过,所以也不太清楚。比如:libsvm/python文件夹中的py文件,好像都是用python写的libsvm的接口,具体见此文件中的README。还有libsvm/tools中的subset.py文件,还不知道怎么用。

 

 

由于要投论文,做实验的需要,又开始使用libsvm了。好长时间没弄了,以致都全部忘光了,这时才发现记笔记的好处。对于我这种笨笨,看看以前的笔记确实省事不少。所以这次也要好好记录,以备翻查。

libsvm做回归实验,和分类大体上是一样的。

下载libsvm工具,http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/#14

这个网址包含了libsvm中的一些工具,很全面,在这里下载Grid Parameter Search for Regression中的gridregression.py.txt文件,其功能和grid.py是一样的用来进行参数选择。

下载绘图工具gnuplot http://www.gnuplot.info/

http://www.python.org/上下载python,我下的是2.3.4

同分类一样,将libsvmgnuplot文件夹拷到c盘下,将gridregression.py.txt修改名称为gridregression.py拷到python的安装目录python23下,同时将缩放好的用于回归的文件abalone.scale(下载地址http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/

datasets/regression.html#abalone )也拷到python23目录下。

将文件gridregression.py中可执行文件svmtraingnuplot的目录部分修改为如下:

# svmtrain and gnuplot executable

if not is_win32:

svmtrain_exe = "../svm-train"

gnuplot_exe = "/usr/bin/gnuplot"

else:

# example for windows

svmtrain_exe = r"c:/libsvm/windows/svm-train.exe"

gnuplot_exe = r"c:/gnuplot/bin/pgnuplot.exe"

进入Python23目录并命令下输入

python gridregression.py -s 3 abalone.scale

点击回车后要等一会儿才会出现第一条结果。由于gridregression.pygrid.py文件的基础上修改的所以命令都相似。但是gridregression.py文件的运行结果却没有图形显示,那是因为在文件中缺少了绘图语句redraw(db)redraw(db,1),如果加上就会报错。貌似据说pgnuplot软件在windows下有个bug。运行了好长时间也程序没有结束,上网一查好像是因为参数设置的问题。

下面再研究一下gridregression.py文件的参数设置。

python gridregression.py -svmtrain C:/libsvm/windows/svm-train.exe -gnuplot C:/gnuplot/bin/pgnuplot.exe -log2c -10,10,1 -log2g -10,10,1 -log2p -10,10,1 -v 10 -s 3 -t 2 C:/python23/abalone.scale>abalone.parameter

其中:

-svmtrain是给出svmtrain.exe所在路径,一定要是完整的全路径

-gnuplot是给出pgnuplot.exe所在路径。这里要用pgnuplot.exe这种命令行形式的,不要用wgnupl32.exe,这个是图形界面的。

-log2c是给出参数c的范围和步长

-log2g是给出参数g的范围和步长

-log2p是给出参数p的范围和步长

上面三个参数可以用默认范围和步长

-s选择SVM类型,也是只能选3或者4

-t是选择核函数

-v 10 将训练数据分成10份做交叉验证。默认为5

最后给出归一化后训练数据的全路径

搜索最优参数的过程写入文件gridregression_feature.parameter(注意别少了这个>符号啊)

这些参数大多数是执行svmtrain时的参数,参看libsvm文件夹下的README文件即可。在执行时输出的值除了c,gp外,mse表示回归误差(即均方差)。

在参数选择时,最好的cg一般都是在[2^(-10),2^10]之间。

 

最后推荐几个网址

一个不错的论坛:

http://agbs.kyb.tuebingen.mpg.de/km/bb/forumdisplay.php?fid=7

easy.py文件使用中的问题

http://agbs.kyb.tuebingen.mpg.de/km/bb/showthread.php?tid=466

另外还有一个python语言的简明教程,研究一下python语言也是很必要的,哈。

http://www.woodpecker.org.cn:9081/doc/abyteofpython_cn/chinese/

原创粉丝点击