Cómo realizar una validación cruzada para el rendimiento del modelo en R

Actualizado por ultima vez el 7 de mayo de 2021, por .

En estadística, a menudo construimos modelos por dos razones:

  • Comprender la relación entre una o más variables predictoras y una variable de respuesta.
  • Utilizar un modelo para predecir observaciones futuras.

La validación cruzada es útil para estimar qué tan bien un modelo puede predecir observaciones futuras.

Por ejemplo, podemos construir un modelo de regresión lineal múltiple que use la edad y los ingresos como variables predictoras y el estado de incumplimiento del préstamo como variable de respuesta.En este caso, es posible que deseemos ajustar el modelo a un conjunto de datos y luego usar ese modelo para predecir, en función de los ingresos y la edad de un nuevo solicitante, la probabilidad de que no pague un préstamo.

Para determinar si el modelo tiene una gran capacidad de predicción, necesitamos usar el modelo para hacer predicciones sobre datos que no ha visto antes. Esto nos permitirá estimar el error de predicción del modelo.

Uso de la validación cruzada para estimar el error de predicción

La validación cruzada se refiere a diferentes formas en las que podemos estimar el error de predicción.El enfoque general de la validación cruzada es el siguiente:

1. Aparte una cierta cantidad de observaciones en el conjunto de datos, típicamente entre el 15 y el 25% de todas las observaciones.
2. Ajustar (o “entrenar”) el modelo en las observaciones que mantenemos en el conjunto de datos.
3. Pruebe qué tan bien el modelo puede hacer predicciones sobre las observaciones que no usamos para entrenar el modelo.

Medir la calidad de un modelo

Cuando usamos el modelo ajustado para hacer predicciones sobre nuevas observaciones, podemos usar varias métricas diferentes para medir la calidad del modelo, que incluyen:

R cuadrado múltiple: mide la fuerza de la relación lineal entre las variables predictoras y la variable de respuesta. Un múltiplo R-cuadrado de 1 indica una relación lineal perfecta, mientras que un múltiplo R-cuadrado de 0 indica que no hay relación lineal alguna. Cuanto mayor sea el múltiplo R-cuadrado, mejor serán las variables predictoras capaces de predecir la variable de respuesta.

Error cuadrático medio (RMSE): mide el error de predicción promedio realizado por el modelo al predecir el valor de una nueva observación. Esta es la distancia promedio entre el valor real de una observación y el valor predicho por el modelo. Los valores más bajos de RMSE indican un mejor ajuste del modelo.

Error absoluto medio (MAE): esta es la diferencia absoluta media entre el valor real de una observación y el valor predicho por el modelo.Esta métrica es generalmente menos sensible a valores atípicos en comparación con RMSE. Los valores más bajos de MAE indican un mejor ajuste del modelo.

Implementación de cuatro técnicas diferentes de validación cruzada en R

A continuación, explicaremos cómo implementar las siguientes técnicas de validación cruzada en R:

1. Enfoque de conjunto de validación
2. Validación cruzada de k veces
3. Validación cruzada de dejar uno fuera 4. Validación cruzada repetida de k veces

Para ilustrar cómo usar estas diferentes técnicas, usaremos un subconjunto del conjunto de datos R integrado mtcars :

#define los datos del conjunto de
 datos <- mtcars [, c ("mpg", "disp", "hp", "drat")]

#ver las primeras seis filas del nuevo
 encabezado de datos (datos)

# mpg disp hp drat
# Mazda RX4 21.0 160110 3.90
# Mazda RX4 Wag 21.0 160110 3.90
# Datsun 710 22,8 108 93 3,85
#Hornet 4 Unidad 21,4 258110 3,08
#Hornet Sport sobre 18,7 360175 3,15
#Valiente 18.1 225105 2.76

Construiremos un modelo de regresión lineal múltiple usando disp , hp y drat como variables predictoras y mpg como variable de respuesta.

Enfoque de conjunto de validación

El enfoque del conjunto de validación funciona de la siguiente manera:

