scikit learn export_graphviz español decision python machine-learning scikit-learn decision-tree

python - export_graphviz - ¿Cómo encuentro los atributos en los que mi árbol se divide cuando se usa scikit-learn?



graphviz tree python (2)

Directamente de la documentación ( http://scikit-learn.org/0.12/modules/tree.html ):

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

StringIO módulo StringIO ya no es compatible con Python3, sino que importa el módulo io .

También está el atributo tree_ en su objeto de árbol de decisión, que permite el acceso directo a toda la estructura.

Y simplemente puedes leerlo

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

para más detalles mira el código fuente del método de exportación

En general, puede usar el módulo de inspect

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

para obtener todos los elementos del objeto

He estado explorando scikit-learn, haciendo árboles de decisión con criterios de división de entropía y gini, y explorando las diferencias.

Mi pregunta es, ¿cómo puedo "abrir el capó" y averiguar exactamente qué atributos están dividiendo los árboles en cada nivel, junto con sus valores de información asociados, para poder ver dónde los dos criterios hacen elecciones diferentes?

Hasta ahora, he explorado los 9 métodos descritos en la documentación. No parecen permitir el acceso a esta información. Pero seguramente esta información es accesible? Estoy imaginando una lista o dict que tiene entradas para nodo y ganancia.

Gracias por su ayuda y mis disculpas si me he perdido algo completamente obvio.


Si solo quieres ver rápidamente qué está pasando en el árbol, prueba:

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

donde X es el marco de datos de variables independientes y clf es el objeto del árbol de decisión. Observe que clf.tree_.children_left y clf.tree_.children_right juntos contienen el orden en que se hicieron las divisiones (cada una de estas correspondería a una flecha en la visualización gráfica).