web-dev-qa-db-ja.com

graph.write_pdf( "iris.pdf")AttributeError: 'list'オブジェクトには属性 'write_pdf'がありません

私のコードはGoogleの機械学習のクラスに従っています。2つのコードは同じです。エラーが表示される理由はわかりません。変数のタイプがエラーかもしれませんが、Googleのコードは私と同じです。問題?

これはエラーです

[0 1 2]
[0 1 2]
Traceback (most recent call last):
  File "/media/joyce/oreo/python/machine_learn/VisualizingADecisionTree.py", line 34, in <module>
    graph.write_pdf("iris.pdf")
AttributeError: 'list' object has no attribute 'write_pdf'
[Finished in 0.4s with exit code 1]
[Shell_cmd: python -u "/media/joyce/oreo/python/machine_learn/VisualizingADecisionTree.py"]
[dir: /media/joyce/oreo/python/machine_learn]
[path: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games]

これはコードです

import numpy as np
from sklearn.datasets import load_iris
from sklearn import tree

iris = load_iris()
test_idx = [0, 50, 100]

# training data
train_target = np.delete(iris.target, test_idx)
train_data = np.delete(iris.data, test_idx, axis=0)

# testing data
test_target = iris.target[test_idx]
test_data = iris.data[test_idx]

clf = tree.DecisionTreeClassifier()
clf.fit(train_data, train_target)

print test_target
print clf.predict(test_data) 

# viz code
from sklearn.externals.six import StringIO
import pydot
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,
        impurity=False)

graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
43
乔守卿

pydot.graph_from_dot_data()はリストを返すので、試してください:

graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph[0].write_pdf("iris.pdf") 
24
Iliyan Bobev

新しいバージョンのpythonを使用していると思います。 pydotplusでお試しください。

import pydotplus
...
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")

これでうまくいくはずです。

62
avellable

私はまったく同じ問題を抱えていました。 graphvizをインストールしていないことが判明しました。それをやったら、動き始めました。

5
Deepak Rao

@Alex Sokolov、ウィンドウの場合、フォルダにダウンロードして/ 以下 を解凍し、 Windows環境変数のPATH を設定します。 pyコードを再実行してください。希望はあなたに役立ちます。

1
Jai

私はcondaを介してscikit-learnをインストールしますが、すべてはうまくいきません。まず、libtoolをインストールする必要があります

brew install libtool --universal

それから このsklearnガイド に従って、pythonファイルをこのコードに変更します

clf = clf.fit(train_data, train_target)
tree.export_graphviz(clf,out_file='tree.dot') 

最後にターミナルでPNGに変換します

dot -Tpng tree.dot -o tree.png
0
LE SANG

私はAnacondaを使用しています。私のために働いたものは次のとおりです:ターミナルから実行:

conda install python-graphviz
conda install pydot     ## don't forget this <-----------------

次に実行する

clf = clf.fit(train_data, train_target)
tree.export_graphviz(clf,out_file='tree.dot')

次に、ターミナルから:

dot -Tpng tree.dot -o tree.png
0
Martin

Python3.7では次のように動作しますが、Anacondaプロンプトを使用してpydotをインストールすることを忘れないでください。

   from sklearn.externals.six import StringIO
   import pydot

   # viz code
   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,
                 impurity=False)
   graph = pydot.graph_from_dot_data(dot_data.getvalue())
   graph[0].write_pdf('iris.pdf')
0
Egypt_bird

以前の回答を試してみたが、スクリプトの実行中にエラーが発生したため、pydotplus

import pydotplus

次を使用して「graphviz」をインストールします。

Sudo apt-get install graphviz

それは私のために働いた、と私は追加しました

graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")

前の貢献者に感謝します。