1. Divida los datos en dos conjuntos: uno se utiliza para entrenar el modelo (es decir, estimar los parámetros del modelo) y el otro conjunto se utiliza para probar el modelo. Normalmente, el conjunto de entrenamiento se genera mediante la selección aleatoria del 70-80% de los datos, y el otro 20-30% restante de los datos se utiliza como conjunto de prueba.

2. Cree el modelo utilizando el conjunto de datos de entrenamiento.
3. Utilice el modelo para hacer predicciones sobre los datos del conjunto de prueba.
4. Mida la calidad del modelo utilizando métricas como R-cuadrado, RMSE y MAE.

Ejemplo:

El siguiente ejemplo utiliza el conjunto de datos que definimos anteriormente. Primero, dividimos los datos en
un conjunto de entrenamiento y un conjunto de prueba, usando el 80% de los datos como el conjunto de entrenamiento y el 20% restante de los datos como el conjunto de prueba. A continuación, construimos el modelo utilizando el conjunto de entrenamiento. Luego, usamos el modelo para hacer predicciones en el conjunto de prueba. Por último, medimos la calidad del modelo utilizando R-cuadrado, RMSE y MAE.

#cargar biblioteca dplyr utilizada para la biblioteca de manipulación de datos
 (dplyr)

#cargar biblioteca de signos de intercalación utilizada para dividir datos en la biblioteca de conjuntos de prueba y entrenamiento
 (intercalación)

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

#define los datos del conjunto de
 datos <- mtcars [, c ("mpg", "disp", "hp", "drat")]

#dividir el conjunto de datos en un conjunto de entrenamiento (80%) y un conjunto de prueba (20%).
training_obs <- data $ mpg%>% createDataPartition (p = 0.8, list = FALSE)

entrenar <- datos [training_obs,]
prueba <- datos [-training_obs,]

# Construya el modelo de regresión lineal en el modelo de conjunto de entrenamiento
 <- lm (mpg ~., Data = train)

# Use el modelo para hacer predicciones en el conjunto de prueba
 predicciones <- model%>% predict (test)

# Examinar R-cuadrado, RMSE y MAE de predicciones
 data.frame (R_squared = R2 (predicciones, prueba $ mpg),
           RMSE = RMSE (predicciones, prueba $ mpg),
           MAE = MAE (predicciones, prueba $ mpg))

# R_squared RMSE MAE
# 1 0.9213066 1.876038 1.66614

Al comparar diferentes modelos, el que produce el RMSE más bajo en el conjunto de prueba es el modelo preferido.

Pros y contras de este enfoque

La ventaja del enfoque del conjunto de validación es que es sencillo y computacionalmente eficiente. La desventaja es que el modelo se construye solo con una parte de los datos totales. Si los datos que dejamos fuera del conjunto de entrenamiento contienen información interesante o valiosa, el modelo no lo tendrá en cuenta.

Enfoque de validación cruzada de k-fold

El enfoque de validación cruzada de k-fold funciona de la siguiente manera:

1. Divida aleatoriamente los datos en k «pliegues» o subconjuntos (por ejemplo, 5 o 10 subconjuntos).
2. Entrene el modelo con todos los datos, dejando solo un subconjunto.
3. Utilice el modelo para hacer predicciones sobre los datos del subconjunto que quedó fuera.
4. Repita este proceso hasta que cada uno de los k subconjuntos se haya utilizado como conjunto de prueba.
5 . Mida la calidad del modelo calculando el promedio de los k errores de prueba. Esto se conoce
como error de validación cruzada.

Ejemplo

En este ejemplo, primero dividimos los datos en 5 subconjuntos. Luego, ajustamos el modelo usando todos los datos excepto un subconjunto. A continuación, usamos el modelo para hacer predicciones sobre el subconjunto que quedó fuera y registramos el error de prueba (usando R-cuadrado, RMSE y MAE). Nos repetimos este proceso hasta que cada subconjunto se ha utilizado como el equipo de prueba. Luego, simplemente calculamos el promedio de los 5 errores de prueba .

