Mon code suit la classe d’apprentissage automatique de Google. Les deux codes sont identiques. Je ne sais pas pourquoi il affiche une erreur. problème?
C'est une erreur
[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]
C'est le 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")
pydot.graph_from_dot_data()
renvoie une liste, alors essayez:
graph = pydot.graph_from_dot_data(dot_data.getvalue())
graph[0].write_pdf("iris.pdf")
Je pense que vous utilisez une version plus récente de python. S'il vous plaît essayer avec pydotplus.
import pydotplus
...
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
Cela devrait le faire.
J'ai eu exactement le même problème. Il s'est avéré que je n'avais pas installé graphviz. Une fois que j'ai fait ça, ça a commencé à marcher.
@ Alex Sokolov, pour mon cas dans window, j'ai téléchargé et installé/décompressez le suivant dans un dossier, puis configurez le PATH dans les variables d'environnement Windows . re-exécuter le code py fonctionne pour moi. l'espoir vous est utile.
J'installe scikit-learn via conda et tout ne marche pas . Tout d'abord, je dois installer libtool
brew install libtool --universal
Puis je suis ce guide sklearn Puis changez le fichier python en ce code
clf = clf.fit(train_data, train_target)
tree.export_graphviz(clf,out_file='tree.dot')
Enfin convertir au format png dans le terminal
dot -Tpng tree.dot -o tree.png
Cela fonctionne comme suit sur Python3.7 mais n'oubliez pas d'installer pydot en utilisant Anaconda Prompt:
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')
J'ai essayé les réponses précédentes et j'ai toujours une erreur lors de l'exécution du script. Par conséquent, Je viens d'utiliser pydotplus
import pydotplus
et installez le "graphviz" en utilisant:
Sudo apt-get install graphviz
Ensuite, cela a fonctionné pour moi et j'ai ajouté
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_pdf("iris.pdf")
Merci aux contributeurs précédents.