我正在使用一些在线可用的数据集并尝试可视化树。但是,它根本不允许我想象树选项。谁能指导我如何使用在线可用的数据集在 weka 中获取树形图?
5 回答
例如,请看这里http://maya.cs.depaul.edu/classes/ect584/weka/classify.html 。
首先,您必须以通常的方式拟合您的决策树(我在iris
数据集上使用了 J48 分类器)。在结果列表面板(Weka 资源管理器左下角)中,右键单击相应的输出并选择“可视化树”,如下所示。
如果您安装了Prefuse 插件,您甚至可以在更漂亮的布局上可视化您的树。
如果你想通过 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();
}
}
您将看到一个显示树的弹出窗口。
使用包含包管理器的Weka 3.7 ,您可以执行以下操作:
访问http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7 并阅读有关包的文本,然后访问
可视化
graphviz-treevisualize -- 在资源管理器中使用 GraphViz 可执行文件从树(例如 J48)生成漂亮的图形。
将此网址复制到剪贴板:
(我认为这是来自 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
“可视化树”选项是禁用的,因为您没有安装适当的可视化插件。一些基于树的分类算法(如 R48 和 RandomTree)使用“prefuse 可视化工具包”,因此要可视化树需要安装prefuseTree
插件。
使用内置 Package Manager 的 Weka 3.7.* 轻松安装插件。
如果您使用的是 WEKA 的命令行(简单 CLI),您可以使用参数-g输出图形信息,然后在GraphViz中使用它。
在 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 中: