我正在尝试使用Python中的scikit-learn设计一个简单的决策树(我在Windows操作系统上使用Anaconda的Ipython Notebook和Python 2.7.3),并将其可视化如下:
from pandas import read_csv, DataFrame
from sklearn import tree
from os import system
data = read_csv('D:/training.csv')
Y = data.Y
X = data.ix[:,"X0":"X33"]
dtree = tree.DecisionTreeClassifier(criterion = "entropy")
dtree = dtree.fit(X, Y)
dotfile = open("D:/dtree2.dot", 'w')
dotfile = tree.export_graphviz(dtree, out_file = dotfile, feature_names = X.columns)
dotfile.close()
system("dot -Tpng D:.dot -o D:/dtree2.png")
但是,我收到以下错误:
AttributeError: 'NoneType' object has no attribute 'close'
我使用以下博客文章作为参考:Blogpost link
以下stackoverflow问题对我来说似乎也不起作用:Question
有人可以帮助我如何在scikit-learn中可视化决策树吗?
6 回答
sklearn.tree.export_graphviz不返回任何内容,因此默认返回
None
.通过执行
dotfile = tree.export_graphviz(...)
,您将覆盖之前已分配给dotfile
的打开文件对象,因此当您尝试关闭文件时会出现错误(因为它现在是None
) .要修复它,请将代码更改为
如果像我一样,你在安装graphviz时遇到问题,你可以通过它来显示树
用
export_graphviz
导出它,如前面的答案所示在文本编辑器中打开
.dot
文件复制一段代码并将其粘贴@ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
对于那些使用 jupyter 和sklearn(18.2)的人来说,这是一个班轮你甚至不需要
matplotlib
. 只有要求是graphviz比运行(根据问题X的代码是pandas DataFrame)
这将以SVG格式显示 . 上面的代码生成了Graphviz的Source对象(source_code - 不可怕),它将直接在jupyter中呈现 .
你可能会做的一些事情
在jupter中显示它:
保存为png:
获取png图像,保存并查看:
如果您打算使用该库,那么链接到examples和userguide
或者,您可以尝试使用pydot从dot生成png文件:
您可以复制export_graphviz文件的内容,并将其粘贴到webgraphviz.com站点中 .
您可以查看有关如何visualize the decision tree in Python with graphviz的文章以获取更多信息 .
如果您遇到直接抓取源.dot的问题,您也可以像这样使用
Source.from_file
: