web-dev-qa-db-fra.com

Est-il possible d'imprimer l'arbre de décision dans scikit-learn?

Existe-t-il un moyen d'imprimer un arbre de décision formé dans scikit-learn? Je veux former un arbre de décision pour ma thèse et je veux mettre la photo de l'arbre dans la thèse. Est-ce possible?

14
Jack Twain

Il existe une méthode pour exporter au format graph_viz: http://scikit-learn.org/stable/modules/generated/sklearn.tree.export_graphviz.html

Donc, à partir des documents en ligne:

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>>
>>> clf = tree.DecisionTreeClassifier()
>>> iris = load_iris()
>>>
>>> clf = clf.fit(iris.data, iris.target)
>>> tree.export_graphviz(clf,
...     out_file='tree.dot')    

Ensuite, vous pouvez le charger en utilisant graph viz, ou si vous avez installé pydot, vous pouvez le faire plus directement: http://scikit-learn.org/stable/modules/tree.html

>>> from sklearn.externals.six import StringIO  
>>> import pydot 
>>> dot_data = StringIO() 
>>> tree.export_graphviz(clf, out_file=dot_data) 
>>> graph = pydot.graph_from_dot_data(dot_data.getvalue()) 
>>> graph.write_pdf("iris.pdf") 

Produira un svg, ne peut pas l'afficher ici, vous devrez donc suivre le lien: http://scikit-learn.org/stable/_images/iris.svg

Mise à jour

Il semble qu'il y ait eu un changement dans le comportement depuis que j'ai répondu à cette question pour la première fois et il renvoie maintenant un list et donc vous obtenez cette erreur:

AttributeError: 'list' object has no attribute 'write_pdf'

Tout d'abord, lorsque vous voyez cela, cela vaut la peine d'imprimer l'objet et de l'inspecter, et le plus probable ce que vous voulez est le premier objet:

graph[0].write_pdf("iris.pdf")

Merci à @NickBraunagel pour le commentaire

15
EdChum

Bien que je sois en retard dans le jeu, les instructions complètes ci-dessous pourraient être utiles pour ceux qui souhaitent afficher la sortie de l'arbre de décision:

Installez les modules nécessaires:

  1. installez graphviz. J'ai utilisé le package d'installation de conda ici (recommandé sur pip install graphviz as pip install n'inclut pas le GraphViz réel exécutables )
  2. installez pydot via pip (pip install pydot)
  3. Ajoutez le répertoire du dossier graphviz contenant les fichiers .exe (par exemple dot.exe) à votre variable d'environnement PATH
  4. exécutez EdChum ci-dessus (REMARQUE: graph est un list contenant le pydot.Dot objet):

from sklearn.datasets import load_iris
from sklearn import tree
from sklearn.externals.six import StringIO  
import pydot 

clf = tree.DecisionTreeClassifier()
iris = load_iris()
clf = clf.fit(iris.data, iris.target)

dot_data = StringIO() 
tree.export_graphviz(clf, out_file=dot_data) 
graph = pydot.graph_from_dot_data(dot_data.getvalue()) 

graph[0].write_pdf("iris.pdf")  # must access graph's first element

Vous trouverez maintenant le "iris.pdf" dans le répertoire par défaut de votre environnement

6
NickBraunagel