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 ответов


у меня была такая же проблема и просто потратил пару часов, пытаясь выяснить это. Я не могу гарантировать, что то, что я разделяю здесь, будет работать для других, но это может стоить того.

  1. Я попытался установить официальный pydot пакетов, но у меня есть Python 3 и они просто не работают. После нахождения заметки в потоке с одного из многих веб-сайтов, которые я просмотрел, я закончил установку это раздвоенное хранилище pydot.
  2. Я пошел graphviz.org и установили свое программное обеспечение на мою машину Windows 7. Если у вас нет Windows, посмотрите в их разделе Загрузки для вашей системы.
  3. после успешной установки, в переменных среды (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:

у вас, вероятно, будет больше успеха...