Muy buenas, soy Luis y aquà les traigo otro nuevo artÃculo.
En este breve artÃculo explicamos cómo el paquete randomForest
R
 calcula la importancia de la caracterÃstica de permutación y cómo las etiquetas incorrectas en las gráficas de importancia de la caracterÃstica pueden generar confusión y malas interpretaciones.
Como bien sabrá, el paquete randomForest
implementa el algoritmo original introducido por L
. Breiman en el artÃculo seminal de 2001
.
Para calcular la importancia de la permutación uno tiene que entrenar el modelo con importance=TRUE
, no está activado de forma predeterminada debido a un costo computacional adicional.
model = randomForest(..., importance=TRUE)
La importancia de la variable se puede graficar con una función dedicada varImpPlot(model, type=1)
, dónde type=1
especifica la importancia de la permutación.
Salida varImpPlot
El eje x está etiquetado como "% IncMSE"
. Uno lo entenderÃa como un aumento porcentual del MSE (error cuadrático medio) fuera de la bolsa tras la permutación de cada caracterÃstica, como se señala en el artÃculo de Breiman.
Esto es no aunque el caso. Tras una inspección más cercana, la función varImpPlot
 usa otra función del mismo paquete, importance
. Esta función está bien documentada en el viñeta de bosque aleatorio y en lugar de "% IncMSE"
es lo siguiente:
- Si
scale=FALSE
se utiliza, el aumento en MSE se calcula por separado para cada árbol, usando la muestra fuera de la bolsa de cada árbol, pero solo para árboles que usan la caracterÃstica en cuestión (los árboles que no usan la caracterÃstica no tendrán aumento en MSE). El aumento en MSE luego se promedia sobre el subconjunto de árboles, dependiente de la caracterÃstica, y se devuelve. Primero, esta no es una medida relativa, sino un aumento absoluto de MSE. En segundo lugar, un aumento de MSE de árboles individuales será mucho mayor que un aumento de MSE para todo el bosque que promedia los árboles; - Si
scale=TRUE
, que es el valor predeterminado, el aumento promedio anterior en MSE sobre los árboles se divide por su desviación estándar (tomada sobre los árboles que usan la función). Este es un puntajeZ
, y eso es lo que se trazó arriba. Si el valor es14
, entonces el aumento absoluto promedio en MSE de árboles individuales es14
veces mayor que su desviación estándar.
Ambos métodos obtienen estadÃsticas de la degradación de MSE por permutación utilizando el conjunto de árboles para estimaciones individuales.
Pero, ninguno se puede traducir fácilmente a "% IncMSE"
de todo el modelo. Sin embargo, uno mismo puede producir fácilmente una importancia de caracterÃstica de permutación "% IncMSE"
con el código que se muestra a continuación.
Al entrenar el bosque, necesitamos mantener la información de las muestras dentro y fuera de la bolsa para cada árbol.
randomForset(..., keep.inbag=TRUE)
Entonces, necesitamos una función para hacer una predicción inmediata del bosque aleatorio dada la matriz de entrada X
.
Finalmente, para calcular la importancia de la permutación, necesitamos recorrer las caracterÃsticas, permutarlas, volver a calcular las MSE fuera de bolsa y compararlas con las MSE fuera de bolsa no permutadas.
A continuación, se muestra la ejecución de esa función en el mismo modelo de bosque. Tenga en cuenta cómo los valores de importancia son muy diferentes en comparación con el gráfico anterior.
Aumento porcentual en MSE fuera de bolsa del bosque aleatorio tras la permutación de caracterÃsticas.
Con modificaciones menores, también se puede adaptar la función anterior e imitar el cálculo de la importancia de la permutación de randomForest:
 que produce un diagrama análogo a lo que hace varImpPlot
:
Puntaje Z
del aumento de MSE
de los árboles forestales.
Resumen
Es una lástima que una etiqueta "% IncMSE"
tan engañosa haya estado presente en randomForest
, esencialmente desde siempre.
Es uno de los paquetes de aprendizaje automático más descargados disponibles en R
(consulte este artÃculo de kdnuggets
), pero lamentablemente no se encuentra en desarrollo activo.
En el campo del aprendizaje automático, los profesionales a menudo dependen de la precisión y corrección de los paquetes disponibles.
Pero incluso los códigos bien establecidos que se utilizaron miles de veces pueden contener problemas inesperados. ¡Nunca es mala idea implementar algunos conceptos simples uno mismo!
Espero que te haya sido de utilidad. Gracias por leer este artÃculo.
Añadir comentario