4

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

4

3 回答 3

0

首先,选项应该是一个数组而不是一个字符串。所以你可以尝试如下。

String[] options = {"-C", "1.0", "-M", "1"};
cls.setOptions(options);

更重要的是,应该仔细注意一个小错误。在您的问题和@Sentry 的上一个答案中,在 C 之前出现了较短的一行,例如“-C”;但更长的行出现在 M 之前,例如“-M”。

如果你仔细观察,你会发现 M 前面的符号实际上不是减号,因为它比减号长。当您将较长的行更改为真正的减号时,您可以通过上面的代码得到正确的结果。

祝你好运。

于 2013-07-01T11:50:40.857 回答
0

问题是您如何尝试设置选项。options数组应该像方法中的数组args一样main,每个元素一个字符串:

String[] options = {"-C", "1.0", "–M", "1"};
cls.setOptions(options);

否则它将无法正常工作。

于 2013-03-10T19:00:10.053 回答
0

最好的方法是利用splitOptions(String[] options)weka.Core.Utils 类的方法:

String[] options = weka.core.Utils.splitOptions("-C 1.0 –M 1");
cls.setOptions(options); 
于 2017-03-17T20:01:38.717 回答