Validación cruzada en programación R

El mayor desafío en el diseño de un modelo de aprendizaje automático es hacer que funcione con precisión en los datos ocultos. Para saber si el modelo diseñado funciona bien o no, tenemos que probarlo con esos puntos de datos que no estaban presentes durante el entrenamiento del modelo. Estos puntos de datos servirán como datos ocultos para el modelo, y resulta fácil evaluar la precisión del modelo. Una de las mejores técnicas para verificar la efectividad de un modelo de aprendizaje automático son las técnicas de validación cruzada que se pueden implementar fácilmente utilizando el lenguaje de programación R.. En esto, se reserva una parte del conjunto de datos que no se utilizará para entrenar el modelo. Una vez que el modelo está listo, ese conjunto de datos reservado se utiliza para fines de prueba. Los valores de la variable dependiente se pronostican durante la fase de prueba y la precisión del modelo se calcula sobre la base del error de predicción, es decir, la diferencia en los valores reales y los valores pronosticados de la variable dependiente. Hay varias métricas estadísticas que se utilizan para evaluar la precisión de los modelos de regresión:

  1. Error cuadrático medio (RMSE) : como su nombre indica, es la raíz cuadrada de la diferencia cuadrática promediada entre el valor real y el valor predicho de la variable objetivo. Da el error de predicción promedio realizado por el modelo, por lo tanto, disminuye el valor RMSE para aumentar la precisión del modelo.
  2. Error absoluto medio (MAE): esta métrica proporciona la diferencia absoluta entre los valores reales y los valores predichos por el modelo para la variable objetivo. Si el valor de los valores atípicos no tiene mucho que ver con la precisión del modelo, se puede usar MAE para evaluar el rendimiento del modelo. Su valor debe ser menor para hacer mejores modelos.
  3. Error R 2 : El valor de la métrica R-cuadrado da una idea de cuánto porcentaje de varianza en la variable dependiente se explica colectivamente por las variables independientes. En otras palabras, refleja la fuerza de la relación entre la variable objetivo y el modelo en una escala de 0 a 100 %. Entonces, un mejor modelo debería tener un alto valor de R-cuadrado.

Tipos de validación cruzada

Durante el proceso de partición del conjunto de datos completo en el conjunto de entrenamiento y el conjunto de validación, existe la posibilidad de perder algunos puntos de datos importantes y cruciales para el propósito del entrenamiento. Dado que esos datos no están incluidos en el conjunto de entrenamiento, el modelo no tiene la oportunidad de detectar algunos patrones. Esta situación puede conducir a un ajuste excesivo o insuficiente del modelo. Para evitar esto, existen diferentes tipos de técnicas de validación cruzada que garantizan el muestreo aleatorio del conjunto de datos de entrenamiento y validación y maximizan la precisión del modelo. Algunas de las técnicas de validación cruzada más populares son

  • Enfoque del conjunto de validación
  • Deje uno fuera de la validación cruzada (LOOCV)
  • Validación cruzada de K-fold
  • Validación cruzada repetida de K-fold

Cargando el conjunto de datos

Para implementar la regresión lineal, estamos utilizando un conjunto de datos de marketing que es un conjunto de datos incorporado en el lenguaje de programación R. A continuación se muestra el código para importar este conjunto de datos a su entorno de programación R.

R

# loading required packages
 
# package to perform data manipulation
# and visualization
library(tidyverse)
 
# package to compute
# cross - validation methods
library(caret)
 
# installing package to
# import desired dataset
install.packages("datarium")
 
# loading the dataset
data("marketing", package = "datarium")
 
# inspecting the dataset
head(marketing)

Producción:

   youtube facebook newspaper sales
1  276.12    45.36     83.04 26.52
2   53.40    47.16     54.12 12.48
3   20.64    55.08     83.16 11.16
4  181.80    49.56     70.20 22.20
5  216.96    12.96     70.08 15.48
6   10.44    58.68     90.00  8.64

Enfoque de conjunto de validación (o división de datos)

En este método, el conjunto de datos se divide aleatoriamente en conjuntos de entrenamiento y prueba. Los siguientes pasos se realizan para implementar esta técnica:

  1. Un muestreo aleatorio del conjunto de datos.
  2. El modelo está entrenado en el conjunto de datos de entrenamiento
  3. El modelo resultante se aplica al conjunto de datos de prueba.
  4. Calcule el error de predicción mediante el uso de métricas de rendimiento del modelo

A continuación se muestra la implementación de este método:

R

# R program to implement
# validation set approach
 
# setting seed to generate a
# reproducible random sampling
set.seed(123)
 
# creating training data as 80% of the dataset
random_sample <- createDataPartition(marketing $ sales,
                                p = 0.8, list = FALSE)
 
# generating training dataset
# from the random_sample
training_dataset  <- marketing[random_sample, ]
 
# generating testing dataset
# from rows which are not
# included in random_sample
testing_dataset <- marketing[-random_sample, ]
 
# Building the model
 
# training the model by assigning sales column
# as target variable and rest other columns
# as independent variables
model <- lm(sales ~., data = training_dataset)
 
