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'
----UPDATE 2-----
また、別の問題を解決する以下の私の独自の答え
問題は、パラメータout_file
をNone
に設定していることです。
documentation を見ると、None
に設定すると、string
ファイルが直接返され、ファイルは作成されません。そしてもちろん、string
にはwrite
メソッドがありません。
したがって、次のようにします。
dot_data = tree.export_graphviz(clf)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
メソッドgraph_from_dot_data()
は、out_file
に適切なパスを指定した後でも機能しませんでした。
代わりにgraph_from_dot_file
メソッドを使用してみてください:
graph = pydotplus.graphviz.graph_from_dot_file("iris.dot")
今朝も同じエラーに出会った。私は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())
python 2.xを使用する場合、 "import io"を次のように変更する必要があると思います。
import StringIO
そして、
dot_data = StringIO.StringIO()
それが役に立てば幸い。
また、別の問題は、Graphvizのbackend
設定でした。それはうまく解決されます here 。コメントで提案されているように、その設定ファイルを検索してバックエンドを変更するか、コードmpl.use("TkAgg")
で変更するだけです。 pydotplot
がGraphviz
実行可能ファイルを見つけられなかったというエラーが発生した後、自作のGraphvizを再インストールしました:brew install graphviz
問題を解決し、私は今プロットを作ることができます!!
問題の解決に本当に役立ったのは、次のとおりです。-graphvizがインストールされたのと同じユーザーからコードを実行しました。したがって、他のユーザーから実行するとエラーが発生します