注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Koala++'s blog

计算广告学 RTB

 
 
 

日志

 
 

Weka开发[38]——参数优化 (Optimizing parameters)  

2010-04-14 14:45:15|  分类: 机器学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       翻译自Optimal parameters, 原地址:http://weka.wikispaces.com/Optimizing+parameters,这一篇我看到网上是有人译过的,但是我感觉他翻译的有的地方有些问题(比如对floor函数的翻译),并且没有译全,所以我又重译了,但我也不能保证我的翻译没有大问题,我以前没有怎么调过参数,因为我相信数据才是最大的问题。

 

       因为寻找一个分类器的最优参数是一个很枯燥耗时的过程,所以Weka提供了一些有点自动化味道的方法,你可以用下面的两个meta-classifiers优化你的基分类器参数。

weka.classifiers.meta.CVParameterSelection

weka.classifiers.meta.GridSearch (only developer version)

       找到了可能的最优参数,meta-classifiers用这些参数训练一个基分类器,再用这个基分类器来预测。

CVParameterSelection

       CVParameterSelection可以优化任意多个参数的基分类器,但它有一个缺点(如果不算参数的组合爆炸,Koala++译注:就是指参数所有可能的组合数太多,组合数举例来说,比如有两个参数,一个参数有2个取值,另一个参数有5个参数,可能的组合就是10个):它不能优化内嵌(nested)参数,只能优化基分类器的直接(directly)参数。这是什么意思呢,这意味着,你可以优化weka.classifiers.functions.SMO的参数C,但你不能优化在weka.classifiers.meta.FilteredClassifier中的weka.classifiers.functions.SMO的参数C

       这有几个例子:

J48 and it's confidence interval ("-C")

1.       Explorer中选择你的数据集。

2.       选择weka.classifiers.meta.CVParameterSelection为分类器。

3.       选择weka.classifiers.trees.J48CVParameterSelection的基分类器。

4.       打开CVParametersArrayEditor,然后输入以下的字符串(然后点Add

C 0.1 0.5 5

它的意思是测试confidenceKoala++译汪:也就是C)参数,从0.10.5的效果,步长是0.1(=5)

5.       关闭对话框,运行。

6.       你会得到类似下面的结果,找到的最佳参数是用黑体表示的。

Cross-validated Parameter selection.

 Classifier: weka.classifiers.trees.J48

 Cross-validation Parameter: '-C' ranged from 0.1 to 0.5 with 5.0 steps

 Classifier Options: **-C 0.1** -M 2

SMO and it's complexity parameter ("-C")

1.       Explorer中选择你的数据集。

2.       选择weka.classifiers.meta.CVParameterSelection为分类器。

3.       选择classifiers.functions.SMOCVParameterSelection的基分类器,如果有必要,修改它的设置,比如选用RBF核。

4.       打开CVParametersArrayEditor,然后输入以下的字符串(然后点Add

C 2 8 4

它的意思是测试complexity参数2468=4步)。

5.       关闭对话框,运行。

6.       你会得到类似下面的结果,找到的最佳参数是用黑体表示的。

Cross-validated Parameter selection.

 Classifier: weka.classifiers.functions.SMO

 Cross-validation Parameter: '-C' ranged from 2.0 to 8.0 with 4.0 steps

 Classifier Options: **-C 8** -L 0.0010 -P 1.0E-12 -N 0 -V -1 -W 1 -K "weka.classifiers.functions

LibSVM and the gamma parameter of the RBF kernel ("-G")

1.       Explorer中选择你的数据集。

2.       选择weka.classifiers.meta.CVParameterSelection为分类器。

3.       选择weka.classifiers.functions.LibSVMCVParameterSelection的基分类器,如果有必要,修改它的设置,比如选用RBF核。