# predicting the target variable
predictions <- predict(model, testing_dataset)
 
# computing model performance metrics
data.frame( R2 = R2(predictions, testing_dataset $ sales),
            RMSE = RMSE(predictions, testing_dataset $ sales),
            MAE = MAE(predictions, testing_dataset $ sales))

Producción:

       R2     RMSE      MAE
1 0.9049049 1.965508 1.433609

ventajas:

  • Una de las técnicas más básicas y sencillas para evaluar un modelo.
  • Sin pasos complejos para la implementación.

Desventajas:

  • Las predicciones realizadas por el modelo dependen en gran medida del subconjunto de observaciones utilizadas para el entrenamiento y la validación.
  • El uso de solo un subconjunto de datos con fines de entrenamiento puede hacer que el modelo esté sesgado.

Dejar uno fuera Validación cruzada (LOOCV)

Este método también divide el conjunto de datos en 2 partes, pero supera los inconvenientes del enfoque del conjunto de validación. LOOCV realiza la validación cruzada de la siguiente forma:

  1. Entrene el modelo en puntos de datos N-1
  2. Probar el modelo contra los puntos de datos que quedaron en el paso anterior
  3. Calcular error de predicción
  4. Repita los 3 pasos anteriores hasta que el modelo no esté entrenado y probado en todos los puntos de datos
  5. Genere un error de predicción general tomando el promedio de los errores de predicción en cada caso

A continuación se muestra la implementación de este método:

R

# R program to implement
# Leave one out cross validation
 
# defining training control
# as Leave One Out Cross Validation
train_control <- trainControl(method = "LOOCV")
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Producción: 

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 199, 199, 199, 199, 199, 199, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.059984  0.8912074  1.539441

Tuning parameter 'intercept' was held constant at a value of TRUE

ventajas:

  • Modelo con menos sesgo, ya que casi todos los puntos de datos se utilizan para el entrenamiento.
  • No hay aleatoriedad en el valor de las métricas de rendimiento porque LOOCV se ejecuta varias veces en el conjunto de datos

Desventajas:

  • Entrenar el modelo N veces conduce a un tiempo de cálculo costoso si el conjunto de datos es grande.

Validación cruzada de pliegues en K

Esta técnica de validación cruzada divide los datos en K subconjuntos (pliegues) de tamaño casi igual. De estos K pliegues, un subconjunto se usa como un conjunto de validación, y los demás están involucrados en el entrenamiento del modelo. A continuación se muestra el procedimiento de trabajo completo de este método:

  1. Dividir el conjunto de datos en K subconjuntos aleatoriamente
  2. Use subconjuntos K-1 para entrenar el modelo
  3. Pruebe el modelo contra ese subconjunto que quedó en el paso anterior
  4. Repita los pasos anteriores para K veces, es decir, hasta que el modelo no esté entrenado y probado en todos los subconjuntos.
  5. Genere un error de predicción general tomando el promedio de los errores de predicción en cada caso

A continuación se muestra la implementación de este método:

R

# R program to implement
# K-fold cross-validation
 
# setting seed to generate a
# reproducible random sampling
set.seed(125)
 
# defining training control
# as cross-validation and
# value of K equal to 10
train_control <- trainControl(method = "cv",
                              number = 10)
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Producción:

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 181, 180, 180, 179, 180, 180, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.027409  0.9041909  1.539866

Tuning parameter 'intercept' was held constant at a value of TRUE

ventajas:

  • Velocidad de cálculo rápida.
  • Un método muy eficaz para estimar el error de predicción y la precisión de un modelo.

Desventajas:

  • Un valor más bajo de K conduce a un modelo sesgado y un valor más alto de K puede generar variabilidad en las métricas de rendimiento del modelo. Por lo tanto, es muy importante usar el valor correcto de K para el modelo (generalmente es deseable K = 5 y K = 10).

Validación cruzada repetida de K-fold:

Como sugiere el nombre, en este método, el algoritmo de validación cruzada de K-fold se repite un cierto número de veces. A continuación se muestra la implementación de este método:

R

# R program to implement
# repeated K-fold cross-validation
 
# setting seed to generate a
# reproducible random sampling
set.seed(125)
 
# defining training control as
# repeated cross-validation and
# value of K is 10 and repetition is 3 times
train_control <- trainControl(method = "repeatedcv",
                            number = 10, repeats = 3)
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Producción:

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 3 times) 
Summary of sample sizes: 181, 180, 180, 179, 180, 180, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.020061  0.9038559  1.541517

Tuning parameter 'intercept' was held constant at a value of TRUE

ventajas:

  • En cada repetición, la muestra de datos se baraja, lo que da como resultado el desarrollo de diferentes divisiones de los datos de muestra.

Desventajas:

  • Con cada repetición, el algoritmo tiene que entrenar el modelo desde cero, lo que significa que el tiempo de cálculo para evaluar el modelo aumenta con los tiempos de repetición.

Nota: La técnica de validación cruzada más preferida es la validación cruzada K-fold repetida para el modelo de aprendizaje automático de regresión y clasificación.

Publicación traducida automáticamente

Artículo escrito por RISHU_MISHRA y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *