У меня была такая же точная проблема, и я потратил пару часов, пытаясь понять, его выход. Я не могу гарантировать, что то, что я разделяю здесь, будет работать для других, но это может стоить того.
- Я попытался установить официальные пакеты
pydot
, но у меня есть Python 3, и они просто не работают. Найдя заметку в потоке с одного из многих сайтов, которые я пробрал, я закончил установку this forked repository of pydot.
- Я пошел в graphviz.org и установил их программное обеспечение на своей машине с Windows 7. Если у вас нет Windows, посмотрите в разделе «Загрузка» для своей системы.
- После успешной установки в переменных окружения (
Control Panel\All Control Panel Items\System\Advanced system settings
> нажмите Environment Variables
кнопку> под System variables
я нашел переменную path
> нажмите Edit...
> Я добавил ;C:\Program Files (x86)\Graphviz2.38\bin
до конца в Variable value:
поле.
- Для подтверждения теперь я могу использовать
dot
команды в командной строке (Windows Command Processor), я напечатал dot -V
, возвращающей dot - graphviz version 2.38.0 (20140413.2041)
.
в коде ниже, имейте в виду, что я читал dataframe
из моего буфера обмена. Вы можете быть чтение его из файла или whathaveyou.
В IPython Notebook:
import pandas as pd
import numpy as np
from sklearn import tree
import pydot
from IPython.display import Image
from sklearn.externals.six import StringIO
df = pd.read_clipboard()
X = df[df.columns[:-1]]
y = df[df.columns[-1]]
dtr = tree.DecisionTreeRegressor(max_depth=3)
dtr.fit(X, y)
dot_data = StringIO()
tree.export_graphviz(dtr, out_file=dot_data, feature_names=X.columns)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
Image(graph.create_png())
В качестве альтернативы, если вы не используете IPython, вы можете создать свой собственный образ из командной строки до тех пор, как вы Graphviz установили (шаг 2 выше). Используя мой же пример кода выше, вы используете эту строку после подгонки модели:
tree.export_graphviz(dtr.tree_, out_file='treepic.dot', feature_names=X.columns)
затем откройте командную строку, где файл treepic.dot
это и введите команду:
dot -T png treepic.dot -o treepic.png
файл .png должен быть создан с вашим деревом решений.
Вы показываете нам весь код? Я не вижу инструкции if, указывающей трассировку. Кроме этого, очевидно, что метод startswith() ожидает либо строку как входную строку, либо кортеж строк («st», «st2», «st3»). Вы передали неправильный тип данных в вызов метода startswith(). Либо вы не используете codecs.BOM_UTF8 правильно, либо вам нужно передать его в строку -> str (codecs.BOM_UTF8) – reticentroot