#cargar biblioteca dplyr utilizada para la biblioteca de manipulación de datos
 (dplyr)

#cargar biblioteca de signos de intercalación utilizada para dividir datos en la biblioteca de conjuntos de prueba y entrenamiento
 (intercalación)

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

#define los datos del conjunto de
 datos <- mtcars [, c ("mpg", "disp", "hp", "drat")]

#define el número de subconjuntos (o "pliegues") para usar
 train_control <- trainControl (método = "cv", número = 5)

#train the model
 model <- train (mpg ~., data = data, method = "lm", trControl = train_control)

# Resumir la impresión de resultados
 (modelo)

# Regresión lineal 
#
# 32 muestras
# 3 predictor
#
# Sin preprocesamiento
#Rampling: Validación cruzada (5 veces) 
# Resumen de tamaños de muestra: 26, 25, 26, 25, 26 
#Resultados de muestreo:
#
# RMSE Rsquared MAE     
# 3.095501 0.7661981 2.467427
#
# El parámetro de ajuste 'intercepción' se mantuvo constante en un valor de TRUE

Pros y contras de este enfoque

La ventaja del enfoque de validación cruzada de k-fold sobre el enfoque del conjunto de validación es que construye el modelo varias veces diferentes utilizando diferentes fragmentos de datos cada vez, por lo que no tenemos ninguna posibilidad de omitir datos importantes al construir el modelo.

La parte subjetiva de este enfoque es elegir qué valor usar para k, es decir, en cuántos subconjuntos dividir los datos. En general, los valores más bajos de k conducen a un mayor sesgo pero una menor variabilidad, mientras que los valores más altos de k conducen a un menor sesgo pero a una mayor variabilidad.

En la práctica, k se elige típicamente para que sea 5 o 10, ya que este número de subconjuntos tiende a evitar demasiado sesgo y demasiada variabilidad simultáneamente.

Enfoque de validación cruzada de exclusión (LOOCV)

El enfoque LOOCV funciona de la siguiente manera:

1. Construya el modelo usando todas las observaciones del conjunto de datos excepto una.
2. Utilice el modelo para predecir el valor de la observación que falta. Registre el error de prueba de esta predicción.
3. Repita este proceso para cada observación del conjunto de datos.
4. Mida la calidad del modelo calculando el promedio de todos los errores de predicción.

Ejemplo

El siguiente ejemplo ilustra cómo usar perform LOOCV para el mismo conjunto de datos que usamos en los ejemplos anteriores:

#cargar biblioteca dplyr utilizada para la biblioteca de manipulación de datos
 (dplyr)

#cargar biblioteca de signos de intercalación utilizada para dividir datos en la biblioteca de conjuntos de prueba y entrenamiento
 (intercalación)

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

#define los datos del conjunto de
 datos <- mtcars [, c ("mpg", "disp", "hp", "drat")]

#especificar que queremos usar LOOCV
 train_control <- trainControl ( method = "LOOCV" )

#train the model
 model <- train (mpg ~., data = data, method = "lm", trControl = train_control)

#resume la impresión de resultados
 (modelo)

# Regresión lineal 
#
# 32 muestras
# 3 predictor
#
# Sin preprocesamiento
#Resmuestreo: Validación cruzada de dejar uno fuera 
#Resumen de tamaños de muestra: 31, 31, 31, 31, 31, 31, ... 
#Resultados de muestreo:
#
# RMSE Rsquared MAE     
# 3.168763 0.7170704 2.503544
#
# El parámetro de ajuste 'intercepción' se mantuvo constante en un valor de TRUE

Pros y contras de este enfoque

El beneficio de LOOCV es que usamos todos los puntos de datos, lo que generalmente reduce el sesgo potencial. Sin embargo, dado que usamos el modelo para predecir el valor de cada observación, esto podría conducir a una mayor variabilidad en el error de predicción .

