有没有办法在scikit-learn中打印经过训练的决策树?我想为我的论文训练一个决策树,我想把树的图片放在论文中。这可能吗?
答案 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)
虽然我迟到了游戏,但以下全面的说明对于想要显示决策树输出的其他人来说非常有用:
安装必要的模块:
graphviz
。我使用了conda的安装包here
(推荐pip install graphviz
以pip
安装不会
包括实际的GraphViz executables)pydot
)pip install pydot
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
现在,您将在环境的默认目录
中找到“iris.pdf”答案 2 :(得分:3)
我知道有四种绘制scikit学习决策树的方法:
sklearn.tree.export_text
方法打印树的文本表示形式sklearn.tree.plot_tree
方法进行绘图(需要matplotlib
)sklearn.tree.export_graphviz
方法绘制(需要graphviz
)dtreeviz
包进行绘图(需要dtreeviz
和graphviz
)最简单的是导出到文本表示形式。决策树示例如下所示:
|--- 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
获得的输出:
您也可以尝试dtreeviz
软件包。它会为您提供更多信息。示例:
您可以在此博客文章link中找到sklearn决策树与代码段的不同可视化效果的比较。