4.       打开CVParametersArrayEditor,然后输入以下的字符串(然后点Add

G 0.01 0.1 10

这就表示对G进行从0.010.1的迭代(=10步)。

5.       关闭对话框,运行。

6.       你会得到类似下面的结果,找到的最佳参数是用黑体表示的。

Cross-validated Parameter selection.

 Classifier: weka.classifiers.functions.LibSVM

 Cross-validation Parameter: '-G' ranged from 0.01 to 0.1 with 10.0 steps

 Classifier Options: **-G 0.09** -S 0 -K 2 -D 3 -R 0.0 -N 0.5 -M 40.0 -C 1.0 -E 0.0010 -P 0.1

GridSearch

weka.classifiers.meta.GridSearch是用于优化两个参数的meta-classifier,这也是它名字里有grid(网格)原因。如果你将日志选项打开,分类器会产生可以用于gnuplot的输出,比如,log会包含脚本和数据区。GridSearch不但可以用于一个分类器,而且可以优化一个基分类器和一个过滤器的参数(分类器中的一个参数和过滤器的一个参数),与CVParameterSelection不同的是,它不仅限于优化基分类器第一层的参数,因为它使用Java Beans Introspection,所以可以指定一个想优化的属性的路径,属性这里指的是在GenericObjectEditor中显示的字符串(由Introspection产生),比如weka.classifiers.meta.BaggingbagSizePercent,或weka.classifiers.meta.Bagging的分类器。

       因为一些重要的bug修正,你应该使用3.5.6以后的版本。

       对于要优化的两个坐标轴,XY,你可以指定下面的参数。

Property

       要进行优化的忏悔是用点分隔的路径指定的,为了区别过滤器的路径和分器类的路径,你现在将分别的过滤器和分器的路径加上filter.classifier.的前缀。

Expression

       对进行属性测试的参数值的数学表达式,是用weka.core.MathmaticalExpression类来处理的,因支持以后函数,abssqrtlogexpsincostanrintfloorpowceil。这些函数可以在BASEFROMTOSTEPI中使用,I变化范围为从FROMTO

Min

       开始的最小值。

Max

       最大值

Step

       minmax的步长

Base

       用于pow计算的底。

 

GridSearch可以参数以下指标进行优化:

Correlation coefficient (= CC) 相关系数

Root mean squared error (= RMSE) 均方根误差

Root relative squared error (= RRSE) 相对平方根误差

Mean absolute error (= MAE) 平均绝对误差

Root absolute error (= RAE) 平均绝对误差平方根

Combined: (1-abs(CC)) + RRSE + RAE 结合的

Accuracy (= ACC) 正确率

注意,Correction coefficient只适用于连续值类别,Accuray只适用于离散类别

 

下面是几个使用GridSearch的例子

1.       载入一个离散类别的数据集。

2.       选择评价方式为Accuracy.

3.       设置过滤器为weka.filters.AllFilter,因为我们不需要对数据进行任何的特殊处理,在这种情况下,我们不对过滤器进行优化。

4.       设置weka.classifiers.functions.SMO为分类器,并使用核函数weka.classifiers.functions.supportVector.RBFKernel

5.       设置XProperty为“classifier.c”,XMin为“1”,XMax为“16”,XStep为“1”,XExpression为“l”。这表示会测试SMO分类器参数从1变化到16的情况。

6.       设置YProperty为“classifier.kernel.gamma”,YMin为“-5”,YMax为“2”,YStep为“1”,YBase为“10”,YExpression为“pow(BASE,I)”。这会测试RBFKernel中的gamma参数值105104102

7.       运行后会输出与下面相似的结果。

Filter: weka.filters.AllFilter

  Classifier: weka.classifiers.functions.SMO -C 2.0 -L 0.0010 -P 1.0E-12 -N 0 -V -1 -W 1 -K

"weka.classifiers.functions.supportVector.RBFKernel -C 250007 -G 0.0"

 

 X property: classifier.c

 Y property: classifier.kernel.gamma

 

 Evaluation: Accuracy

 Coordinates: [2.0, 0.0]

 Values: **2.0** (X coordinate), **1.0** (Y coordinate)

Optimizing PLSFilter with LinearRegression (# of components and ridge)

1.       载入一个连续值类别的数据集。

2.       选择评价方式为Correlation coefficient

3.       设置过滤器为weka.filters.supervised.attribute.PLSFilte

4.       设置weka.classifiers.functions.LinearRegression为分类器,并使用no attribute selectionno elimination of collinear attributes(极大提高LinearRegression的速度)。

5.       设置XProperty为“filter.numComponents”,XMin为“5”,XMax为“20(这与你所用的数据集有很大关系,它不应该大于某个值)XStep为“1”,XExpression为“l”。这表示会测试FLSFilter component520的情况。

6.       设置YProperty为“classifier.ridge”,YMin为“-10”,YMax为“5”,YStep为“1”,YBase为“10”,YExpression为“pow(BASE,I)”。这会测试RBFKernel中的gamma参数值1010105

运行后会输出与下面相似的结果。

Filter: weka.filters.supervised.attribute.PLSFilter -C 5 -M -A PLS1 -P center

 Classifier: weka.classifiers.functions.LinearRegression -S 1 -C -R 5.0

 

 X property: filter.numComponents

 Y property: classifier.ridge

 

 Evaluation: Correlation coefficient

 Coordinates: [5.0, 5.0]

 Values: **5.0** (X coordinate), **100000.0** (Y coordinate)

Notes:

       分类器的属性以classfier.开头

       过滤器的属性以filter.开头

       对象的数组用[<index>]方法表示,index0开头,比如在GridSearch中使用weka.filters.MultiFilters包含一个ReplaceMissingValues和一个PLSFilter,你可以用filter.filter[1].numComponents来表示FLSFilternumComponents属性。

Downloads

 CVParam.java 优化J48C参数

 

 

 

 

 

  评论这张
 
阅读(4067)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017