это первый вопрос, который я публикую в stackoverflow, поэтому прошу прощения за любые неудачи с макетом и так далее (совет приветствуется). Ваша помощь очень ценится!
Я пытаюсь визуализировать вывод DecisionTreeRegressor с несколькими выходами (как описано в http://scikit-learn.org/stable/auto_examples/tree/plot_tree_regression_multioutput.html#example-tree-plot-tree-regression-multioutput-py) в формате png или pdf с использованием pydot.
Код, который я пробовал, выглядит так:
...
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")
Написание pdf дает следующие ошибки:
pydot.InvocationException: программа завершена со статусом: 1. stderr следует: Предупреждение: / tmp / tmpAy7d59: 7: строка прошла за конец строки Ошибка: / tmp / tmpAy7d59: 8: синтаксическая ошибка рядом с контекстом строки 8: >>> [‹ ‹---------------- 0.20938667] Предупреждение: / tmp / tmpAy7d59: 18: строка прошла за конец строки Предупреждение: / tmp / tmpAy7d59: 20: строка прошла за конец строки
и так далее с большим количеством ошибок типа «строка пробежала конец строки».
Я никогда раньше не работал с .dot, но подозреваю, что может быть проблема с форматом с несколькими выводами. Например, часть дерева выглядит так:
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 ;
}
Я не знаю, как это решить, потому что это только результат, который я получаю от DecisionTreeRegressor.
Я также попытался преобразовать точечный файл:
dot -Tpng tree.dot -o tree.png
Но это дает те же ошибки (строка прошла за концом строки). Я также пробовал визуализировать tree.dot с помощью xdot, и это дало ту же ошибку.