【问题标题】:Exporting Weka DecisionTree from Java API to XML or JSON将 Weka DecisionTree 从 Java API 导出到 XML 或 JSON
【发布时间】:2013-12-24 04:04:57
【问题描述】:

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

让我警告你,我对 Weka 很陌生 :)

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

似乎这个用例并不罕见,所以我想知道你们中是否有人已经解决了这个问题。 . .任何方向/建议表示赞赏。

谢谢!

【问题讨论】:

    标签: java xml json classification weka


    【解决方案1】:

    ClassifierTree 中的graph() 方法在“点”文件中给出了决策树的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 ]
    }
    

    对应这棵树:

    回答您的问题

    我还没有找到直接访问 J48 根树的方法 (在课堂上似乎是私人的)——你知道有一种方法可以得到 是吗?

    您可以像下面一样扩展J48,并将您的分类器声明为MyJ48,而不是J48

    class MyJ48 extends J48{
    
        public ClassifierTree getGraph(){
            return m_root;
        }
    
    }
    

    这使得可以使用getGraph() 方法访问ClassifierTree。基于此,您可以模仿ClassifierTree 类的graph() 方法(参见here)来生成您的json

    希望对你有帮助。

    【讨论】:

    • 我想这是我能得到的最接近我想要的答案。将研究您的建议,看看我是否可以以某种方式将图形输出解析为一个好的 JSON 公民。成功后将发布图表 -> json 解析逻辑。
    • 不确定在继承 J48 之后如何“模仿 ClassifierTree 的 graph() 方法”。为了模仿它,我需要访问 ClassifierTree 的受保护变量,例如我无法从 MyJ48 类访问的 m_localModel。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 2014-06-09
    • 2017-11-04
    • 1970-01-01
    • 2012-03-27
    相关资源
    最近更新 更多