将Weka DecisionTree从Java API导出为XML或JSON

将Weka DecisionTree从Java API导出为XML或JSON,java,xml,json,classification,weka,Java,Xml,Json,Classification,Weka,我的任务是通过添加决策树的导出来增强Java中现有的Weka系统,以供离线组件使用(理想情况下是JSON格式,但XML也可以) 让我警告你,我对Weka是个新手:) 我还没有找到一种直接访问J48根树的方法(在类中似乎是私有的)-你知道有什么方法吗?如果不是,我发现的最接近数据位的方法是:使用J48.toString()将树转储为字符串,然后将其转换回树结构,然后将其转换为JSON字符串(YUK) 这个用例似乎并不罕见,所以我想知道你们中是否有人已经解决了这个问题。如有任何指示/建议,我们将不胜

我的任务是通过添加决策树的导出来增强Java中现有的Weka系统,以供离线组件使用(理想情况下是JSON格式,但XML也可以)

让我警告你,我对Weka是个新手:)

我还没有找到一种直接访问J48根树的方法(在类中似乎是私有的)-你知道有什么方法吗?如果不是,我发现的最接近数据位的方法是:使用J48.toString()将树转储为字符串,然后将其转换回树结构,然后将其转换为JSON字符串(YUK)

这个用例似乎并不罕见,所以我想知道你们中是否有人已经解决了这个问题。如有任何指示/建议,我们将不胜感激

谢谢

ClassifierTree中的
graph()
方法将决策树表示为一个“点”文件

如果我们采取行动,那么代码

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 ]
}
它允许使用
getGraph()
方法访问分类器树。基于此,您可以模拟
ClassifierTree
类(请参阅)的
graph()
方法来生成
json


我希望这会有帮助。

我想这是我能找到的最接近我想要的答案了。我将研究你的建议,看看我是否能以某种方式将图形输出解析为一个好的JSON公民。一旦我成功,我将发布graph->json解析逻辑。不确定子类化J48后“模仿ClassifierTree的graph()方法”是如何实现的。为了模拟它,我需要访问ClassifierTree的受保护变量,比如m_localModel,我无法从MyJ48类中访问它。
class MyJ48 extends J48{

    public ClassifierTree getGraph(){
        return m_root;
    }

}