可视化Weka分类树

时间:2011-05-18 00:38:19

标签: data-visualization classification weka decision-tree

我在网上使用的数据集很少,并试图可视化树。但是,它根本不让我可视化树选项。有人可以指导我如何使用在线提供的数据集来获取weka中的树形图吗?

5 个答案:

答案 0 :(得分:18)

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

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

enter image description here

enter image description here

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

答案 1 :(得分:10)

如果您想通过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();
   }

}

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

答案 2 :(得分:3)

使用 Weka 3.7 ,其中包含包管理器,您可以执行以下操作:

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

  

可视化

     

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

将此网址复制到剪贴板:

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

(我认为这是来自其中一位weka开发者的github回购。未来链接可能会略有变化)

打开包管理器,单击按钮"文件/ URL",从剪贴板输入此URL,安装包。

现在运行分类器。右键单击结果列表(见图)

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

enter image description here

如果您需要矢量图形输出,请从命令行运行分类,然后导出为.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

答案 3 :(得分:0)

" Visualized Tree"因为你没有安装适当的可视化插件,所以选项是diable。一些基于树的分类算法(例如R48和RandomTree)使用" prefuse可视化工具包",以便可视化您需要安装prefuseTree插件的树。

使用内置包管理器的Weka 3.7。*轻松安装插件。

答案 4 :(得分:0)

如果您使用WEKA的命令行(简单CLI ),您可以使用参数 -g 输出图形信息,然后在 GraphViz的

在虹膜数据集上运行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中:

GraphViz