Je suis le tutoriel pour l’arbre de décision sur scikit documentation. J'ai pydotplus 2.0.2
mais il me dit qu'il n'a pas de méthode write
- error ci-dessous. Je me bats depuis un moment avec ça, des idées, s'il vous plaît? Merci beaucoup!
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())
et mon erreur est
/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
----- METTRE À JOUR -----
En utilisant le correctif avec out_file
, une autre erreur est générée:
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 -----
Voir aussi ma réponse ci-dessous, qui résout un autre problème.
Le problème est que vous définissez le paramètre out_file' to
None.
If you look at the [documentation][1], if you set it at
Noneit returns the
stringfile directly and does not create a file. And of course a
string` n'a pas de méthode 'write'.
Par conséquent, procédez comme suit:
dot_data = tree.export_graphviz(clf)
graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
La méthode graph_from_dot_data()
n'a pas fonctionné pour moi, même après avoir spécifié le chemin correct pour out_file
.
Essayez plutôt d'utiliser la méthode graph_from_dot_file
:
graph = pydotplus.graphviz.graph_from_dot_file("iris.dot")
Un autre problème était également les paramètres backend
de mon Graphviz !! Il est résolu joliment ici . il vous suffit de rechercher ce fichier de paramètres et de modifier le serveur, ou dans le code mpl.use("TkAgg")
comme suggéré dans les commentaires. Après que j'ai seulement eu l'erreur que pydotplot
ne puisse pas trouver mon Graphviz
exécutable, j'ai donc réinstallé Graphviz via homebrew: brew install graphviz
qui a résolu le problème et je peux créer des tracés maintenant !!
J'ai rencontré la même erreur ce matin. J'utilise python 3.x et voici comment résoudre le problème.
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())
si vous utilisez Python 2.x, je pense que vous devez changer "import io" comme suit:
import StringIO
et,
dot_data = StringIO.StringIO()
J'espère que ça aide.
Ce qui m'a vraiment aidé à résoudre le problème était: - J'ai exécuté le code du même utilisateur via lequel graphviz a été installé. Donc exécuter à partir de n'importe quel autre utilisateur donnerait votre erreur