提问者:小点点

Python决策树图


我试图用scikit learn实现一个决策树,然后用Graphviz可视化该树,我知道这是可视化DT的标准选择。我正在使用PyCharm、anaconda、Python 2.7和OS X El Capitan。据我所知,我已经用PIP安装了pydot和Graphviz,也直接在Pycharm中安装了它们,但无论我做什么,我都会不断得到一个“没有名为Graphviz的模块”。

from sklearn.datasets import load_iris
from sklearn import tree
#import graphviz as gv
# uncommenting the row above produces an error
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)
with open('graph.dot', 'w') as file:
    tree.export_graphviz(clf, out_file = file)
file.close()

此时运行此代码将生成图形。但我无法查看该文件。1.如何让graphviz存储库工作?2.如何将图形写入PDF/PNG?我看到了一些例子,但没有工作3。我找到了这个命令:dot-Tps filename。dot-o输出文件。ps我在哪里使用它?如何验证我的OS X上是否存在点实用程序?

提前谢谢!


共3个答案

匿名用户

我很确定我是用自制软件安装graphviz的,但看起来你也可以从http://www.graphviz.org/Download_macos.php.如果无法使pydot工作,则需要从终端运行dot命令,或者在脚本中使用子流程:

import subprocess
subprocess.call(['dot', '-Tpdf', 'tree.dot', '-o' 'tree.pdf'])

匿名用户

您还可以使用以下代码导出为pdf。

首先安装pydot2

pip install pydot2

然后可以使用以下代码:

from sklearn.datasets import load_iris
from sklearn import tree
clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)

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

匿名用户

如果系统上没有/不需要graphviz,也可以打开。点文件作为文本,并将内容复制到webgraphviz,然后webgraphviz将为您创建和显示树。

但是,结果并不是您可以保存的图片或文件,您必须为创建的每棵树手动执行此操作。对于更复杂的和/或批处理树构建,您需要系统上的实际graphviz,因此您可以从终端或直接从Python调用dot程序,如maxymoo所述。