我已经通过添加一个决策树的出口来增加现有的WEKA系统在Java中的任务(最好是用JSON格式,但是XML也可以工作)。
让我警告你,我对韦卡很陌生:)
我还没有找到直接访问J48根目录树的方法(在类中似乎是私有的)-你知道如何访问它吗?如果不是,我找到的最接近的方法就是使用j48.to string()将树作为字符串转储,然后将其转换回树结构,然后将其转换为json字符串(yuk)。
这个用例似乎并不罕见,所以我想知道你们中是否有人已经解决了这个问题。…如有任何指导/建议,我们将不胜感激。
谢谢!

最佳答案

graph()中的ClassifierTree方法给出了“点”文件中决策树的Graphviz表示。
如果我们采取this example,那么代码

J48 g = (J48) models[0];
System.out.println(g.graph());

将返回:
digraph J48Tree {
N0 [label="outlook" ]
N0->N1 [label="= sunny"]
N1 [label="humidity" ]
N1->N2 [label="<= 75"]
N2 [label="yes (2.0)" shape=box style=filled ]
N1->N3 [label="> 75"]
N3 [label="no (3.0)" shape=box style=filled ]
N0->N4 [label="= overcast"]
N4 [label="yes (4.0)" shape=box style=filled ]
N0->N5 [label="= rainy"]
N5 [label="yes (4.0/1.0)" shape=box style=filled ]
}

对应于此树:
java - 将Weka DecisionTree从Java API导出到XML或JSON-LMLPHP
回答你的问题,
我还没有找到直接访问J48根目录树的方法
(在课堂上似乎是私人的)-你知道如何
在那?
您可以像下面这样扩展J48,并将分类器声明为MyJ48,而不是J48
class MyJ48 extends J48{

    public ClassifierTree getGraph(){
        return m_root;
    }

}

它允许使用getGraph()方法访问ClassifierTree。基于此,您可以模拟graph()类的ClassifierTree方法(请参见here)来生成您的json
我希望有帮助。

09-26 17:49