Otro inconveniente de este enfoque es que tiene que adaptarse a tantos modelos que puede volverse ineficiente y engorroso desde el punto de vista computacional.

Enfoque repetido de validación cruzada de k-fold

Podemos realizar una validación cruzada repetida de k veces simplemente realizando una validación cruzada de k veces varias veces. El error final es el error medio del número de repeticiones.

El siguiente ejemplo realiza una validación cruzada de 5 veces, repetida 4 veces diferentes:

#cargar biblioteca dplyr utilizada para la biblioteca de manipulación de datos
 (dplyr)

#cargar biblioteca de signos de intercalación utilizada para dividir datos en la biblioteca de conjuntos de prueba y entrenamiento
 (intercalación)

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

#define los datos del conjunto de
 datos <- mtcars [, c ("mpg", "disp", "hp", "drat")]

#define el número de subconjuntos que se utilizarán y el número de veces que se repetirán k veces CV
 train_control <- trainControl (método = "repetidocv", número = 5, repeticiones = 4 )

#train the model
 model <- train (mpg ~., data = data, method = "lm", trControl = train_control)

#resume la impresión de resultados
 (modelo)

# Regresión lineal 
#
# 32 muestras
# 3 predictor
#
# Sin preprocesamiento
#Resmuestreo: Validación cruzada (5 veces, repetida 4 veces) 
#Resumen de tamaños de muestra: 26, 25, 26, 25, 26, 25, ... 
#Resultados de muestreo:
#
# RMSE Rsquared MAE     
# 3.176339 0.7909337 2.559131
#
# El parámetro de ajuste 'intercepción' se mantuvo constante en un valor de TRUE

Pros y contras de este enfoque

El beneficio del enfoque de validación cruzada repetida de k veces es que para cada repetición, los datos se dividirán en subconjuntos ligeramente diferentes, lo que debería dar una estimación aún más insesgada del error de predicción del modelo. El inconveniente de este enfoque es que puede ser computacionalmente intensivo ya que tenemos que repetir el proceso de ajuste del modelo varias veces.

Cómo elegir el número de pliegues en la validación cruzada

La parte más subjetiva de realizar la validación cruzada es n decidir cuántos pliegues (es decir, subconjuntos) utilizar. En general, cuanto menor sea el número de pliegues, más sesgadas serán las estimaciones de error, pero serán menos variables. Por el contrario, cuanto mayor sea el número de pliegues, menos sesgadas serán las estimaciones de error, pero serán más variables.

También es importante tener en cuenta el tiempo computacional. Para cada pliegue, tendrá que entrenar un nuevo modelo, y si este es un proceso lento, podría llevar mucho tiempo si elige una gran cantidad de pliegues.

En la práctica, la validación cruzada se realiza típicamente con 5 o 10 pliegues porque esto permite un buen equilibrio entre variabilidad y sesgo, al mismo tiempo que es computacionalmente eficiente.

Cómo elegir un modelo después de realizar una validación cruzada

La validación cruzada se utiliza como una forma de evaluar el error de predicción de un modelo. Puede ayudarnos a elegir entre dos o más modelos diferentes al resaltar qué modelo tiene el error de predicción más bajo (basado en RMSE, R-cuadrado, etc.).

Una vez que hemos utilizado la validación cruzada para elegir el mejor modelo, usamos todos los datos disponibles para ajustar el modelo elegido. No usamos las instancias de modelo reales que entrenamos durante la validación cruzada para nuestro modelo final.

Por ejemplo, podemos usar una validación cruzada de 5 veces para determinar qué modelo es mejor para usar entre dos modelos de regresión diferentes. Sin embargo, una vez que identificamos qué modelo es mejor usar, usamos todos los datos para ajustar el modelo final. En otras palabras, no dejamos de lado uno de los pliegues al construir el modelo final.

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

Deja un comentario

Se utiliza un coeficiente de correlación intraclase (ICC) para determinar si los elementos o sujetos pueden ser calificados de manera…
statologos comunidad-2

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

You have Successfully Subscribed!