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óduloStringIO
ya no es compatible con Python3, sino que importa el móduloio
.
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).