我正在尝试使用weka优化随机森林参数,java类如下:
package pkg10foldcrossvalidation;
import weka.core.*;
import weka.classifiers.meta.*;
import weka.classifiers.trees.RandomForest;
import java.io.*;
public class RF_Optimizer {
public static void main(String[] args) throws Exception {
// load data
BufferedReader reader = new BufferedReader(new FileReader("C:\\Prediction Results on the testing set\\Dataset.arff"));
Instances data = new Instances(reader);
reader.close();
data.setClassIndex(data.numAttributes() - 1);
// setup classifier
CVParameterSelection ps = new CVParameterSelection();
ps.setClassifier(new RandomForest());
ps.setNumFolds(10); // using 10-fold CV
ps.addCVParameter("C 0.1 0.5 5");
// build and output best options
ps.buildClassifier(data);
System.out.println(Utils.joinOptions(ps.getBestClassifierOptions()));
}
}
但是我很难理解哪些参数应该取代" C"以及如何确定每个人的范围?并且同时对多个参数多次使用.addCVParameter
是否可行?
我试图搜索一些youtube或网站教程,解释如何在java中更改随机林参数,但没有找到。
谢谢
答案 0 :(得分:0)
我认为你在描述的是,-C
是交叉验证参数,而不是RandomForest参数。
您是否只需使用资源管理器GUI,打开glass.arff
等示例数据集,然后右键单击窗口顶部的粗体 RandomForest 字符串,然后从上下文菜单中选择"将配置复制到剪贴板",然后将该字符串粘贴到您的java代码中?
现在执行此操作后,我已将此字符串复制到剪贴板:
weka.classifiers.trees.RandomForest -P 100 -I 100 -num-slots 1 -K 0 -M 1.0 -V 0.001 -S 1
这些是Weka的RandomForest学习者的默认参数。这些参数意味着什么,哪些最适合优化,以及用于优化的值范围我真的无法分辨。很可能一个非常重要的参数是numIterations
,-I
参数。可能会将它从100,200,......变为1000并绘制numIterations与Accuracy的关系,并检查曲线是否已经平滑。