在libsvm 工具包中,作者很友好的将参数优选自动化,再也不需要手动调参了,下面讲解一下大概的使用以及参数选择原则。
使用grid.py需要安装python 和gnuplot两个软件,具体安装方法详见:
http://blog.csdn.net/u014772862/article/details/51828967
在这篇文章中给出了这两个软件的下载地址。
安装成功之后修改环境变量,将python 安装目录添加到计算机的环境变量path下。
在训练svm时, Chih-Jen Lin 提供了一个自动化参数选优的方式—grid search(由C和r组成),对每一个参数,使用libsvm得到一个cross-validation(CV)准确率,最优参数就是准确率最高时采用的参数。该方法常用在RBF核函数参数优选中。
以下内容摘自《MATLAB 神经网络30个案例分析》第13章:
“关于SVM参数的优化选取,国际上并没有公认统一的最好的方法,现在目前常用的方法就是让c和g在一定的范围内取值,对于取定的c和g对于把训练集作为原始数据集利用K-CV方法得到在此组c和g下训练集验证分类准确率,最终取使得训练集验证分类准确率最高的那组c和g做为最佳的参数,但有一个问题就是可能会有多组的c和g对应于最高的验证分类准确率,这种情况怎么处理?这里采用的手段是选取能够达到最高验证分类准确率中参数c最小的那组c和g做为最佳的参数,如果对应最小的c有多组g,就选取搜索到的第一组c和g做为最佳的参数。这样做的理由是:过高的c会导致过学习状态发生,即训练集分类准确率很高而测试集分类准确率很低(分类器的泛化能力降低),所以在能够达到最高验证分类准确率中的所有的成对的c和g中认为较小的惩罚参数c是更佳的选择对象。”
使用IDLE打开grid.py,切记不要使用notepad++等其他软件打开该文件。
修改gnuplot pathname:打开README,我们发现有这样一段话:
For windows users, please use pgnuplot.exe.
If you use cygwin on windows, please use gunplot-x11.
根据上面的理解,在gnuplot安装目录下,打开bin目录,寻找pgnuplot.exe或者gunplot-x11。在linux下的话修改if条件后的路径,在windows下的话修改else下面的路径就ok啦。
找到gnuplot 的安装目录,打开gnuplot\bin\,复制该目录替换上面的c:\tmp\gnuplot\bin\pgnuplot.exe”,在windows环境下的修改方式如下:
if not is_win32:
svmtrain_exe = "../svm-train"
gnuplot_exe = "/usr/bin/gnuplot"
else:
# example for windows
svmtrain_exe = r"..\windows\svm-train.exe"
gnuplot_exe = r"D:\Program Files\gnuplot466\bin\pgnuplot.exe"
修改成功后保存即可。grid.py 使用说明
grid.py [-log2c begin,end,step] [-log2g begin,end,step] [-v fold] [-svmtrain pathname] [-gnuplot pathname] [-out pathname] [-png pathname] [additional parameters for svm-train] dataset
打开cmd窗口,将目录切换到grid.py所在的目录,执行以下命令:
#这里,采用默认参数
python grid.py heart_scale
#默认参数为:
fold = 5
c_begin, c_end, c_step = -5, 15, 2
g_begin, g_end, g_step = 3, -15, -2
这里将上图窗口中的输出解释一下:
workers c1 g2 rate (best_c, best_g, best_rate)
# 其中,
best_c = 2.0**c1
best_g = 2.0**g1
if (rate > best_rate) or
(rate==best_rate and g1==best_g1 and c1:
best_rate = rate
best_c1,best_g1=c1,g1
best_c = 2.0**c1
best_g = 2.0**g1
# grid.py 默认5-fold cross-validate,也就是说,一个(c,g)组可能对应多个rate,best_rate = max(rates)(最大最优原则)。