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
Trả lời
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.
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.
làm thế nào để bạn lưu tệp này vào một tệp? –
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.
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.
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:
(. 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)
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):
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
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
@knb Làm cách nào để xuất từ mã Java của tôi? – Pavlos
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
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:
Những cây dựa trên thuật toán phân loại để bạn sử dụng? – SuB