当前位置: 代码迷 >> 综合 >> Weka API中的自动调参方法简单总结
  详细解决方案

Weka API中的自动调参方法简单总结

热度:30   发布时间:2023-12-16 07:03:17.0

这里又想吐槽一下了。我们知道SKLearn中可以用GridSearch进行调参,例如下面的语句可以对Random Forest调参:

rf = RandomForestClassifier(random_state=10)
parameters = {'n_estimators':range(10,71,10), 'max_depth':range(3,14,2), 'min_samples_split':range(50,201,20), 'min_samples_split':range(80,150,20), 'min_samples_leaf':range(10,60,10),'max_features':range(3,11,2)}
gsearch = GridSearchCV(rf, parameters, scoring='roc_auc', cv=5)

是不是很简单方便(当然如果对所有超参都调参的话,运行效率可能会很慢。)

相比之下,Weka的调参就要麻烦很多(还有很多我没搞清的事情。),按照网友的介绍:https://www.cnblogs.com/lutaitou/p/5818027.html,调参主要有三种方法:CVParameterSelection、GridSearch、MultiSearch,但是仔细看看,只有CVParameterSelection是在Weka API中有的:

http://weka.sourceforge.net/doc.dev/index.html?weka/classifiers/meta/CVParameterSelection.html

而GridSearch在之前的Weka版本中有:

http://weka.sourceforge.net/doc.stable/index.html?weka/classifiers/meta/GridSearch.html

但是在新的版本中并不存在了,可以看到weka.classifiers.meta这个包并没有GridSearch这个类(仔细看前后两个链接的doc.stable和doc.dev之间的区别):

http://weka.sourceforge.net/doc.dev/index.html?weka/classifiers/meta/package-summary.html

不知道Weka开发人员的逻辑是什么??

还想吐槽的是,对于第三种方法MultiSearch,虽然很多人推荐使用(例如上面网友介绍的网页中。),但是都没说清楚怎么用。具体的方法是,可以在GitHub上其项目页面上下载:

https://github.com/fracpete/multisearch-weka-package

另外再吐槽一下,这么项目没有多少star啊,看来这年头用Weka的人真心不多了。更让人郁闷的是,这个页面里也没有一个详细的文档啊,只有这里给出了一些例子:

https://github.com/fracpete/multisearch-weka-package-examples

看了例子还是不明就里,例如下面这个链接中给出了J48自动调参的例子:

https://github.com/fracpete/multisearch-weka-package-examples/blob/master/src/main/java/com/github/fracpete/multisearch/optimize/J48ConfidenceFactor.java

但是我从头到尾没看到

    conf.setBase(10);conf.setMin(0.05);conf.setMax(0.75);conf.setStep(0.05);conf.setExpression("I");MultiSearch multi = new MultiSearch();multi.setClassifier(j48);

这些的具体含义,只能靠自己瞎猜。试了几次还是有各种莫名其妙的问题。决定还是使用CVParameterSelection了,给一些最简单的代码段:

CVParameterSelection ps = new CVParameterSelection();
ps.setClassifier(new RandomForest());
ps.setNumFolds(5);  // using 5-fold CV
ps.addCVParameter("I 20 200 10");
ps.addCVParameter("M 1 5 5");
ps.buildClassifier(trainingData);

把这些事情做完,简单来说说Weka存在的问题:

1.文档严重不全、滞后、stable版本的文档和实际上stable的版本不一致。

2.功能分割莫名其妙,为什么要把MultiSearch单独拿出来做一个package,这样会误导很多人的好不好。

3.Java代码还是要比Python啰嗦很多,也难怪最近用的人越来越少。

就简单吐槽这么多。