Visualizing Weka classification tree

做~自己de王妃 提交于 2019-12-17 22:38:26

问题


I am using few data sets available online and trying to visualize tree. However, it does not let me visualize tree option at all. Could anyone please guide me how to get the tree diagram in weka by using data sets available online?


回答1:


Look here http://maya.cs.depaul.edu/classes/ect584/weka/classify.html, for example.

First you have to fit your decision tree (I used the J48 classifier on the iris dataset), in the usual way. In the results list panel (bottom left on Weka explorer), right click on the corresponding output and select "Visualize tree" as shown below.

If you have installed the Prefuse plugin, you can even visualize your tree on a more pretty layout.




回答2:


If you want to do it via a java program, write the following program:

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();
   }

}

You will see a pop up window showing you the tree.




回答3:


With Weka 3.7, which includes a package manager, you can do this:

Go to http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7 and read the text about packages, and go to

Visualization

graphviz-treevisualize -- Generating nice graphs in the Explorer from trees (eg J48) using the GraphViz executables.

Copy this url to the clipboard:

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

(I think this is a github repo from one of the weka developers. The link might change slightly in the future)

Open the package manager, click Button "File/URL", enter this URL from the clipboard, install package.

Now run a classifier. Right click in the Result list (see picture)

Then you can visualize a decision tree as a nice bitmap graphics, and export it as .bmp, .png, .eps file using the Save As dialog. (The .eps file will contain an embedded bitmap object):

If you need vector graphics output, run the classification from the command line, and export to .dot file format.

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

Then transfer to svg format:

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

In Java, the code that implements this is in 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



回答4:


"Visualized Tree" option is diable beacuse you haven't installed appropriate visualization plug-in. Some of tree-based classification algorithms (such as R48 and RandomTree) use "prefuse visualization toolkit", so to visualize the tree you need to install prefuseTree plugin.

Use Weka 3.7.* which has built-in Package Manager to install plug-in easily.




回答5:


If you are using WEKA's command line (Simple CLI) you can output the graph information with the parameter -g and then use that in GraphViz.

Ex running J48 on the iris dataset:

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

outputs:

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 ]
}

and in GraphViz:



来源:https://stackoverflow.com/questions/9175116/visualizing-weka-classification-tree

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!