Визуализация регрессии дерева решений scikit-learn / sklearn с несколькими выходами в png или pdf

это первый вопрос, который я публикую в 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, и это дало ту же ошибку.


person CSquare    schedule 20.01.2015    source источник


Ответы (2)


Сообщение об ошибке сообщает вам, что возникла проблема с многострочными строками (метками). Как показано здесь, чтобы указать многострочные метки в dot, вы можете используйте \n или, альтернативно, как описано в документации на языке DOT:

В качестве еще одного средства для удобства чтения точка позволяет строкам в двойных кавычках охватывать несколько физических строк, используя стандартное соглашение C о обратной косой черте, непосредственно предшествующей символу новой строки.

Тем не менее, когда я попытался сгенерировать ваш график, используя dot в версии Graphviz 2.39.20141007.0445, он работал абсолютно нормально:

введите здесь описание изображения

Я не могу найти ссылку на изменение формата, однако, возможно, стоит попробовать еще раз с установленной последней версией Graphviz.

person mfitzp    schedule 06.01.2016
comment
Тот же код теперь отлично работает и у меня. Я не уверен, что случилось / что было исправлено, но спасибо, что указали на это! - person CSquare; 27.05.2016

Следуйте инструкциям ниже, чтобы просмотреть дерево решений.

• Используя sklearn, мы можем экспортировать дерево в точечный формат. Файл в формате «точка» - это текстовый файл.

• Файл «Dot» можно преобразовать в файл изображения с помощью утилиты «graphviz».

• Загрузите 'graphviz.msi' с веб-сайта - http://www.graphviz.org/Download_windows.php < / а>

• Убедитесь, что «\ graphviz \ bin» добавлен к «пути» в переменных среды.

"Точечный" файл можно извлечь с помощью модуля sklearn с помощью следующих команд

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

В командной строке выполните следующее, чтобы преобразовать файл «.dot» в файл «.png».

 dot -Tpng tree.dot -o tree.png
person Praveen Gupta Sanka    schedule 26.05.2016