Cómo construir bosques aleatorios en R (paso a paso)

Puedes opinar sobre este contenido:
  • 0
  • 0
  • 0
  • 0

Cuando la relación entre un conjunto de variables predictoras y una variable de respuesta es muy compleja, a menudo usamos métodos no lineales para modelar la relación entre ellas.

Uno de esos métodos es la construcción de un árbol de decisiones . Sin embargo, la desventaja de utilizar un único árbol de decisión es que tiende a sufrir una gran variación . Es decir, si dividimos el conjunto de datos en dos mitades y aplicamos el árbol de decisión a ambas mitades, los resultados podrían ser bastante diferentes.

Un método que podemos usar para reducir la varianza de un solo árbol de decisión es construir un modelo de bosque aleatorio , que funciona de la siguiente manera:

1. Tome b muestras de arranque del conjunto de datos original.

2. Construya un árbol de decisiones para cada muestra bootstrap.

  • Al construir el árbol, cada vez que se considera una división, solo una muestra aleatoria de m predictores se considera como candidatos de división del conjunto completo de p predictores. Por lo general, elegimos m para que sea igual a √ p .

3. Promedio de las predicciones de cada árbol para llegar a un modelo final.

Resulta que los bosques aleatorios tienden a producir modelos mucho más precisos en comparación con los árboles de decisión únicos e incluso los modelos en bolsas .

Este tutorial proporciona un ejemplo paso a paso de cómo crear un modelo de bosque aleatorio para un conjunto de datos en R.

Paso 1: cargue los paquetes necesarios

Primero, cargaremos los paquetes necesarios para este ejemplo. Para este ejemplo básico, solo necesitamos un paquete:

biblioteca (randomForest)

Paso 2: Ajustar el modelo de bosque aleatorio

Para este ejemplo, usaremos un conjunto de datos R integrado llamado airquality que contiene mediciones de la calidad del aire en Nueva York en 153 días individuales.

#ver la estructura del conjunto de datos de calidad del aire
str (calidad del aire)

'data.frame': 153 obs. de 6 variables:
 $ Ozono: int 41 36 12 18 NA 28 23 19 8 NA ...
 $ Solar.R: int 190118149313 NA NA 299 99 19194 ...
 $ Viento: núm 7,4 8 12,6 11,5 14,3 14,9 8,6 13,8 20,1 8,6 ...
 $ Temp: int 67 72 74 62 56 66 65 59 61 69 ...
 $ Mes: int 5 5 5 5 5 5 5 5 5 5 ...
 $ Día: int 1 2 3 4 5 6 7 8 9 10 ...

#find número de filas con valores perdidos
 suma (! completos . casos (airquality))

[1] 42

Este conjunto de datos tiene 42 filas con valores faltantes, por lo que antes de ajustar un modelo de bosque aleatorio, completaremos los valores faltantes en cada columna con las medianas de la columna:

#reemplazar NA con medianas de columna
 para (i en 1: ncol (calidad del aire)) {
  airquality [, i] [ es . na (calidad del aire [, i])] <- mediana (calidad del aire [, i], na . rm = VERDADERO )
}

Relacionado: Cómo imputar valores perdidos en R

El siguiente código muestra cómo ajustar un modelo de bosque aleatorio en R usando la función randomForest () del paquete randomForest .

#Haga que este ejemplo sea reproducible
 set.seed (1)

# ajustar el modelo de modelo de bosque aleatorio
 <- randomForest (
  fórmula = Ozono ~.,
  datos = calidad del aire
)

# mostrar modelo de modelo ajustado


Llamada:
 randomForest (fórmula = Ozono ~., datos = calidad del aire) 
               Tipo de bosque aleatorio: regresión
                     Número de árboles: 500
No. de variables probadas en cada división: 1

          Media de los residuos al cuadrado: 327,0914
                    % Var explicado: 61

# encontrar el número de árboles que producen el MSE de prueba más bajo
 which.min (modelo $ mse)

[1] 82

#find RMSE of best model
 sqrt (model $ mse [ which . min (model $ mse)])

[1] 17,64392

De la salida podemos ver que el modelo que produjo el error cuadrático medio (MSE) de prueba más bajo usó 82 árboles.

