7 votos

Cómo entender la salida de RandomForestExplainer (paquete R)

Tengo el siguiente código, que básicamente trata de predecir el Species de iris datos utilizando randomForest . Lo que realmente me interesa es encontrar cuáles son las mejores características (variables) que explican la clasificación de las especies. He encontrado el paquete randomForestExplainer es el mejor para servir al propósito.

library(randomForest)
library(randomForestExplainer)
forest <- randomForest::randomForest(Species ~ ., data = iris, localImp = TRUE)
importance_frame <- randomForestExplainer::measure_importance(forest)
randomForestExplainer::plot_multi_way_importance(importance_frame, size_measure = "no_of_nodes")

El resultado del código produce este gráfico:

enter image description here

Basándose en el gráfico, el factor clave para explicar por qué Pétalo.Longitud y Pétalo.Anchura es el mejor factor son estos (la explicación se basa en el viñeta ):

  1. mean_min_depth - profundidad mínima media calculada de una de las tres maneras especificadas por el parámetro mean_sample,
  2. times_a_root - número total de árboles en los que se utiliza Xj para dividir el nodo raíz (es decir, toda la muestra se divide en dos en función del valor de Xj),
  3. no_of_nodes - número total de nodos que utilizan Xj para la división (suele ser igual a no_of_trees si los árboles son poco profundos),

No me queda del todo claro por qué el alto times_a_root y no_of_nodes ¿es mejor? Y bajo mean_min_depth ¿es mejor?

¿Cuál es la explicación intuitiva para ello?

El viñeta la información no ayuda.

6voto

mkt Puntos 688

En cada nodo, se evalúa un subconjunto del conjunto completo de predictores para determinar su fuerza de asociación con la variable dependiente. La fuerza de la asociación puede medirse utilizando un coeficiente de correlación, o alguna otra métrica (necesaria si hay predictores categóricos o continuos). El predictor más fuertemente asociado se utiliza entonces para dividir los datos.

Esto implica que las variables que aparecen más cerca de la raíz son más importantes, en el sentido de que están más fuertemente asociadas con la variable dependiente en cada uno de los subconjuntos de datos del bootstrap. times_a_root y el mean_min_depth son formas directas de medir la importancia en este sentido: una variable que está más cerca de la raíz, o que en promedio ocurre más cerca de la raíz, es una que está fuertemente asociada con la variable dependiente.

no_of_nodes es distinta de las otras dos. Imagine que la variable dependiente es una función sinusoidal fuerte de un predictor. El predictor no aparecerá necesariamente como importante en las dos métricas anteriores debido a la falta de una clara tendencia/dirección/pendiente lineal no nula en un gráfico bivariante. Sin embargo, los árboles empezarán a dividirse en este predictor y continuarán dividiéndose en él un gran número de veces para aproximarse a la función sinusoidal. no_of_nodes captará la importancia de éste y (sospecho) de otros predictores no lineales (sin una tendencia/dirección clara/pendiente lineal no nula) mejor que las métricas anteriores.

Dicho esto, creo que accuracy_decrease (para la clasificación) y mse_increase (para la regresión) son métricas de importancia mucho mejores que el resto. Miden la disminución del rendimiento predictivo del bosque si se permuta un predictor concreto. Los predictores correlacionados influirán en esto, pero también afectarán a las otras métricas de importancia. Y la importancia de esto depende de los objetivos del análisis.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X