2011-05-18 25 views
11

Estoy utilizando algunos conjuntos de datos disponibles en línea y tratando de visualizar el árbol. Sin embargo, no me permite visualizar la opción de árbol en absoluto. ¿Podría alguien por favor guiarme cómo obtener el diagrama de árbol en weka usando conjuntos de datos disponibles en línea?Visualización del árbol de clasificación de Weka

+0

Qué algoritmo de clasificación basado en árboles se utilizan? – SuB

Respuesta

15

Mire aquí http://maya.cs.depaul.edu/classes/ect584/weka/classify.html, por ejemplo.

Primero tiene que caber su árbol de decisión (utilicé el clasificador J48 en el conjunto de datos iris), de la manera habitual. En el panel de la lista de resultados (abajo a la izquierda en Weka explorer), haga clic con el botón derecho en la salida correspondiente y seleccione "Visualizar árbol" como se muestra a continuación.

enter image description here

enter image description here

Si ha instalado el Prefuse plugin, incluso se puede visualizar su árbol en un diseño más bonito.

+0

¿cómo guardar esto en un archivo? –

6

Si desea hacerlo a través de un programa Java, escribir el siguiente programa:

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

} 

verá una ventana emergente que muestra el árbol.

0

La opción "Árbol visualizado" es diable porque no ha instalado el plugin de visualización apropiado. Algunos de los algoritmos de clasificación basados ​​en árboles (como R48 y RandomTree) utilizan el "juego de herramientas de visualización previa al prefijo", por lo que para visualizar el árbol es necesario instalar el complemento prefuseTree.

Utilice Weka 3.7. * Que tiene incorporado el Administrador de paquetes para instalar el complemento fácilmente.

2

Con Weka 3.7, que incluye un gestor de paquete, usted puede hacer esto:

Ir a http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7 y leer el texto acerca de los paquetes, e ir a

Visualización

graphviz-treevisualize - Generando buenos gráficos en el Explorador desde árboles (por ejemplo, J48) utilizando los ejecutables de GraphViz.

Copiar este URL en el portapapeles:

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

(. Creo que este es un acuerdo de recompra github de uno de los desarrolladores weka El enlace puede cambiar ligeramente en el futuro)

Abra el administrador de paquetes, haga clic en el botón "Archivo/URL", ingrese esta URL desde el portapapeles, instale el paquete.

Ahora ejecuta un clasificador. Haga clic derecho en la lista de resultados (ver foto)

enter image description here A continuación, se puede visualizar un árbol de decisiones como buenos gráficos de mapa de bits, y exportarlo como .bmp, .png, .eps archivo mediante el diálogo Guardar como. (Los .eps archivo contiene un objeto de mapa de bits incrustado):

enter image description here

Si necesita gráficos vectoriales de salida, ejecute de la clasificación de la línea de comandos, y la exportación a .DOT formato de archivo.

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 

A continuación, traslado al formato SVG:

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

En Java, el código que implementa esta se encuentra en paquetes/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 
+2

Por alguna razón, cuando lo hago, no pasa nada. sí visualiza el árbol en el diseño predeterminado, pero no en GraphViz. – Nik

+0

@knb ¿Cómo puedo exportar esto desde mi código Java? – Pavlos

+0

No recuerdo. Tal vez invocar un comando de shell en Java? Asegúrese de seleccionar un directorio de trabajo apropiado antes de escribir el archivo * .dot * y tal vez utilizar rutas absolutas a su (s) archivo (s) de datos http://stackoverflow.com/questions/1410741/want-to-invoke-a- linux-shell-command-from-java – knb

0

Si están utilizando la línea de comandos de WEKA (CLI simple) puede generar la información del gráfico con el parámetro -g yt Para utilizarlo en GraphViz.

Ex corriendo J48 en el conjunto de datos del iris:

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

salidas:

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

y en GraphViz:

GraphViz

Cuestiones relacionadas