Python中Graphviz的输出问题
不多说,先上代码~
import sys from sklearn.datasets import load_iris from sklearn import tree from sklearn.externals.six import StringIO import pydotplus iris = load_iris() # 载入数据集 clf = tree.DecisionTreeClassifier() # 算法模型 clf = clf.fit(iris.data, iris.target) # 模型训练 dot_data = StringIO() tree.export_graphviz(clf, out_file=dot_data, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("iris1.pdf") # 写入pdf
运行完之后应该长这样:
----------------------------------------------------------------------------------------------------------------------------------------------正文开始--------------------------------------------------------------------------------------------------------------------------------------------------------
你以为这篇文章是在讲决策树Python的代码实现吗?那你就错了。
这是一篇解决Python中 “Graphviz图片输出” 出现问题的技术贴。我参考了各位大神的解决方案,不幸的是我在大神方案的最后一个plan里找到了我的问题,幸运的是因此我找到了几乎所有的解。
所有,当你遇见类似的问题,常规解法如下:
解1:
答案是这样的
简而言之就是,你可能安装了一个较新版本的python,所有旧的
import pydot 代码不适合了,这是你要做的很简单
要么 选择装个 pydotplus包 然后 import pydotplus
要么如下操作
import pydot iris = load_iris() # 载入数据集 clf = tree.DecisionTreeClassifier() # 算法模型 clf = clf.fit(iris.data, iris.target) # 模型训练 dot_data = StringIO() tree.export_graphviz(clf, out_file=dot_data, feature_names=iris.feature_names, class_names=iris.target_names, filled=True, rounded=True, special_characters=True) graph[0] = pydot.graph_from_dot_data(dot_data.getvalue()) graph.write_pdf("iris1.pdf") # 写入pdf
解2:
如果上面的操作无法解决,那么你不得不检查
1.graphviz软件你有没有下载,没有的话点下面的链接即可
http://www.graphviz.org/download/
下完软件记得 安装 graphviz包
解3:
如果这时候还没有解决问题,那八成是你的环境变量没有设好
如果还没有解决你的问题,那。。。
欢迎私信我,一起讨论
以上
参考
1. https://stackoverflow.com/questions/38176472/graph-write-pdfiris-pdf-attributeerror-list-object-has-no-attribute-writ
2. https://stackoverflow.com/questions/18438997/why-is-pydot-unable-to-find-graphvizs-executables-in-windows-8