2015-01-20 34 views
5

to jest pierwsze pytanie, jestem delegowania na stackoverflow więc przepraszam za wszelkie wpadek w układzie i tak dalej (porady mile widziane). Twoja pomoc jest bardzo ceniona!Wizualizacja scikit-learn/sklearn Wielozadaniowa drzewo decyzyjne regresu w png lub pdf

Próbuję wizualizować wyjście DecisionTreeRegressor z wieloma wyjściami (jak opisano w http://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#example-tree-plot-tree-regression-multioutput-py) w formacie png lub pdf, używając pydot.

Kod Próbowałem wygląda następująco:

... 
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") 

Pisanie pdf daje następujące błędy:

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

i tak dalej z bardziej „ciąg przebiegł obok końca linii” błędy.

nigdy nie pracował z .dot wcześniej, ale podejrzewam, że może być problem z formatem multi-wyjścia. Na przykład, część drzewa wygląda następująco:

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

nie wiem jak rozwiązać ten problem, bo to jest po prostu wyjście otrzymuję od DecisionTreeRegressor.

Próbowałem też konwersji pliku DOT:

dot -Tpng tree.dot -o tree.png 

Ale to daje te same błędy (string przebiegł obok końca linii) Próbowałem też wizualizacji tree.dot użyciu xdot i że dał ten sam błąd.

Odpowiedz

0

Komunikat o błędzie pojawia się informacją, że istnieje problem z multilinii strun (etykiety). Jak pokazano here, aby określić multilinii etykiet dot można użyć \n lub alternatywnie, jak to opisano w 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.

Powiedział, że kiedy próbował wygenerować wykres używając dot na Graphviz wersji 2.39.20141007.0445 pracował absolutnie w porządku :

enter image description here

nie mogę znaleźć odniesienie do zmieniających formatu, jednak może to być warto mieć kolejną próbę z najnowszą wersją Graphviz zainstalowany.

+0

Ten sam kod również działa dobrze dla mnie teraz. Nie jestem pewien, co się stało/zostało naprawione, ale dzięki za wskazanie tego! – CSquare

1

Postępuj zgodnie z instrukcjami poniżej, aby wyświetlić drzewo decyzyjne.

• Korzystanie sklearn możemy wyeksportować drzewo w formacie dot. Plik formatu "kropka" jest plikiem tekstowym.

• plik 'Dot' można przekształcić do postaci pliku obrazu za pomocą 'Graphviz' Utility

• Pobierz 'graphviz.msi' ze strony internetowej - http://www.graphviz.org/Download_windows.php

• Upewnić się, że '\ Graphviz \ bin' jest dodawany do "ścieżki" w zmiennych środowiskowych.

A „kropka” plik można wyodrębnić za pomocą modułu sklearn za pomocą następujących poleceń

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

w wierszu poleceń wykonać następujące czynności, aby przekonwertować plik „.dot” do”„plik .png.