一、 如何用grip.py求最佳参数 c、γ
1. 需要安装python及gnuplot两个软件。
2. 修改libsvm-3.2所在目录下的tools中的grip.py,不可以双击点开grip.py,需要点击右键,用“Edit with IDLE”打开,修改第25行中的gnuplot的路径,将其默认路径(self.gnuplot_pathname =r"c:\tmp\gnuplot\bin\pgnuplot.exe)改为self.gnuplot_pathname = r'c:\Program Files(x86)\gnuplot\bin\gnuplot.exe'(值得注意的是,网上的教程都是叫路径改为r'c:\ProgramFiles (x86)\gnuplot\bin\pgnuplot.exe',但是我翻阅了gnuplot的安装目录下的README-Windows文档,看到了
所以就需要把那个p去掉,才可以调用gnuplot软件。
3. 需要将python安装目录(笔者的为:C:\Python27)下的python.exe复制到F:\ProgramFiles\MATLAB\R2016a\toolbox\libsvm-3.21\tools下。
4. 打开cmd,进入F:\Program Files\MATLAB\R2016a\toolbox\libsvm-3.21\tools目录下,键入python grid.py heart_scale(heart_scale为libsvm3.21提供的二进制文件),然后就可以看到cmd上出现
还有gnuplot在不断绘制(至于图代表什么,笔者真的不太知道,但我从网上看到的资料它是在这样说的:“神奇的是尋找最佳參數的過程就像是在爬山,若爬得越高就代表準確度越好!於是這張圖被稱作等高線圖”,这段话在https://cg2010studio.com/2012/10/21/libsvm-svm-%E5%AF%A6%E9%A9%97%E6%9C%80%E4%BD%B3%E5%8C%96%E5%8F%83%E6%95%B8/)
还有就是我在知乎上看到的对这堆曲线的理解
(https://www.zhihu.com/question/26774446)
Cmd窗口不再滚动,会出现以下数据
第一个数据是最优参数c,第二个参数是γ,最后那个是运用最佳参数(而其他为默认参数)的正确率。
5. 如何用运用自己的数据求出最佳参数
a) 我们通过小波分析(也可以通过其他特征提取的方法得到的数据)得到的数据,格式是.mat格式(即matlab特有的保存数据的格式),但是我们用grip.py方法求最佳参数的需要是二进制文件,在此时我们需要将.mat格式文件转化为二进制文件。
b) 如何转化呢?
希望读者们不要像笔者那样没有看libsvm3.21中的“README”文件,那个帮助太大了。那里面有一句话“其中formatdatalibsvm.xls文件可以方便的将excel数据转化为符合LIBSVM要求的数据格式。”(再次证明README文件的重要性),所以我们就可以运用formatdatalibsvm.xls文件将.mat文件转化为二进制文件。
c) 如何运用formatdatalibsvm.xls文件?
1) 首先将formatdatalibsvm.xls下载(链接:http://pan.baidu.com/s/1kVybtER密码:t2ko)不要感谢我,我的别名叫LEIFENG
2) 包括两两种数据的转换,一种是data.xls格式->data.svm格式的转换;另一种的带有逗号、空格、顿号、分号等文本数据的转换,先归为data.txt格式->data.svm格式的转换。
3) .xls格式->svm格式的转换:首先运行formatdatalibsvm.xls,(注意这时会有一个关于“宏已禁宏”的安全警示,点击“选项”,选择“启用此内容”,确定即可);然后打开data.xls,(注:网上很多的介绍都是直接将数据粘贴到sheet1的topleft单元),但值得注意的是数据的排列方式
决策属性是label的值(注意啦),所以我们将数据粘贴到sheet1的topleft单元后需要将第一列的数据放到最后一列。
4) 然后就打开宏,点击下图所选的选项,最后点击执行
最后保存文件,保存选择Unicode文本,这样我们就得到了.txt二进制文件,最后我们就可以运用grip.py得到最优参数了。
d) 在得到了.txt文件后,我们先打开cmd,进入F:\ProgramFiles\MATLAB\R2016a\toolbox\libsvm-3.21\tools,输入pythoncheckdata.py test.txt(checkdata.py是一个检测数据是否符合格式的函数,而test是笔者格式转换后得到的文件,记得要加上后缀.txt,这个一定要加上)
数据没错的图
数据不符合格式的图(handdata是.mat文件)
e) 得到格式正确的数据后,在cmd上输入,就会出现上文4.中所 出现的情况,我们就可以得到最优参数了。
6. 值得注意的问题:
a) Libvsm文本文件(链接:http://pan.baidu.com/s/1pLeqysN 密码:o0os)中所提到的安装后
这段话是在 ubuntu统下实现的,无法在windows系统下实现。还有libsvmguide(链接:http://pan.baidu.com/s/1hs9CKFq密码:oxfr)中所讲到的都是基于ubuntu系统下的。
b) 这篇文章是将网上教程的许多漏洞进行修补而写出来的,是笔者经过一天的配置后呕心沥血之作,如有不足,还望见谅。