是否可以在scikit-learn中打印决策树?

时间:2014-08-12 21:53:22

标签: python scikit-learn

有没有办法在scikit-learn中打印经过训练的决策树?我想为我的论文训练一个决策树,我想把树的图片放在论文中。这可能吗?

3 个答案:

答案 0 :(得分:14)

有一种方法可以导出为graph_viz格式:http://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html

所以来自在线文档:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>>
>>> clf = tree.DecisionTreeClassifier()
>>> iris = load_iris()
>>>
>>> clf = clf.fit(iris.data, iris.target)
>>> tree.export_graphviz(clf,
...     out_file='tree.dot')    

然后您可以使用图表加载它,或者如果您安装了pydot,那么您可以更直接地执行此操作:http://scikit-learn.org/stable/modules/tree.html

>>> 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.write_pdf("iris.pdf") 

会生成一个svg,无法在此处显示,因此您必须关注该链接:http://scikit-learn.org/stable/_images/iris.svg

<强>更新

自从我第一次回答这个问题后,行为似乎发生了变化,它现在返回list,因此您收到此错误:

AttributeError: 'list' object has no attribute 'write_pdf'

首先,当你看到它时,打印对象并检查对象是值得的,而且很可能你想要的是第一个对象:

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

感谢@NickBraunagel发表评论

答案 1 :(得分:5)

虽然我迟到了游戏,但以下全面的说明对于想要显示决策树输出的其他人来说非常有用:

安装必要的模块:

  1. 安装graphviz。我使用了conda的安装包here (推荐pip install graphvizpip安装不会 包括实际的GraphViz executables
  2. 通过pip(pydot
  3. 安装pip install pydot
  4. 将包含.exe文件(例如dot.exe)的graphviz文件夹目录添加到环境变量PATH
  5. 在上面运行EdChum(注意:graph是包含list对象的pydot.Dot
  6. 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)
    
    dot_data = StringIO() 
    tree.export_graphviz(clf, out_file=dot_data) 
    graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
    
    graph[0].write_pdf("iris.pdf")  # must access graph's first element
    

    现在,您将在环境的默认目录

    中找到“iris.pdf”

答案 2 :(得分:3)

我知道有四种绘制scikit学习决策树的方法:

  • 使用sklearn.tree.export_text方法打印树的文本表示形式
  • 使用sklearn.tree.plot_tree方法进行绘图(需要matplotlib
  • 使用sklearn.tree.export_graphviz方法绘制(需要graphviz
  • 使用dtreeviz包进行绘图(需要dtreevizgraphviz

最简单的是导出到文本表示形式。决策树示例如下所示:

|--- feature_2 <= 2.45
|   |--- class: 0
|--- feature_2 >  2.45
|   |--- feature_3 <= 1.75
|   |   |--- feature_2 <= 4.95
|   |   |   |--- feature_3 <= 1.65
|   |   |   |   |--- class: 1
|   |   |   |--- feature_3 >  1.65
|   |   |   |   |--- class: 2
|   |   |--- feature_2 >  4.95
|   |   |   |--- feature_3 <= 1.55
|   |   |   |   |--- class: 2
|   |   |   |--- feature_3 >  1.55
|   |   |   |   |--- feature_0 <= 6.95
|   |   |   |   |   |--- class: 1
|   |   |   |   |--- feature_0 >  6.95
|   |   |   |   |   |--- class: 2
|   |--- feature_3 >  1.75
|   |   |--- feature_2 <= 4.85
|   |   |   |--- feature_1 <= 3.10
|   |   |   |   |--- class: 2
|   |   |   |--- feature_1 >  3.10
|   |   |   |   |--- class: 1
|   |   |--- feature_2 >  4.85
|   |   |   |--- class: 2

然后,如果您安装了matplotlib,则可以使用sklearn.tree.plot_tree进行绘图:

tree.plot_tree(clf) # the clf is your decision tree model

示例输出类似于您将通过export_graphviz获得的输出: sklearn decision tree visualization

您也可以尝试dtreeviz软件包。它会为您提供更多信息。示例:

dtreeviz example decision tree

您可以在此博客文章link中找到sklearn决策树与代码段的不同可视化效果的比较。