Weka 3.8 使用GridSearch的方法及步骤
WEKA 3-8中开始没有GridSearch,需要从WEKA GUIChooser首页,tools菜单下的Package Manager里边下载,操作如图所示。
按下图数字标记操作:
1:选中All
2:输入“GridSearch”,回车
3:Package里边就会出现结果,然后选中
4:单击“install”按钮
5:在右边5的位置可以看到安装进度条
在打开“Explorer”面板,在classify下的meta里边可以找到GridSearch了。
(需要先载入一个数据集,否则“classify”是灰色的)
载入数据集:
选中GridSearch:
单击GridSearch的配置面板:(参数配置)【以libsvm的参数为例】
选中要用的分类器:libSVM(要优化其参数cost和gamma)
可以配置部分参数,如normalize:True
Evaluation:Accuracy(离散类别的数据集)
XPropety:cost(优化参数名与libSVM中的参数名一致)
YPropety:gamma(优化参数名与libSVM中的参数名一致)
XBase:2 (用于pow计算的底)
XExpression:pow(BASE,1) (指数函数,还可以是别的函数)
XMax:3
XMin:0
XStep:1 (步长间隔)
表示cost的范围从[20,23],间隔为21 ,即横坐标:20,21,22,23
YBase:2
YExpression:pow(BASE,1)
YMax:16
YMin:0
YStep:2
表示gamma的范围从[20,216],间隔为22 ,即纵坐标:20,22,24,…,216
注:参数范围的设置,包括所使用的表达式,要根据训练实例来设置,可以开始把范围弄的小点儿(也就是网格小点儿),进行测试,多次寻找最佳的参数对,否则数据集比较大的话,会耗时很长,还不一定得出比较好的结果。
关于SVM参数的优化选取,国际上并没有公认统一的最好的方法,现在目前常用的方法就是让c和g在一定的范围内取值,对于取定的c和g对于把训练集作为原始数据集利用K-CV方法得到在此组c和g下训练集验证分类准确率,最终取使得训练集验证分类准确率最高的那组c和g做为最佳的参数。
但有一个问题就是可能会有多组的c和g对应于最高的验证分类准确率,这种情况怎么处理?
这里采用的手段是选取能够达到最高验证分类准确率中参数c最小的那组c和g做为最佳的参数,如果对应最小的c有多组g,就选取搜索到的第一组c和g做为最佳的参数。
这样做的理由是:过高的c会导致过学习状态发生,即训练集分类准确率很高而测试集分类准确率很低(分类器的泛化能力降低),所以在能够达到最高验证分类准确率中的所有的成对的c和g中认为较小的惩罚参数c是更佳的选择对象。
交叉验证,为了加快速度,可以使用5折。
运行得出的结果:C=1,g = 256,平均准确率为81.79%