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?
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
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:
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 )pydot
via pip (pip install pydot
)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