我正试图用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()
目前运行此代码会生成graph.dot,但我无法查看该文件。1.如何使graphviz存储库正常工作?2.如何将图形写入PDF/PNG?我看到了一些例子,但没有成功3.我找到了这个命令:dot-Tps文件名.dot-o outfile.ps我在哪里用的?如何验证我的OS X上是否存在dot实用程序?
提前感谢!
我很确定我使用自制软件安装了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,您也可以将.dot文件作为文本打开,并将内容复制到webgraphviz中,然后webgraphvi兹将为您创建和显示树。
不过,结果并不是你可以保存的图片或文件,你必须为你创建的每棵树手动保存。对于更复杂和/或批处理树构建,您需要系统上的实际graphviz,因此您可以从终端或直接从Python中调用dot
程序,如maxymoo所述。