2015-12-07 3 views
1

Я пытаюсь реализовать Дерево решений с помощью scikit, а затем визуализировать дерево с помощью Graphviz, который, как я понимаю, является стандартным выбором для визуализации DT. Я использую PyCharm, anaconda, Python 2.7 и OS X El Capitan. Я установил pydot и Graphviz с установкой PIP, насколько я могу судить, а также установил их непосредственно в Pycharm, но что бы я ни делал, я постоянно получаю «Нет модуля с именем graphviz».Дерево решений Python GraphViz

from sklearn.datasets import load_iris 
from sklearn import tree 
#import graphviz as gv 
# uncommenting the row above produces an error 
clf = tree.DecisionTreeClassifier() 
iris = load_iris() 
clf = clf.fit(iris.data, iris.target) 
with open('graph.dot', 'w') as file: 
    tree.export_graphviz(clf, out_file = file) 
file.close() 

В настоящее время этот код вызывает graph.dot, но я не могу просмотреть файл. 1. Как я могу заставить репозиторий graphviz работать? 2. Как написать график в формате PDF/PNG? Я видел несколько примеров, но не работал 3. Я нашел эту команду: dot -Tps filename.dot -o outfile.ps Где я ее использую? И как я могу проверить, что dot-утилита существует в моей ОС X?

Заранее благодарен!

ответ

1

Я уверен, что я установил graphviz с помощью homebrew, но похоже, что вы также можете скачать двоичный файл с http://www.graphviz.org/Download_macos.php. Если вы не можете получить pydot работать, вам необходимо выполнить команду dot от терминала, или в создании сценариев с использованием подпроцесса:

import subprocess 
subprocess.call(['dot', '-Tpdf', 'tree.dot', '-o' 'tree.pdf']) 
+0

Спасибо, что работает отлично! – OAK

1

Вы также можете использовать следующий код для экспорта в PDF.

Сначала установите pydot2

pip install pydot2 

Затем вы можете использовать следующий код:

from sklearn.datasets import load_iris 
from sklearn import tree 
clf = tree.DecisionTreeClassifier() 
iris = load_iris() 
clf = clf.fit(iris.data, iris.target) 

from sklearn.externals.six import StringIO 
import pydot 

dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph.write_pdf("graph.pdf") 
0

Если у вас нет/хотите Graphviz на вашей системе, можно также открывать файлы .DOT как текст и скопируйте контент в webgraphviz, который затем создаст и отобразит дерево для вас.

В результате нет изображения или файла, который вы можете сохранить, и вам придется делать это вручную для каждого созданного вами дерева. Для более сложного и/или пакетного построения вам понадобится фактический graphviz в вашей системе, так что вы можете позвонить по программе dot либо с терминала, либо непосредственно из Python, как описано в maxymoo.

Смежные вопросы