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.
Lo stesso codice funziona anche per me ora. Non sono sicuro di cosa sia successo/riparato, ma grazie per averlo fatto notare! – CSquare