2011-05-18 62 views
11

Tôi đang sử dụng một vài tập dữ liệu có sẵn trực tuyến và cố gắng hình dung cây. Tuy nhiên, nó không cho phép tôi trực quan hóa tùy chọn cây. Bất cứ ai có thể xin vui lòng hướng dẫn tôi làm thế nào để có được sơ đồ cây trong weka bằng cách sử dụng bộ dữ liệu có sẵn trực tuyến?Trực quan hóa cây phân loại Weka

+0

Những cây dựa trên thuật toán phân loại để bạn sử dụng? – SuB

Trả lời

15

Hãy xem tại đây http://maya.cs.depaul.edu/classes/ect584/weka/classify.html chẳng hạn.

Trước tiên, bạn phải phù hợp với cây quyết định của mình (tôi đã sử dụng trình phân loại J48 trên bộ dữ liệu iris), theo cách thông thường. Trong bảng danh sách kết quả (phía dưới bên trái trên trình khám phá Weka), nhấp chuột phải vào đầu ra tương ứng và chọn "Hình ảnh hóa cây" như hình dưới đây.

enter image description here

enter image description here

Nếu bạn đã cài đặt Prefuse plugin, thậm chí bạn có thể hình dung cây của bạn trên một bố cục khá hơn.

+0

làm thế nào để bạn lưu tệp này vào một tệp? –

6

Nếu bạn muốn làm điều đó thông qua một chương trình java, viết chương trình sau đây:

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

} 

Bạn sẽ thấy một cửa sổ pop-up hiển thị cho bạn cây.

0

tùy chọn "Hình ảnh hóa cây" có thể xảy ra khi bạn chưa cài đặt trình cắm trực quan thích hợp. Một số thuật toán phân loại dựa trên cây (chẳng hạn như R48 và RandomTree) sử dụng "bộ công cụ trực quan tiền sử", do đó, để hình dung cây bạn cần cài đặt plugin prefuseTree.

Sử dụng Weka 3.7. * Đã tích hợp Trình quản lý gói để cài đặt trình cắm dễ dàng.

2

Với Weka 3,7, trong đó bao gồm một người quản lý gói, bạn có thể làm điều này:

Đến http://weka.wikispaces.com/Unofficial+packages+for+WEKA+3.7 và đọc các văn bản về các gói, và đi đến

Visualization

graphviz-treevisualize - Tạo biểu đồ đẹp trong Explorer từ cây (ví dụ: J48) bằng cách sử dụng các tệp thi hành GraphViz.

Sao chép url này vào clipboard:

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

(. Tôi nghĩ rằng đây là một repo github từ một trong những nhà phát triển WEKA Các liên kết có thể thay đổi một chút trong tương lai)

Mở trình quản lý gói, nhấp vào nút "Tệp/URL", nhập URL này từ khay nhớ tạm, gói cài đặt.

Bây giờ hãy chạy trình phân loại. Nhấp chuột phải vào danh sách Kết quả (xem hình)

enter image description here Sau đó, bạn có thể hình dung cây quyết định là đồ họa bitmap đẹp và xuất tệp đó dưới dạng .bmp, .png, .eps bằng hộp thoại Lưu dưới dạng. (Các .tập tin eps sẽ chứa một đối tượng bitmap nhúng):

enter image description here

Nếu bạn cần đồ họa vector đầu ra, chạy việc phân loại từ dòng lệnh, và xuất khẩu sang .DOT định dạng file.

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 

Sau đó chuyển sang định dạng svg:

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

Trong Java, các mã mà thực hiện này là trong gói/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

Vì một số lý do khi tôi làm điều đó, không có gì xảy ra. nó hình dung cây trong bố trí mặc định, nhưng nó không có trong GraphViz. – Nik

+0

@knb Làm cách nào để xuất từ ​​mã Java của tôi? – Pavlos

+0

Tôi không nhớ. Có thể gọi một lệnh shell trong Java? Hãy chắc chắn rằng bạn chọn một thư mục làm việc thích hợp trước khi ghi ra tệp * .dot * và có thể sử dụng đường dẫn tuyệt đối tới (các) tệp dữ liệu của bạn http://stackoverflow.com/questions/1410741/want-to-invoke-a- linux-shell-command-from-java – knb

0

Nếu bạn đang sử dụng dòng lệnh của WEKA (Đơn giản CLI), bạn có thể xuất thông tin biểu đồ bằng thông số -g và t hen sử dụng điều đó trong GraphViz.

Ex chạy J48 trên iris tập dữ liệu:

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

kết quả đầu ra:

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

và trong GraphViz:

GraphViz

Các vấn đề liên quan