【问题标题】:Visualizing Weka classification tree可视化 Weka 分类树
【发布时间】:2012-02-28 19:31:39
【问题描述】:

我正在使用一些在线可用的数据集并尝试可视化树。但是,它根本不允许我可视化树选项。谁能指导我如何使用在线可用的数据集获取weka中的树形图?

【问题讨论】:

  • 您使用哪种基于树的分类算法?

标签: data-visualization classification weka decision-tree


【解决方案1】:

如果你使用的是 WEKA 的命令行(Simple CLI),你可以通过参数-g输出图形信息,然后在GraphViz中使用em>。

在 iris 数据集上运行 J48:

`java weka.classifiers.trees.J48 -C 0.25 -M 2 -t "C:\datasets\iris.arff" -g`

输出:

digraph J48Tree {
N0 [label="petalwidth" ]
N0->N1 [label="<= 0.6"]
N1 [label="Iris-setosa (50.0)" shape=box style=filled ]
N0->N2 [label="> 0.6"]
N2 [label="petalwidth" ]
N2->N3 [label="<= 1.7"]
N3 [label="petallength" ]
N3->N4 [label="<= 4.9"]
N4 [label="Iris-versicolor (48.0/1.0)" shape=box style=filled ]
N3->N5 [label="> 4.9"]
N5 [label="petalwidth" ]
N5->N6 [label="<= 1.5"]
N6 [label="Iris-virginica (3.0)" shape=box style=filled ]
N5->N7 [label="> 1.5"]
N7 [label="Iris-versicolor (3.0/1.0)" shape=box style=filled ]
N2->N8 [label="> 1.7"]
N8 [label="Iris-virginica (46.0/1.0)" shape=box style=filled ]
}

在 GraphViz 中:

【讨论】:

    【解决方案2】:

    使用包含包管理器Weka 3.7,您可以这样做:

    转到http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7并阅读有关包的文本,然后转到

    可视化

    graphviz-treevisualize -- 在资源管理器中生成漂亮的图表 使用 GraphViz 可执行文件的树(例如 J48)。

    将此网址复制到剪贴板:

    https://github.com/fracpete/graphviz-treevisualize-weka-package/releases/download/v2014.8.1/graphviz-treevisualize-2014.8.1.zip

    (我认为这是来自 weka 开发人员之一的 github 存储库。该链接将来可能会略有变化)

    打开包管理器,点击“文件/URL”按钮,从剪贴板输入这个URL,安装包。

    现在运行一个分类器。在结果列表中右击(见图)

    然后,您可以将决策树可视化为漂亮的位图图形,并使用“另存为”对话框将其导出为 .bmp、.png、.eps 文件。 (.eps 文件将包含一个嵌入的位图对象):

    如果您需要矢量图形输出,从命令行运行分类,并导出为.dot文件格式。

    java -Xmx1024M -cp /usr/local/lib/R/site-library/RWekajars/java//weka.jar weka.classifiers.trees.J48 -t breast-cancer.arff -C 0.25 -M 2 -g > breast-cancer.arff.dot
    

    然后转成svg格式:

    dot -o breast-cancer.arff.dot.svg breast-cancer.arff.dot -Tsvg
    

    在 Java 中,实现此功能的代码位于 packages/graphviz-treevisualize-2014.8.1.jar 中

     weka/gui/visualize/plugins/GraphVizPanel.class
     weka/gui/visualize/plugins/GraphVizTreeVisualization.class
     weka/gui/visualize/plugins/GraphVizTreeVisualization.props
     weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1$1.class
     weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1$2.class
     weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin$1.class
     weka/gui/visualize/plugins/GraphVizTreeVisualizationPlugin.class
    

    【讨论】:

    • 出于某种原因,当我这样做时,什么也没有发生。它确实在默认布局中可视化树,但在 GraphViz 中没有。
    • @knb 如何从我的 Java 代码中导出它?
    • 我不记得了。也许在 Java 中调用 shell 命令?确保在写出 .dot 文件之前选择适当的工作目录,并且可能使用数据文件的绝对路径stackoverflow.com/questions/1410741/…
    • 这棵树中的类在哪里?这些是tested_positive 和tested_negative 吗? @knb
    • 是的,tested_positivetested_negative 是类。 (分类结果)
    【解决方案3】:

    “可视化树”选项是禁用的,因为您没有安装适当的可视化插件。一些基于树的分类算法(如 R48 和 RandomTree)使用“prefuse 可视化工具包”,因此要可视化树需要安装prefuseTree 插件。

    使用Weka 3.7.*,内置Package Manager,轻松安装插件。

    【讨论】:

      【解决方案4】:

      如果你想通过java程序来做,写下面的程序:

      import java.awt.BorderLayout;
      import java.io.BufferedReader;
      import java.io.FileReader;
      
      import weka.classifiers.*;
      import weka.classifiers.trees.J48;
      import weka.core.Instances;
      import weka.gui.treevisualizer.PlaceNode2;
      import weka.gui.treevisualizer.TreeVisualizer;
      
      public class WekaJ48 {
      public static void main(String args[]) throws Exception {
           // train classifier
           J48 cls = new J48();
           Instances data = new Instances(new BufferedReader(new File    
      Reader("D:\\sample.arff")));
           data.setClassIndex(data.numAttributes() - 1);
           cls.buildClassifier(data);
      
           // display classifier
           final javax.swing.JFrame jf = 
             new javax.swing.JFrame("Weka Classifier Tree Visualizer: J48");
           jf.setSize(500,400);
           jf.getContentPane().setLayout(new BorderLayout());
           TreeVisualizer tv = new TreeVisualizer(null,
               cls.graph(),
               new PlaceNode2());
           jf.getContentPane().add(tv, BorderLayout.CENTER);
           jf.addWindowListener(new java.awt.event.WindowAdapter() {
             public void windowClosing(java.awt.event.WindowEvent e) {
               jf.dispose();
             }
           });
      
           jf.setVisible(true);
           tv.fitToScreen();
         }
      
      }
      

      您将看到一个显示树的弹出窗口。

      【讨论】:

      • 对我有用,虽然有点粗糙
      【解决方案5】:

      例如,看这里http://maya.cs.depaul.edu/classes/ect584/weka/classify.html

      首先,您必须以通常的方式拟合您的决策树(我在 iris 数据集上使用了 J48 分类器)。在结果列表面板(Weka explorer 左下角)中,右键单击相应的输出,然后选择“Visualize tree”,如下图所示。

      如果您安装了Prefuse plugin,您甚至可以在更漂亮的布局上可视化您的树。

      【讨论】:

      • 如何将其保存到文件中?
      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2022-01-21
      • 2012-12-28
      • 2017-12-08
      • 2016-02-20
      • 2018-10-10
      • 2017-03-15
      • 2011-03-14
      相关资源
      最近更新 更多