2016-07-04 8 views
33

Mein Code folgt der Klasse des maschinellen Lernens von Google. Die zwei Codes sind gleich. Ich weiß nicht warum show error.May der Typ der Variablen ist der Fehler. Aber Googles Code ist für mich gleich. Wer hatte dieses Problem jemals?graph.write_pdf ("iris.pdf") AttributeError: 'list' Objekt hat kein Attribut 'write_pdf'

Dies ist 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] 

Dieser 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") 

Antwort

53

ist glaube ich Ihnen neuere Version von Python verwenden. Bitte versuchen Sie es mit pydotplus.

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

Dies sollte es tun.

+0

Vielen Dank sehr sehr !!!! Diese Methode löste mein Problem. –

+3

Ich hatte gerade einen Blick. Das Diagramm ist eine Liste und es enthält ein pydot.Dot-Objekt. Ich benutze das Pydot.Dot-Objekt Aufruf der Funktion write_pdf ("iris.pdf"), es löst auch die Frage. –

+0

@ 乔守卿 Welche Syntax haben Sie verwendet/wie haben Sie pydot.Dot verwendet? – programmer

16

pydot.graph_from_dot_data() gibt eine Liste, so versuchen:

graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
graph[0].write_pdf("iris.pdf") 
+1

Danke für die Antwort. Einfach genug Lösung, ohne die Mühe von pydotplus gehen zu müssen – maheeka

+0

Das funktioniert für mich. Vielen Dank! –

0

I Scikit-Learn über Conda und alle über nicht funktionieren installieren. Erstens muss ich libtool

brew install libtool --universal 

installieren Dann folge ich this sklearn guide Dann die Python-Datei

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

schließlich in Terminal

dot -Tpng tree.dot -o tree.png 
0
import pydotplus 
... 
graph = pydotplus.graph_from_dot_data(dot_data.getvalue()) 
graph.write_pdf("iris.pdf") 
zu png konvertieren zu diesem Code ändern

Ich habe Python 3.6.0 | Anaconda 4.3.1 und bekomme Fehler:

File "C:\Anaconda\lib\site-packages\pydotplus\graphviz.py", line 1960, in create 'GraphViz\'s executables not found')

InvocationException: GraphViz's executables not found

+1

Sie sollten zuerst GraphViz von hier installieren (http://www.graphviz.org/Download..php) und dann sein "bin" Verzeichnis mit ausführbaren Dateien hinzufügen (c: \ Programme (x86) \ Graphviz2.38 \ bin) zum PFAD Ihres Computers. –

3

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

Verwandte Themen