Estoy tratando de entender cómo entender completamente el proceso de decisión de un modelo de clasificación de árbol de decisión construido con sklearn. Los dos aspectos principales que estoy viendo son una representación gráfica del árbol y la lista de características importantes. Lo que no entiendo es cómo se determina la importancia de la característica en el contexto del árbol. Por ejemplo, aquí está mi lista de características importantes:
Clasificación de características: 1. CaracterísticaA (0.300237)
Característica B (0.166800)
Característica C (0.092472)
Característica D (0.075009)
CaracterísticaE (0.068310)
CaracterísticaF (0.067118)
CaracterísticaG (0.066510)
Característica H (0.043502)
Característica I (0.040281)
Característica J (0.039006)
FeatureK (0.032618)
Característica L (0.008136)
Característica M (0.000000)
Sin embargo, cuando miro la parte superior del árbol, se ve así:
De hecho, algunas de las características que están clasificadas como "más importantes" no aparecen hasta mucho más abajo en el árbol, y la parte superior del árbol es FeatureJ, que es una de las características de menor clasificación. Mi ingenua suposición sería que las características más importantes se clasificarían cerca de la parte superior del árbol para tener el mayor impacto. Si eso es incorrecto, ¿qué es lo que hace que una característica sea "importante"?
fuente
Respuestas:
No es necesario que cuanto más importante sea una característica, mayor será su nodo en el árbol de decisión.
Esto se debe simplemente a que se pueden utilizar diferentes criterios (por ejemplo, impureza de Gini, ganancia de información de entropía, MSE, etc.) en cada uno de estos dos casos (división frente a importancia).
Por ejemplo,
SkLearn
puede elegir dividir los nodos en el árbol de decisión de acuerdo con el criterio de ganancia de información de entropía (vercriterion
y'entropy'
enSkLearn
), mientras que la importancia de las características viene dada por Gini Importance, que es la disminución media de Gini Impureza para una variable dada en todos los árboles del bosque aleatorio (verfeature_importances_
enSkLearn
y aquí ).Si tengo razón,
SkLearn
lo mismo se aplica incluso si elige dividir los nodos en el árbol de decisión de acuerdo con el criterio de impureza de Gini, mientras que la importancia de las características viene dada por Gini Importance porque Gini Impurity y Gini Importance no son idénticas (vea también esto y esto en Stackoverflow sobre la importancia de Gini).fuente
En scikit-learn, la importancia de la característica es la disminución de la impureza del nodo. La clave es que mide la importancia solo a nivel de nodo. Luego, todos los nodos son ponderados por la cantidad de muestras que llegan a ese nodo.
Entonces, si solo unas pocas muestras terminan en el nodo izquierdo después de la primera división, esto podría no significar que J es la característica más importante porque la ganancia en el nodo izquierdo podría afectar solo muy pocas muestras. Si además imprime el número de muestras en cada nodo, puede obtener una mejor idea de lo que está sucediendo.
fuente
El hecho de que un nodo esté más abajo en el árbol no significa necesariamente que sea menos importante. La importancia de la característica en sci-kitlearn se calcula por la forma en que un nodo separa las clases (índice de Gini). Notará incluso en su árbol cortado que A se divide tres veces en comparación con J una vez y los puntajes de entropía (una medida de pureza similar a Gini) son algo más altos en los nodos A que J.
Sin embargo, si solo pudieras elegir un nodo, elegirías J porque eso daría como resultado las mejores predicciones. Pero si tuviera la opción de tener muchos nodos tomando varias decisiones diferentes, A sería la mejor opción.
fuente
La importancia de la variable se mide por la disminución de la precisión del modelo cuando se elimina la variable. El nuevo árbol de decisión creado con el nuevo modelo sin la variable podría verse muy diferente al árbol original. La decisión de división en su diagrama se realiza al considerar todas las variables en el modelo.
Qué variable dividir en la raíz (y otros nodos) se mide por la impureza. La buena pureza (por ejemplo: todo en la rama izquierda tiene el mismo valor objetivo) no es garantía de una buena precisión. Sus datos pueden estar sesgados, su rama derecha tiene más respuestas que su rama izquierda. Por lo tanto, no es bueno solo clasificar correctamente la rama izquierda, también debemos considerar la rama derecha también. Por lo tanto, la variable de división puede o no ser una variable importante para la precisión general del modelo.
La importancia variable es una mejor medida para la selección de variables.
fuente