web-dev-qa-db-fra.com

Diagramme décisionnel, graphvizm pydotplus

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.

5
Jan Sila

Le problème est que vous définissez le paramètre out_file' toNone. If you look at the [documentation][1], if you set it atNoneit returns thestringfile directly and does not create a file. And of course astring` 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)
6
MMF

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")
2
Vadym Pasko

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 !! 

0
Jan Sila

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.

0
zongyan

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

0
K.S.