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

Jac*_*ain 14 python scikit-learn

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

EdC*_*ica 15

有一种方法可以导出为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')    
Run Code Online (Sandbox Code Playgroud)

然后你可以使用graph viz加载它,或者如果你安装了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") 
Run Code Online (Sandbox Code Playgroud)

将生成一个svg,无法在此显示,所以你必须按照链接:http://scikit-learn.org/stable/_images/iris.svg

更新

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

AttributeError: 'list' object has no attribute 'write_pdf'
Run Code Online (Sandbox Code Playgroud)

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

graph[0].write_pdf("iris.pdf")
Run Code Online (Sandbox Code Playgroud)

感谢@NickBraunagel的评论

  • 我收到这个错误.`AttributeError:'list'对象没有属性'write_pdf'`如何解决这个问题? (7认同)

Nic*_*gel 6

尽管我迟到了,但是下面的综合说明对于想要显示决策树输出的其他人可能会有用:

安装必要的模块:

  1. 安装graphviz。我用畅达的安装包在这里 (建议在pip install graphvizpip安装不包括实际GraphViz的可执行文件
  2. pydot通过pip(pip install pydot)安装
  3. 将包含.exe文件(例如dot.exe)的graphviz文件夹目录添加到环境变量PATH中
  4. 运行上面的EdChum(注意:graph是一个list包含pydot.Dot对象的对象):

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
Run Code Online (Sandbox Code Playgroud)

现在,您将在环境的默认目录中找到“ iris.pdf”


ppl*_*ski 5

我知道有 4 种绘制 scikit-learn 决策树的方法:

  • 使用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
Run Code Online (Sandbox Code Playgroud)

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

|--- 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
Run Code Online (Sandbox Code Playgroud)

示例输出类似于您将获得的输出export_graphvizsklearn决策树可视化

你也可以试试dtreeviz包。它会给你更多的信息。这个例子:

dtreeviz 示例决策树

您可以在此博客文章中找到 sklearn 决策树的不同可视化与代码片段的比较:链接