我正在尝试更改J48分类器的选项,但它在结果树中没有任何区别。
我的代码:
J48 cls = new J48();
Instances data = new Instances(new BufferedReader(new FileReader("someArffFile")));
data.setClassIndex(data.numAttributes() - 1);
//was trying to use -M 1 and -M 5, but no difference
String[] options = new String[1];
options[0] = "-C 1.0 –M 1";
cls.setOptions(options);
cls.buildClassifier(data);
//displaying J48 tree
TreeVisualizer tv = new TreeVisualizer(null,cls.graph(),new PlaceNode2());
使用此方法设置值后,一切正常。
cls.setMinNumObj(5);
我有什么想法可以使用setOptions方法而不是setMinNumObj?
答案 0 :(得分:0)
问题是您如何尝试设置选项。 options
数组应该与args
方法中的main
数组类似,每个元素一个字符串:
String[] options = {"-C", "1.0", "–M", "1"};
cls.setOptions(options);
否则它将无效。
答案 1 :(得分:0)
首先,选项应该是数组而不是字符串。所以你可以尝试如下。
String[] options = {"-C", "1.0", "-M", "1"};
cls.setOptions(options);
更重要的是,应该仔细注意一个小虫子。在您的问题和@Sentry的上一个答案中,较短的一行发生在C之前,如“-C”;但是在M之前发生了更长的线,比如“-M”。
如果你仔细观察,你会发现M之前的标志实际上不是减号,因为它长于减号。当您将较长的行更改为真正的减号时,您可以通过上面的代码获得正确的结果。
祝你好运。答案 2 :(得分:0)
最好的方法是使用weka.Core.Utils类的splitOptions(String[] options)
方法:
String[] options = weka.core.Utils.splitOptions("-C 1.0 –M 1");
cls.setOptions(options);