Comment puis-je trouver les attributs sur lesquels mon arbre se divise, en utilisant scikit-learn?

j'ai exploré scikit-learn, pris des arbres de décision avec des critères d'entropie et de partage de gini, et exploré les différences.

ma question, Comment puis-je" ouvrir la hotte " et découvrir exactement sur quels attributs les arbres se divisent à chaque niveau, ainsi que leurs valeurs d'information associées, pour que je puisse voir où les deux critères font des choix différents?

jusqu'à présent, j'ai exploré le 9 méthodes décrites dans la documentation. Ils n'apparaissent pas pour permettre l'accès à cette information. Mais sûrement, cette information est accessible? J'envisage une liste ou un dict qui a des entrées pour le noeud et le gain.

Merci pour votre aide et mes excuses si j'ai manqué quelque chose de complètement évident.

33
demandé sur Matt O'Brien 2013-11-23 04:29:51

2 réponses

Directement à partir de la documentation ( http://scikit-learn.org/0.12/modules/tree.html ):

from io import StringIO
out = StringIO()
out = tree.export_graphviz(clf, out_file=out)

StringIO module n'est plus supporté en Python3, à la place import io module.

Il y a aussi le tree_ attribut dans votre objet d'arbre de décision, qui permet l'accès direct à l'ensemble de la structure.

Et vous pouvez simplement la lire

clf.tree_.children_left #array of left children
clf.tree_.children_right #array of right children
clf.tree_.feature #array of nodes splitting feature
clf.tree_.threshold #array of nodes splitting points
clf.tree_.value #array of nodes values

pour plus de détails, regardez le code source de la méthode d'exportation

En général, vous pouvez utiliser le inspect module

from inspect import getmembers
print( getmembers( clf.tree_ ) )

pour obtenir tous les éléments de l'objet

Decision tree visualization from sklearn docs

26
répondu lejlot 2018-07-12 18:54:24

Si vous voulez juste un rapide coup d'oeil à ce qui se passe dans l'arbre, à essayer:

zip(X.columns[clf.tree_.feature], clf.tree_.threshold, clf.tree_.children_left, clf.tree_.children_right)

où X est la base de données des variables indépendantes et clf est l'objet de l'arbre de décision. Notez que clf.tree_.children_left et clf.tree_.children_right contenant l'ordre que les fractionnements ont été faites (chacun de ces correspondrait à une flèche dans la graphviz visualisation).

9
répondu Daniel Gibson 2015-11-23 23:19:12