paint-brush
Regresión de bosque aleatorio en R: código e interpretaciónpor@nikolao
64,084 lecturas
64,084 lecturas

Regresión de bosque aleatorio en R: código e interpretación

por Nikola O.1m2021/12/29
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Random forest es uno de los algoritmos más populares para múltiples tareas de aprendizaje automático. Esta historia analiza la regresión de bosque aleatorio en R, centrándose en comprender la salida y la importancia de la variable. El paquete con la implementación original se llama randomForest.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Regresión de bosque aleatorio en R: código e interpretación
Nikola O. HackerNoon profile picture


Random forest es uno de los algoritmos más populares para múltiples tareas de aprendizaje automático. Esta historia analiza la regresión de bosque aleatorio en R, centrándose en comprender la salida y la importancia de la variable.


Si prefiere el código de Python, aquí tiene.


Árboles de decisión y bosque aleatorio

Cuando los árboles de decisión aparecieron en escena en 1984 , eran mejores que la regresión múltiple clásica. Una de las razones es que los árboles de decisión son agradables a la vista. Las personas sin un título en estadística podrían interpretar fácilmente los resultados en forma de ramas.

Además, los árboles de decisión lo ayudan a evitar los efectos de sinergia de los predictores interdependientes en la regresión múltiple. El efecto de sinergia (interacción/moderación) es cuando un predictor depende de otro predictor. Aquí hay un buen ejemplo de un contexto empresarial.

Por otro lado, los árboles de regresión no son muy estables: un ligero cambio en el conjunto de entrenamiento podría significar un gran cambio en la estructura de todo el árbol. En pocas palabras, no son muy precisos.


Pero, ¿y si combinas varios árboles?


Los árboles de decisión creados aleatoriamente conforman un , un tipo de modelado de conjunto basado en la agregación de arranque, es decir, el embolsado . Primero, crea varios árboles de decisión en versiones de arranque de su conjunto de datos, es decir, muestreo aleatorio con reemplazo (vea la imagen a continuación). A continuación, agrega (por ejemplo, promedia) las predicciones individuales sobre los árboles de decisión en la predicción final del bosque aleatorio.


Tenga en cuenta que nos saltamos algunas observaciones, a saber, Estambul, París y Barcelona. Estas observaciones, es decir, filas, se denominan out-of-bag y se utilizan para la estimación del error de predicción.


Regresión de bosque aleatorio en R

Según la lista de paquetes de CRAN, las bibliotecas 63 R mencionan bosques aleatorios. Le recomiendo que revise las opciones, ya que van desde un bosque aleatorio basado en bayesiano hasta bibliotecas clínicas y ómicas específicas. Potencialmente, podría encontrar una regresión de bosque aleatorio que se ajuste mejor a su caso de uso que la versión original. Aún así, no lo usaría si no puede encontrar los detalles de cómo mejora exactamente la implementación de Breiman y Cutler. Si no tiene idea, es más seguro ir con el original: randomForest .


En cuanto al código, es bastante simple, por lo que me ceñiré al ejemplo de la documentación utilizando datos de Motor Trend de 1974 .


 ### Import libraries library(randomForest) library(ggplot2) set.seed(4543) data(mtcars) rf.fit <- randomForest(mpg ~ ., data=mtcars, ntree=1000, keep.forest=FALSE, importance=TRUE)


Me centraré específicamente en comprender el rendimiento y la importancia de las variables . Entonces, después de ejecutar el código anterior, podemos verificar los resultados simplemente ejecutando rf.fit .


 > rf.fit Call: randomForest(formula = mpg ~ ., data = mtcars, ntree = 1000, keep.forest = FALSE, importance = TRUE) Type of random forest: regression Number of trees: 1000 No. of variables tried at each split: 3 Mean of squared residuals: 5.587022 % Var explained: 84.12


Tenga en cuenta que la función ejecutó una regresión de bosque aleatoria y no necesitamos especificar eso. Realizará una regresión múltiple no lineal siempre que la variable de destino sea numérica (en este ejemplo, es Millas por galón - mpg ). Pero, si te hace sentir mejor, puedes agregar type= “regression”.


La media de los residuos cuadrados y el % de varianza explicado indican qué tan bien se ajusta el modelo a los datos. Los residuos son una diferencia entre la predicción y el valor real. En nuestro ejemplo, 5.6 significa que nos equivocamos en un promedio de 5.6 millas/galón. Si desea tener una comprensión profunda de cómo se calcula esto por árbol de decisión, mire .


Puede experimentar, es decir, aumentar o disminuir, el número de árboles ( ntree ) o el número de variables probadas en cada división ( mtry ) y ver si cambian los residuos o el % de varianza.

Si también desea comprender lo que ha aprendido el modelo, asegúrese de hacer importance = TRUE como en el código anterior.


La regresión de bosque aleatorio en R proporciona dos resultados: disminución del error cuadrático medio (MSE) y pureza del nodo. El error de predicción descrito como MSE se basa en la permutación de secciones de los datos fuera de la bolsa por árbol individual y predictor, y luego se promedian los errores. En el contexto de la regresión, la pureza del nodo es la disminución total en la suma residual de los cuadrados cuando se divide en una variable promediada entre todos los árboles (es decir, qué tan bien un predictor reduce la varianza). MSE es una medida más confiable de importancia variable. Si las dos métricas de importancia muestran resultados diferentes, escuche a MSE. Si todos sus predictores son numéricos, entonces no debería ser un gran problema; lea más aquí .


El varImpPlot() visualizará los resultados, pero podemos hacerlo mejor. Aquí, combinamos ambas medidas de importancia en una gráfica que enfatiza los resultados de MSE.


 ### Visualize variable importance ---------------------------------------------- # Get variable importance from the model fit ImpData <- as.data.frame(importance(rf.fit)) ImpData$Var.Names <- row.names(ImpData) ggplot(ImpData, aes(x=Var.Names, y=`%IncMSE`)) + geom_segment( aes(x=Var.Names, xend=Var.Names, y=0, yend=`%IncMSE`), color="skyblue") + geom_point(aes(size = IncNodePurity), color="blue", alpha=0.6) + theme_light() + coord_flip() + theme( legend.position="bottom", panel.grid.major.y = element_blank(), panel.border = element_blank(), axis.ticks.y = element_blank() ) 

Regresión de bosque aleatorio en R - Importancia variable

Conclusión

En términos de evaluación, siempre se trata de alguna teoría o lógica detrás de los datos. ¿Tienen sentido los principales predictores? Si no, investiga por qué.



“Roma no se construyó en un día, ni existió ningún modelo fiable”.

( Bueno y Hardin, 2012 )



El modelado es un proceso iterativo. Puede obtener una mejor idea sobre el error predictivo de su regresión de bosque aleatorio cuando guarda algunos datos solo para pruebas de rendimiento. También es posible que desee probar otros métodos .