【问题标题】:Using graphviz to plot decision tree in python使用graphviz在python中绘制决策树
【发布时间】:2018-02-09 14:07:26
【问题描述】:

我正在关注上一篇文章的答案: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 文件中?

【问题讨论】:

    标签: python scikit-learn pydot


    【解决方案1】:

    看起来您在graph 中收集的数据属于list 类型。

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

    我们只对列表的第一个元素感兴趣。 因此,您可以通过以下两种方式之一进行此操作,

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

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

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

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

    这是 iris.pdf

    的输出

    更新

    为了避免路径错误,

    异常:在路径中找不到“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 路径中。

    【讨论】:

    • 感谢您的回答。我一直在玩类似的解决方案,但留下了错误“在路径中找不到“dot.exe”。通过阅读,我认为这个错误是由于我安装了 Graphiz 造成的?
    • 请查看我的路径错误编辑。如果这解决了您的问题,请考虑接受作为关闭循环的答案。
    猜你喜欢
    • 2016-03-12
    • 2019-02-24
    • 2016-11-09
    • 2020-12-28
    • 1970-01-01
    • 2017-10-09
    • 2017-07-26
    • 2014-08-30
    • 1970-01-01
    相关资源
    最近更新 更多