使用graphviz在python

时间:2017-08-31 14:55:16

标签: python scikit-learn pydot

我正在关注上一篇文章中提供的答案:Is it possible to print the decision tree in scikit-learn?

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.externals.six import StringIO  
import pydot

clf = tree.DecisionTreeClassifier()
iris = load_iris()

clf = clf.fit(iris.data, iris.target)
tree.export_graphviz(clf,    out_file='tree.dot')
dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data)
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")

不幸的是,我无法弄清楚以下错误:

'list' object has no attribute 'write_pdf'

有没有人知道如何解决这个问题,因为生成的tree.dot文件的结构是一个列表?

更新

我尝试使用网络应用程序http://webgraphviz.com/。但是,这样做不会显示决策树条件以及类。有没有办法在tree.dot文件中包含这些?

1 个答案:

答案 0 :(得分:1)

您在graph收集的数据看起来类型为list

graph = pydot.graph_from_dot_data(dot_data.getvalue())
type(graph)
<type 'list'>

我们只对列表的第一个元素感兴趣。 所以你可以通过以下两种方式之一做到这一点,

1)更改您在dot_data收集graph值的行

(graph, ) = pydot.graph_from_dot_data(dot_data.getvalue())

2)或者在graph中收集整个列表,但只使用第一个元素发送到pdf

graph[0].write_pdf("iris.pdf")

以下是 iris.pdf

的输出结果

enter image description here更新

绕过路径错误,

  

例外:路径中找不到“dot.exe”。

here

安装graphviz

然后在代码中使用以下任一项。

import os
os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

或者只需在控制面板的Windows路径中添加以下内容即可。

  

C:\ Program Files(x86)\ Graphviz2.38 \ bin

根据graphviz文档,在安装过程中不会将其添加到Windows路径中。