Interpretación del árbol de decisiones en el contexto de las características importantes

9

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)

  1. Característica B (0.166800)

  2. Característica C (0.092472)

  3. Característica D (0.075009)

  4. CaracterísticaE (0.068310)

  5. CaracterísticaF (0.067118)

  6. CaracterísticaG (0.066510)

  7. Característica H (0.043502)

  8. Característica I (0.040281)

  9. Característica J (0.039006)

  10. FeatureK (0.032618)

  11. Característica L (0.008136)

  12. Característica M (0.000000)

Sin embargo, cuando miro la parte superior del árbol, se ve así:Fragmento de árbol

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"?

Tim Lindsey
fuente
1
¿Cuántas muestras se asignan a la izquierda y a la derecha del primer nodo?
oW_

Respuestas:

4

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, SkLearnpuede elegir dividir los nodos en el árbol de decisión de acuerdo con el criterio de ganancia de información de entropía (ver criteriony 'entropy'en SkLearn), 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 (ver feature_importances_en SkLearny aquí ).

Si tengo razón, SkLearnlo 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).

Paria
fuente
@OW_ ya ha dado una respuesta bastante correcta a la pregunta original, pero pensé que es bueno escribirla de una manera más concisa y lúcida para el lector.
Desterrado el
3

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.

oW_
fuente
2

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.

J_Heads
fuente
Entonces, en términos simples, suponiendo que solo haya 2 clasificaciones posibles (llamémoslas 0 y 1), la característica en la base del árbol será la que mejor divida las muestras en los 2 grupos (es decir, el mejor trabajo de división los 1 en un lado del árbol y los 0 en el otro). ¿Es eso exacto? Todavía no tengo totalmente claro qué importancia tiene la clasificación si no es la mejor para separar los ceros y los ceros en este contexto
Tim Lindsey
-2

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.

Hola Mundo
fuente
2
No creo que así se implemente en scikit-learn. Allí, la importancia de la característica se mide como "importancia de Gini", es decir, disminución total en la impureza del nodo ponderada por la proporción de muestras que llegan a ese nodo.
oW_
"La importancia de una característica se calcula como la reducción total (normalizada) del criterio aportado por esa característica. También se conoce como la importancia de Gini". - scikit-learn.org/stable/modules/generated/…
Afflatus