绘制决策树,graphvizm pydotplus
Plotting decision tree, graphvizm pydotplus
我正在学习 scikit 文档中的决策树教程。
我有 pydotplus 2.0.2
但它告诉我它没有 write
方法 - 以下错误。我已经为此苦苦挣扎了一段时间,有什么想法吗?非常感谢!
from sklearn import tree
from sklearn.datasets import load_iris
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None)
import pydotplus
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
Image(graph.create_png())
我的错误是
/Users/air/anaconda/bin/python /Users/air/PycharmProjects/kiwi/hemr.py
Traceback (most recent call last):
File "/Users/air/PycharmProjects/kiwi/hemr.py", line 10, in <module>
dot_data = tree.export_graphviz(clf, out_file=None)
File "/Users/air/anaconda/lib/python2.7/site-packages/sklearn/tree/export.py", line 375, in export_graphviz
out_file.write('digraph Tree {\n')
AttributeError: 'NoneType' object has no attribute 'write'
Process finished with exit code 1
-----更新-----
使用 out_file
的修复程序会引发另一个错误:
Traceback (most recent call last):
File "/Users/air/PycharmProjects/kiwi/hemr.py", line 13, in <module>
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
File "/Users/air/anaconda/lib/python2.7/site-packages/pydotplus/graphviz.py", line 302, in graph_from_dot_data
return parser.parse_dot_data(data)
File "/Users/air/anaconda/lib/python2.7/site-packages/pydotplus/parser.py", line 548, in parse_dot_data
if data.startswith(codecs.BOM_UTF8):
AttributeError: 'NoneType' object has no attribute 'startswith'
---- 更新 2 -----
此外,请参阅下面我自己的答案,它解决了另一个问题
问题是您将参数 out_file
设置为 None
。
如果你看documentation,如果你把它设置在None
它returns直接string
文件而不创建文件。当然 string
没有 write
方法。
因此,请执行以下操作:
dot_data = tree.export_graphviz(clf)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
即使为 out_file
指定了正确的路径,方法 graph_from_dot_data()
对我也不起作用。
改为尝试使用 graph_from_dot_file
方法:
graph = pydotplus.graphviz.graph_from_dot_file("iris.dot")
另一个问题是我的 Graphviz 的 backend
设置!!很好解决here。您只需要查找该设置文件并更改后端,或者按照评论中的建议在代码 mpl.use("TkAgg")
中进行更改。在我只得到 pydotplot
找不到我的 Graphviz
可执行文件的错误之后,因此我通过自制软件重新安装了 Graphviz:brew install graphviz
这解决了这个问题,我现在可以绘图了!
今天早上我遇到了同样的错误。我使用 python 3.x 这是我解决问题的方法。
from sklearn import tree
from sklearn.datasets import load_iris
from IPython.display import Image
import io
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
# Let's give dot_data some space so it will not feel nervous any more
dot_data = io.StringIO()
tree.export_graphviz(clf, out_file=dot_data)
import pydotplus
graph = pydotplus.graphviz.graph_from_dot_data(dot_data.getvalue())
# make sure you have graphviz installed and set in path
Image(graph.create_png())
如果你使用python2.x,我相信你需要将"import io"改成:
import StringIO
并且
dot_data = StringIO.StringIO()
希望对您有所帮助。
真正帮助我解决问题的是:-
我从安装 graphviz 的同一用户执行了代码。所以从任何其他用户执行会给出你的错误
我建议避免使用 graphviz 并使用以下替代方法
from sklearn.tree import plot_tree
plt.figure(figsize=(60,30))
plot_tree(clf, filled=True);
我正在学习 scikit 文档中的决策树教程。
我有 pydotplus 2.0.2
但它告诉我它没有 write
方法 - 以下错误。我已经为此苦苦挣扎了一段时间,有什么想法吗?非常感谢!
from sklearn import tree
from sklearn.datasets import load_iris
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None)
import pydotplus
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
Image(graph.create_png())
我的错误是
/Users/air/anaconda/bin/python /Users/air/PycharmProjects/kiwi/hemr.py
Traceback (most recent call last):
File "/Users/air/PycharmProjects/kiwi/hemr.py", line 10, in <module>
dot_data = tree.export_graphviz(clf, out_file=None)
File "/Users/air/anaconda/lib/python2.7/site-packages/sklearn/tree/export.py", line 375, in export_graphviz
out_file.write('digraph Tree {\n')
AttributeError: 'NoneType' object has no attribute 'write'
Process finished with exit code 1
-----更新-----
使用 out_file
的修复程序会引发另一个错误:
Traceback (most recent call last):
File "/Users/air/PycharmProjects/kiwi/hemr.py", line 13, in <module>
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
File "/Users/air/anaconda/lib/python2.7/site-packages/pydotplus/graphviz.py", line 302, in graph_from_dot_data
return parser.parse_dot_data(data)
File "/Users/air/anaconda/lib/python2.7/site-packages/pydotplus/parser.py", line 548, in parse_dot_data
if data.startswith(codecs.BOM_UTF8):
AttributeError: 'NoneType' object has no attribute 'startswith'
---- 更新 2 -----
此外,请参阅下面我自己的答案,它解决了另一个问题
问题是您将参数 out_file
设置为 None
。
如果你看documentation,如果你把它设置在None
它returns直接string
文件而不创建文件。当然 string
没有 write
方法。
因此,请执行以下操作:
dot_data = tree.export_graphviz(clf)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
即使为 out_file
指定了正确的路径,方法 graph_from_dot_data()
对我也不起作用。
改为尝试使用 graph_from_dot_file
方法:
graph = pydotplus.graphviz.graph_from_dot_file("iris.dot")
另一个问题是我的 Graphviz 的 backend
设置!!很好解决here。您只需要查找该设置文件并更改后端,或者按照评论中的建议在代码 mpl.use("TkAgg")
中进行更改。在我只得到 pydotplot
找不到我的 Graphviz
可执行文件的错误之后,因此我通过自制软件重新安装了 Graphviz:brew install graphviz
这解决了这个问题,我现在可以绘图了!
今天早上我遇到了同样的错误。我使用 python 3.x 这是我解决问题的方法。
from sklearn import tree
from sklearn.datasets import load_iris
from IPython.display import Image
import io
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
# Let's give dot_data some space so it will not feel nervous any more
dot_data = io.StringIO()
tree.export_graphviz(clf, out_file=dot_data)
import pydotplus
graph = pydotplus.graphviz.graph_from_dot_data(dot_data.getvalue())
# make sure you have graphviz installed and set in path
Image(graph.create_png())
如果你使用python2.x,我相信你需要将"import io"改成:
import StringIO
并且
dot_data = StringIO.StringIO()
希望对您有所帮助。
真正帮助我解决问题的是:- 我从安装 graphviz 的同一用户执行了代码。所以从任何其他用户执行会给出你的错误
我建议避免使用 graphviz 并使用以下替代方法
from sklearn.tree import plot_tree
plt.figure(figsize=(60,30))
plot_tree(clf, filled=True);