我是使用Python学习Scikit Learn,机器学习的新手。我试图使用决策树。我设法完成所有数据清理,分析等工作,直到我试图获得决策树图。
我正在使用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
行(这是在库上,我不认为当很多人有这个工作时会出现问题) 。我检查其他线路上的问题,找不到我遇到的问题。
任何人都可以帮我吗?我试过转换为string
或tuple
(即使您getvalues()
已经返回string
),但没有尝试。
答案 0 :(得分:0)
我在Linux上遇到了同样的问题并解决了安装pydotplus及其依赖项的问题。
https://pypi.python.org/pypi/pydotplus
安装pydotplus及其依赖项后:
import pydotplus
graph = pydotplus.pydotplus.graph_from_dot_data(dot_data.getvalue())