Weka J48更换选项 - 没有区别

时间:2013-02-05 19:47:24

标签: java weka

我正在尝试更改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?

3 个答案:

答案 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);