Python, PyDot и DecisionTree
Я пытаюсь визуализировать свое DecisionTree, но получаю ошибку Код:
X = [i[1:] for i in dataset]#attribute
y = [i[0] for i in dataset]
clf = tree.DecisionTreeClassifier()
dot_data = StringIO()
tree.export_graphviz(clf.fit(train_X, train_y), out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("tree.pdf")
и ошибка
Traceback (most recent call last):
if data.startswith(codecs.BOM_UTF8):
TypeError: startswith first arg must be str or a tuple of str, not bytes
кто-нибудь может объяснить мне в чем проблема? Большое спасибо!
3 ответов
у меня была такая же проблема и просто потратил пару часов, пытаясь выяснить это. Я не могу гарантировать, что то, что я разделяю здесь, будет работать для других, но это может стоить того.
- Я попытался установить официальный
pydot
пакетов, но у меня есть Python 3 и они просто не работают. После нахождения заметки в потоке с одного из многих веб-сайтов, которые я просмотрел, я закончил установку это раздвоенное хранилище 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
в конец
в случае использования Python 3, просто использовать pydotplus вместо pydot. Он также будет иметь мягкий процесс установки ПГИ.
import pydotplus
<your code>
dot_data = StringIO()
tree.export_graphviz(clf, out_file=dot_data)
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
рассматриваемая строка проверяет, закодирован ли поток/файл как UTF-8
вместо:
if data.startswith(codecs.BOM_UTF8):
использование:
if codecs.BOM_UTF8 in data:
у вас, вероятно, будет больше успеха...