PYTHON 决策树可视化

5

[![enter image description here][1]][1]我希望将我应用于数据的决策树分类器可视化为pdf或png文件。我尝试使用以下代码通过graphviz进行可视化:

X_train, X_test, y_train, y_test = \
        train_test_split(X, y, test_size=0.30, random_state=1)

clf =tree.DecisionTreeClassifier(max_depth=43)
clf = clf.fit(X_train, y_train)
from sklearn.externals.six import StringIO  
import pydot 
dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph[0].write_pdf("tree.pdf") 

但是这个过程无法完成。第一次我遇到了内存不足的错误,第二次我遇到了“dot停止工作”的错误。由于这些问题,我想通过知道左子节点在哪里、右子节点在哪里或者左子节点来了解树的情况。感谢任何回应和帮助。


请发布您的代码,尤其是引发此错误的部分。 - CodeIsLife
@zyxue 这是我得到的错误信息 [1]: https://i.stack.imgur.com/lHk1l.jpg - Shelly
@CodeIsLife 在运行以下代码后,我遇到了上面显示的错误:graph = pydot.graph_from_dot_data(dot_data.getvalue()) graph[0].write_pdf("tree.pdf") - Shelly
我明白了,你在使用Windows系统。我对dot.exe不是很了解,但它与Python无关。pydot可能只是它的一个包装器。我之前用过Linux版本的dot。你可以像这样做:tree.export_graphviz(clf, out_file='tree.dot'),然后直接使用tree.dot。或者如果你对Python很熟悉,你也可以从clf对象中提取所有需要的信息。我以前也做过类似的事情,需要注意的是,存储在clf中的信息并不是非常直观的,你可能需要进行相当多的转换。 - zyxue
@zyxue 关于使用tree.dot,我之前尝试过这个命令 "tree.export_graphviz(clf, out_file='tree.dot') with open("tree.dot", 'w') as f: f = tree.export_graphviz(clf, out_file=f)" 但是失败了。我的意思是在Python中运行正常,但是当我输入这个命令 "dot -Tpdf tree.dot -o tree.pdf" 时,出现了这个错误:"Error: : syntax error in line 1 near 'dot'。我真的不知道如何处理这个错误。 - Shelly
显示剩余6条评论
1个回答

0
如果你遇到了如下的错误:
Program terminated with status: -11. stderr follows: dot: graph is too large for cairo-renderer bitmaps.

接着,要理解树的结构,您可以尝试在屏幕上将其以树形文本格式表示,例如下方:

from sklearn.tree import export_text

r = export_text(clf, feature_names=df_X_train.columns)
print(r)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接