下面这篇是在我硕士答辩后,于2007年暑期总结的笔记,如今做实验需要用到这些东西,于是又拿出来翻看,特贴出来作为自己或他人查看的资料:
Libsvm的使用:
虽然有些事情是不随我愿的,但是我还是要做,因为我并不讨厌其本身。
记住,生活还是要继续~~~~~
下载libsvm,http://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.rang和angelsvm.scale
缩放时要对训练数据和预测数据同时进行缩放!!
缩放原理:
1、训练时:
对于每一维特征分量(即每一列),求出最大值fmax,最小值fmin。想要缩放的目标最大值,最小值为max,min,根据公式
如果 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)进行缩放。目标最大值、最小值为amax,amin,则amax=pmax*(max-min)/(fmax-fmin),amax=pmax*(max-min)/(fmax-fmin)得出amax和amin根据公式对分量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.c,svm.cpp和svm.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.py和grid.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
同分类一样,将libsvm和gnuplot文件夹拷到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中可执行文件svmtrain和gnuplot的目录部分修改为如下:
# 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.py在grid.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,g和p外,mse表示回归误差(即均方差)。
在参数选择时,最好的c和g一般都是在[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/