También podemos ver que la raíz del error cuadrático medio de ese modelo fue 17,64392 . Podemos pensar en esto como la diferencia promedio entre el valor predicho para el ozono y el valor observado real.

También podemos usar el siguiente código para producir un gráfico del MSE de prueba basado en el número de árboles usados:

# trazar la prueba MSE por número de árboles
 parcela (modelo)

Probar MSE por número de árboles en bosque aleatorio en R

Y podemos usar la función varImpPlot () para crear una gráfica que muestre la importancia de cada variable predictora en el modelo final:

#producir gráfico de importancia variable
varImpPlot (modelo) 

Bosque aleatorio en R

El eje x muestra el aumento promedio en la pureza del nodo de los árboles de regresión en función de la división de los diversos predictores que se muestran en el eje y.

En el gráfico podemos ver que el viento es la variable predictora más importante, seguida de cerca por la temperatura .

Paso 3: ajuste el modelo

De forma predeterminada, la función randomForest () usa 500 árboles y (predictores totales / 3) predictores seleccionados al azar como candidatos potenciales en cada división. Podemos ajustar estos parámetros usando la función tuneRF () .

El siguiente código muestra cómo encontrar el modelo óptimo utilizando las siguientes especificaciones:

  • ntree Try: el número de árboles que se van a construir.
  • mtryStart: el número inicial de variables predictoras a considerar en cada división.
  • stepFactor: El factor en el que se aumentará hasta que el error estimado fuera de la bolsa deje de mejorar en una cierta cantidad.
  • mejorar: la cantidad en la que el error fuera de la bolsa debe mejorar para seguir aumentando el factor de paso.
model_tuned <- tuneRF (
               x = calidad del aire [, - 1], #definir las variables predictoras 
               y = calidad del aire $ Ozono, 
               #definir la variable de respuesta ntree Try = 500 ,
               mtryStart = 4 ,
               stepFactor = 1.5 ,
               mejorar = 0.01 ,
               trace = FALSE # no muestra el progreso en tiempo real
               )

Esta función produce el siguiente gráfico, que muestra el número de predictores utilizados en cada división al construir los árboles en el eje xy el error estimado fuera de bolsa en el eje y:

Error OOB del modelo de bosque aleatorio en R

Podemos ver que el error OOB más bajo se logra mediante el uso de 2 predictores elegidos al azar en cada división al construir los árboles.

En realidad, esto coincide con el parámetro predeterminado (predictores totales / 3 = 6/3 = 2) utilizado por la función randomForest () inicial .

Paso 4: use el modelo final para hacer predicciones

Por último, podemos utilizar el modelo de bosque aleatorio ajustado para hacer predicciones sobre nuevas observaciones.

#definir nueva observación
 new <- data.frame (Solar.R = 150, Wind = 8, Temp = 70, Month = 5, Day = 5)

#utilice un modelo en bolsa ajustado para predecir el valor de ozono de la nueva predicción de observación
 (modelo, nuevos datos = nuevos)

27.19442

Basado en los valores de las variables predictoras, el modelo forestal aleatorio ajustado predice que el valor de Ozono será 27.19442 en este día en particular.

El código R completo utilizado en este ejemplo se puede encontrar aquí .

  • https://r-project.org
  • https://www.python.org/
  • https://www.stata.com/

Redactor del artículo

  • Luis Benites
    Director de Statologos.com

    Tengo una Maestría en Ciencias en Estadística Aplicada y he trabajado en algoritmos de aprendizaje automático para empresas profesionales tanto en el sector de la salud como en el comercio minorista.

    Ver todas las entradas

¿Te hemos ayudado?

Ayudanos ahora tú, dejanos un comentario de agradecimiento, nos ayuda a motivarnos y si te es viable puedes hacer una donación:

La ayuda no cuesta nada

Por otro lado te rogamos que compartas nuestro sitio con tus amigos, compañeros de clase y colegas, la educación de calidad y gratuita debe ser difundida, recuerdalo:

Deja un comentario

En estadística, a menudo nos interesa comprender cómo se relacionan dos variables entre sí. Por ejemplo, podríamos querer saber: ¿Cuál…
statologos comunidad-2

Compartimos información EXCLUSIVA y GRATUITA solo para suscriptores (cursos privados, programas, consejos y mucho más)

You have Successfully Subscribed!