2015-01-20 17 views
5

đây là câu hỏi đầu tiên tôi đăng trên stackoverflow vì vậy tôi xin lỗi vì bất kỳ rủi ro nào trong bố cục và vân vân (lời khuyên chào mừng). Sự giúp đỡ của bạn được đánh giá rất cao!Trực quan hóa truy vấn hồi quy đa đầu ra scikit-learn/sklearn trong png hoặc pdf

Tôi đang cố gắng hình dung đầu ra của DecisionTreeRegressor với nhiều kết quả đầu ra (như được mô tả trong http://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#example-tree-plot-tree-regression-multioutput-py) ở định dạng png hoặc pdf bằng cách sử dụng pydot.

Mã tôi đã cố gắng trông như thế này:

... 
dtreg = tree.DecisionTreeRegressor(max_depth=3) 
dtreg.fit(x,y) 

tree.export_graphviz(dtreg, out_file='tree.dot') #print dotfile 

dot_data = StringIO() 
tree.export_graphviz(dtreg, out_file=dot_data) 
print dot_data.getvalue() 
pydot.graph_from_dot_data(dot_data.getvalue()).write_pdf("pydot_try.pdf") 

Viết pdf cho các lỗi sau đây:

pydot.InvocationException: Program terminated with status: 1. stderr follows: Warning: /tmp/tmpAy7d59:7: string ran past end of line Error: /tmp/tmpAy7d59:8: syntax error near line 8 context: >>> [ <<< 0.20938667] Warning: /tmp/tmpAy7d59:18: string ran past end of line Warning: /tmp/tmpAy7d59:20: string ran past end of line

và vân vân với nhiều "chuỗi chạy cuối quá khứ của dòng" lỗi.

Tôi chưa bao giờ làm việc với .dot trước đây, nhưng tôi nghi ngờ có thể có sự cố với định dạng nhiều đầu ra. Ví dụ: một phần của cây trông như sau:

digraph Tree { 
0 [label="X[0] <= 56.0000\nmse = 0.0149315126135\nsamples = 41", shape="box"] ; 
1 [label="X[0] <= 40.0000\nmse = 0.0137536911947\nsamples = 25", shape="box"] ; 
0 -> 1 ; 
2 [label="X[0] <= 24.0000\nmse = 0.0152142545276\nsamples = 21", shape="box"] ; 
1 -> 2 ; 
3 [label="mse = 0.0140\nsamples = 15\nvalue = [[ 0.83384667] 
[ 0.20938667] 
[ 0.08511333] 
[ 0.04234667] 
[ 0.08158 ] 
[ 0.17948667] 
[ 0.03616 ] 
[ 0.00995333] 
[ 0.99529333] 
[ 0.13715333] 
[ 0.10294667] 
[ 0.06632667]]", shape="box"] ; 
2 -> 3 ; 
4 [label="mse = 0.0170\nsamples = 6\nvalue = [[ 0.69588333] 
[ 0.20275 ] 
[ 0.0953 ] 
[ 0.0436 ] 
[ 0.1216 ] 
[ 0.17248333] 
[ 0.04393333] 
[ 0.01178333] 
[ 0.99913333] 
[ 0.12348333] 
[ 0.10838333] 
[ 0.06973333]]", shape="box"] ; 
2 -> 4 ; 
} 

Tôi không biết cách giải quyết điều này, vì đó chỉ là kết quả tôi nhận được từ DecisionTreeRegressor.

Tôi cũng đã cố gắng chuyển đổi dot file:

dot -Tpng tree.dot -o tree.png 

Nhưng điều này mang đến cho các lỗi tương tự (string chạy cuối quá khứ của dòng) Tôi cũng đã cố gắng hình dung tree.dot sử dụng xdot và đó đã cho các lỗi tương tự.

Trả lời

0

Thông báo lỗi dường như cho bạn biết rằng có sự cố với chuỗi nhiều chuỗi (nhãn). Như đã trình bày here, để xác định nhãn multiline trong dot bạn có thể sử dụng \n, hoặc cách khác như mô tả trong DOT language documentation:

As another aid for readability, dot allows double-quoted strings to span multiple physical lines using the standard C convention of a backslash immediately preceding a newline character.

Điều đó nói rằng, khi tôi đã cố gắng để tạo ra âm mưu của bạn sử dụng dot trên Graphviz phiên bản 2.39.20141007.0445 nó làm việc hoàn toàn tốt :

enter image description here

tôi không thể tìm thấy một tham chiếu đến thay đổi định dạng, tuy nhiên nó có thể có giá trị khác nỗ lực với phiên bản mới nhất của Graphviz cài đặt.

+0

Mã tương tự cũng hoạt động tốt cho tôi ngay bây giờ. Tôi không chắc điều gì đã xảy ra/đã được khắc phục, nhưng cảm ơn vì đã chỉ ra điều đó! – CSquare

1

Làm theo các hướng dẫn bên dưới để xem cây quyết định.

• Sử dụng sklearn, chúng tôi có thể xuất cây theo định dạng dấu chấm. Tệp định dạng 'chấm' là tệp văn bản.

• tập tin 'Dot' có thể được chuyển đổi thành một file image sử dụng 'graphviz' tiện ích

• Tải 'graphviz.msi' từ trang web - http://www.graphviz.org/Download_windows.php

• Đảm bảo rằng '\ graphviz \ bin' được thêm vào 'đường dẫn' trong các biến môi trường.

A ‘chấm’ tập tin có thể được chiết xuất bằng môđun sklearn với sự giúp đỡ của các lệnh sau

from sklearn import tree 
tree.export_graphviz(clf,out_file='tree.dot') 

Trong cửa sổ lệnh thực hiện như sau để chuyển đổi các tập tin ‘.DOT’ thành’.png’ File.

dot -Tpng tree.dot -o tree.png 
Các vấn đề liên quan