2015-01-20 31 views
5

questa è la prima domanda che sto postando su StackOverflow quindi mi scuso per eventuali contrattempi nel layout e così via (consiglio benvenuto). Il tuo aiuto è molto apprezzato!Visualizzazione della regressione di alberi decisionali di scikit-learn/sklearn multi-output in png o pdf

Sto cercando di visualizzare l'output di DecisionRegressor con più uscite (come descritto in http://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#example-tree-plot-tree-regression-multioutput-py) in formato png o pdf utilizzando pydot.

Il codice ho provato assomiglia a questo:

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

Scrivere il pdf dà i seguenti errori:

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

e così via con più "stringa correva oltre la fine della linea" errori.

Non ho mai lavorato con. Dot prima, ma ho il sospetto che potrebbe esserci un problema con il formato multi-output. Ad esempio, parte della struttura assomiglia a questo:

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

non so come risolvere questo, perché questo è solo l'uscita che ricevo da DecisionTreeRegressor.

Ho anche provato a convertire il file dot:

dot -Tpng tree.dot -o tree.png 

Ma questo dà gli stessi errori (stringa correva oltre la fine della linea) Ho provato anche la visualizzazione tree.dot utilizzando xdot e che ha dato lo stesso errore.

risposta

0

Il messaggio di errore sembra dirti che c'è un problema con le stringhe multilinea (etichette). Come mostrato here, per specificare le etichette multilinea in dot è possibile utilizzare \n, o in alternativa come descritto nella 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.

Detto questo, quando ho tentato di generare il grafico usando dot su Graphviz versione 2.39.20141007.0445 ha funzionato assolutamente bene :

enter image description here

non riesco a trovare un riferimento al cambio formato, tuttavia può essere la pena di avere un altro tentativo con l'ultima versione di Graphviz installata.

+0

Lo stesso codice funziona anche per me ora. Non sono sicuro di cosa sia successo/riparato, ma grazie per averlo fatto notare! – CSquare

1

Seguire le istruzioni seguenti per visualizzare l'albero decisionale.

• Utilizzando sklearn, è possibile esportare l'albero in un formato punto. Un file di formato 'punto' è un file di testo.

• file 'Dot' può essere convertito in un file di immagine utilizzando l'utility 'graphviz'

• Download 'graphviz.msi' dal sito web - http://www.graphviz.org/Download_windows.php

• Assicurarsi che '\ graphviz \ bin' viene aggiunto al "percorso" nelle variabili di ambiente.

file A ‘dot’ può essere estratto usando il modulo sklearn con l'aiuto dei seguenti comandi

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

Nel prompt dei comandi eseguire il seguente per convertire il file ‘dot’ a’.png’ file.

dot -Tpng tree.dot -o tree.png