webentwicklung-frage-antwort-db.com.de

graph.write_pdf ("iris.pdf") AttributeError: 'list'-Object hat kein Attribut' write_pdf '

Mein Code ist die Klasse des maschinellen Lernens von Google. Die beiden Codes sind gleich. Ich weiß nicht, warum es Fehler gibt. Möglicherweise ist der Typ der Variablen Fehler. Aber der Code von Google ist derselbe für mich Problem?

Das ist ein Fehler

[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]

Das ist Code

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() gibt eine Liste zurück, versuchen Sie es also:

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

Ich denke, Sie verwenden eine neuere Version von Python. Bitte versuchen Sie es mit pydotplus.

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

Das sollte es tun.

62
avellable

Ich hatte genau das gleiche Problem. Es stellte sich heraus, dass ich graphviz nicht installiert hatte. Sobald ich das tat, fing es an zu arbeiten. 

5
Deepak Rao

@Alex Sokolov, für meinen Fall in window habe ich heruntergeladen und installiert/entpacken das folgende in einen Ordner und dann den PATH in Windows-Umgebungsvariablen . den Py-Code erneut ausführen, funktioniert für mich. Hoffnung ist hilfreich für Sie.

1
Jai

Ich installiere scikit-learn via conda und alles über funktioniert nicht . Zuerst muss ich libtool installieren

brew install libtool --universal

Dann folge ich diesem Sklearn-Handbuch .__ und ändere dann die Python-Datei in diesen Code 

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

Zum Schluss in png im Terminal konvertieren

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

Ich benutze Anaconda. Folgendes hat bei mir funktioniert: Vom Terminal aus starten:

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

Dann renne

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

Dann vom Terminal:

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

Es funktioniert wie folgt auf Python3.7, aber vergessen Sie nicht, pydot mit Anaconda Prompt zu installieren:

   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

Ich habe die vorherigen Antworten ausprobiert und trotzdem eine Fehlermeldung beim Ausführen des Skripts erhalten. Deshalb habe ich nur pydotplus verwendet

import pydotplus

und installiere "graphviz" mit:

Sudo apt-get install graphviz

Dann hat es bei mir geklappt und ich habe hinzugefügt

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

Vielen Dank an die bisherigen Mitwirkenden.