2

我是使用 Scikit Learn、机器学习和 Python 工作的新手。我试图使用决策树。我设法完成了所有的数据清理、分析等工作,直到我尝试获得决策树图。

我正在使用 Python 3.4 和pyplot2. 我有一个名为 decision_tree 的函数来制作模型,然后调用一个函数 (plot_classifier) 给 (clf) 以用以下线条绘制它:

    dot_data = StringIO()
    export_graphviz(clf, out_file=dot_data)
    print(type(dot_data.getvalue()))
    graph = pydot.graph_from_dot_data(dot_data.getvalue())
    Image(graph.create_png())

此代码类似于 Scikit 精益代码。问题出在标记线上。我已经拟合了我的模型并检查了结果。他们没问题,但我不知道如何画树。我在控制台上得到了这个

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-66-900e97a70715> in <module>()
----> 1 decision_tree(feature_train, feature_test, label_train, label_test)

<ipython-input-3-c2e245caf6c8> in decision_tree(feature_train, feature_test,     label_train, label_test)
 17     print("Cantidad de aciertos: " + str(count) + "\n Cantidad de Elementos: " + str(len(pred)))
 18     print(no_match)
---> 19     plot_classifier(clf)
20     return accuracy
21 

<ipython-input-65-78f8ba2dc1ed> in plot_classifier(clf)
  3         export_graphviz(clf, out_file=dot_data)
  4         print(type(dot_data.getvalue()))
----> 5         graph = pydot.graph_from_dot_data(dot_data.getvalue())
  6         Image(graph.create_png())
  7 

C:\Anaconda3\lib\site-packages\pydot.py in graph_from_dot_data(data)
218     """
219 
--> 220     return dot_parser.parse_dot_data(data)
221 
222 

C:\Anaconda3\lib\site-packages\dot_parser.py in parse_dot_data(data)
508     top_graphs = list()
509 
--> 510     if data.startswith(codecs.BOM_UTF8):
511         data = data.decode( 'utf-8' )
512 

TypeError: startswith first arg must be str or a tuple of str, not bytes

我在互联网上检查了错误 msj,但答案谈到了这startswith条线(那是在图书馆里,我认为当很多人有这个工作时不会有问题)。我检查其他线路的问题,也找不到我有问题的线路。

谁能帮我这个?我尝试了转换为stringor tuple(即使您getvalues()已经返回 a string)之类的方法,但没有。

4

1 回答 1

0

我在 Linux 上遇到了同样的问题,并解决了安装 pydotplus 及其依赖项的问题。

https://pypi.python.org/pypi/pydotplus

安装 pydotplus 及其依赖项后:

import pydotplus

graph = pydotplus.pydotplus.graph_from_dot_data(dot_data.getvalue())
于 2016-04-20T14:39:45.800 回答