Validación cruzada repetida de K-fold en programación R

K-fold repetido es la técnica de validación cruzada más preferida para los modelos de aprendizaje automático de clasificación y regresión . La mezcla aleatoria y el muestreo aleatorio del conjunto de datos varias veces es el procedimiento central del algoritmo K-fold repetido y da como resultado la creación de un modelo robusto, ya que cubre las máximas operaciones de entrenamiento y prueba. El funcionamiento de esta técnica de validación cruzada para evaluar la precisión de un modelo de aprendizaje automático depende de 2 parámetros. El primer parámetro es Kque es un valor entero y establece que el conjunto de datos dado se dividirá en K pliegues (o subconjuntos). Entre los pliegues K, el modelo se entrena en los subconjuntos K-1 y el subconjunto restante se utilizará para evaluar el rendimiento del modelo. Estos pasos se repetirán hasta un cierto número de veces que se decidirá por el segundo parámetro de este algoritmo y, por lo tanto, obtuvo su nombre como K-fold repetido, es decir, el algoritmo de validación cruzada de K-fold se repite un cierto número de veces. veces. 

Pasos involucrados en la validación cruzada repetida de K-fold:

Cada iteración del K-fold repetido es la implementación de un algoritmo de K-fold normal. En la técnica de validación cruzada K-fold están involucrados los siguientes pasos:

  1. Dividir el conjunto de datos en K subconjuntos aleatoriamente
  2. Para cada uno de los subconjuntos de puntos de datos desarrollados
    • Trata ese subconjunto como el conjunto de validación
    • Use todos los demás subconjuntos para fines de entrenamiento
    • Entrenamiento del modelo y evaluación en el conjunto de validación o conjunto de prueba
    • Calcular error de predicción
  3. Repita el paso anterior K veces, es decir, hasta que el modelo no esté entrenado y probado en todos los subconjuntos.
  4. Genere un error de predicción general tomando el promedio de los errores de predicción en cada caso

Por lo tanto, en el método de validación cruzada repetida de k-fold, los pasos anteriores se repetirán en el conjunto de datos dado una cierta cantidad de veces. En cada iteración, habrá una división completamente diferente del conjunto de datos en K-pliegues y la puntuación de rendimiento del modelo también será diferente. Por último, la puntuación media de rendimiento en todos los casos dará la precisión final del modelo. Para llevar a cabo estas tareas complejas del método K-fold repetido, el lenguaje R proporciona una rica biblioteca de funciones y paquetes incorporados. A continuación se muestra el enfoque paso a paso para implementar la técnica de validación cruzada K-fold repetida en el modelo de aprendizaje automático de clasificación y regresión.

Implementar la validación cruzada K-fold repetida en la clasificación

Cuando la variable de destino es del tipo de datos categóricos , se utilizan modelos de aprendizaje automático de clasificación para predecir las etiquetas de clase. En este ejemplo, el algoritmo Naive Bayes se utilizará como clasificador probabilístico para predecir la etiqueta de clase de la variable de destino. 

Paso 1: Cargar los paquetes y bibliotecas necesarios

Se deben importar todas las bibliotecas y paquetes necesarios para realizar la tarea sin ningún error. A continuación se muestra el código para configurar el entorno R para el algoritmo K-fold repetido.

R

# load the library
 
# package to perform data manipulation
# and visualization
library(tidyverse)
 
# package to compute
# cross - validation methods
library(caret)
 
 
# loading package to
# import desired dataset
library(ISLR)

Paso 2: Explorar el conjunto de datos

Después de importar las bibliotecas requeridas, es hora de cargar el conjunto de datos en el entorno R. La exploración del conjunto de datos también es muy importante, ya que da una idea de si se requiere algún cambio en el conjunto de datos antes de usarlo con fines de capacitación y prueba. A continuación se muestra el código para llevar a cabo esta tarea.

R

# assigning the complete dataset
# Smarket to a variable
dataset <- Smarket[complete.cases(Smarket), ]
 
# display the dataset with details
# like column name and its data type
# along with values in each row
glimpse(dataset)
 
# checking values present
# in the Direction column
# of the dataset
table(dataset$Direction)

Producción:

Rows: 1,250
Columns: 9
$ Year      <dbl> 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, ...
$ Lag1      <dbl> 0.381, 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, 0.680, 0.701, -0.562, 0.546, -1...
$ Lag2      <dbl> -0.192, 0.381, 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, 0.680, 0.701, -0.562, 0...
$ Lag3      <dbl> -2.624, -0.192, 0.381, 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, 0.680, 0.701, -...
$ Lag4      <dbl> -1.055, -2.624, -0.192, 0.381, 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, 0.680, ...
$ Lag5      <dbl> 5.010, -1.055, -2.624, -0.192, 0.381, 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, ...
$ Volume    <dbl> 1.19130, 1.29650, 1.41120, 1.27600, 1.20570, 1.34910, 1.44500, 1.40780, 1.16400, 1.23260, 1.30900, 1.25800, 1.09800, 1.05310, ...
$ Today     <dbl> 0.959, 1.032, -0.623, 0.614, 0.213, 1.392, -0.403, 0.027, 1.303, 0.287, -0.498, -0.189, 0.680, 0.701, -0.562, 0.546, -1.747, 0...
$ Direction <fct> Up, Up, Down, Up, Up, Up, Down, Up, Up, Up, Down, Down, Up, Up, Down, Up, Down, Up, Down, Down, Down, Down, Up, Down, Down, Up...

> table(dataset$Direction)

Down   Up 
 602  648

La información anterior sugiere que las variables independientes del conjunto de datos son del tipo de datos <dbl>, lo que significa un número de punto flotante de doble precisión. La variable de destino del conjunto de datos es «Dirección» y es del tipo de datos deseado que es el tipo de datos factor(<fct>) . Los valores presentes en la variable dependiente son Abajo y Arriba y están en aproximadamente la misma proporción. Si hay un caso de desequilibrio de clase en la variable de destino, se utilizan los siguientes métodos para corregirlo:

  • Muestreo descendente
  • Muestreo ascendente
  • Muestreo híbrido usando SMOTE y ROSE

Paso 3: Construir el modelo con el algoritmo K-fold repetido

La función se define para establecer el número de repeticiones y el valor del parámetro K. Después de eso, el modelo se desarrolla según los pasos involucrados en el algoritmo K-fold repetido. A continuación se muestra la implementación.

R

# setting seed to generate a 
# reproducible random sampling
set.seed(123)
 
# define training control which
# generates parameters that further
# control how models are created
train_control <- trainControl(method = "repeatedcv",
                              number = 10, repeats = 3)
 
# building the model and
# predicting the target variable
# as per the Naive Bayes classifier
model <- train(Direction~., data = dataset,
               trControl = train_control, method = "nb")

Paso 4: Evaluación de la precisión del modelo

En este paso final, se generará la puntuación de rendimiento del modelo después de probarlo en todos los pliegues de validación posibles. A continuación se muestra el código para imprimir la precisión y el resumen general del modelo desarrollado.

R

# summarize results of the
# model after calculating
# prediction error in each case
print(model)

Producción:

Naive Bayes 

1250 samples
   8 predictor
   2 classes: 'Down', 'Up' 

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 3 times) 
Summary of sample sizes: 1124, 1125, 1126, 1125, 1125, 1126, ... 
Resampling results across tuning parameters:

  usekernel  Accuracy   Kappa    
  FALSE      0.9562616  0.9121273
   TRUE      0.9696037  0.9390601

Tuning parameter 'fL' was held constant at a value of 0
Tuning parameter 'adjust' was held constant at a value of 1
Accuracy was used to select the optimal model using the largest value.
The final values used for the model were fL = 0, usekernel = TRUE and adjust = 1.

Implementar validación cruzada repetida de K-fold en regresión

Se prefieren los modelos de aprendizaje automático de regresión para aquellos conjuntos de datos en los que la variable de destino es de naturaleza continua, como la temperatura de un área, el costo de un producto, etc. Los valores de la variable de destino son números enteros o de punto flotante. A continuación se muestran los pasos necesarios para implementar el algoritmo k-fold repetido como técnica de validación cruzada en modelos de regresión.

Paso 1: Cargar el conjunto de datos y los paquetes requeridos

Como primer paso, el entorno R debe cargarse con todos los paquetes y bibliotecas esenciales para realizar varias operaciones. A continuación se muestra el código para importar todas las bibliotecas necesarias.

R

# loading required packages
 
# package to perform data manipulation
# and visualization
library(tidyverse)
 
# package to compute
# cross - validation methods
library(caret)

Paso 2: carga e inspección del conjunto de datos

Una vez que se importan todos los paquetes, es hora de cargar el conjunto de datos deseado. Aquí se utiliza el conjunto de datos de «árboles» para el modelo de regresión, que es un conjunto de datos incorporado del lenguaje R. además, para construir un modelo correcto, es necesario conocer la estructura del conjunto de datos. Todas estas tareas se pueden realizar utilizando el siguiente código.

R

# access the data from R’s datasets package
data(trees)
 
# look at the first several rows of the data
head(trees)

Producción:

  Girth Height Volume
1   8.3     70   10.3
2   8.6     65   10.3
3   8.8     63   10.2
4  10.5     72   16.4
5  10.7     81   18.8
6  10.8     83   19.7

Paso 3: Construcción del modelo con el algoritmo K-fold repetido

La función se define para establecer el número de repeticiones y el valor del parámetro K. Después de eso, el modelo se desarrolla según los pasos involucrados en el algoritmo K-fold repetido. A continuación se muestra la implementación. 

R

# 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(Volume ~., data = trees, 
               method = "lm",
               trControl = train_control)

Paso 4: Evaluación de la precisión del modelo

Según el algoritmo de la técnica de K-fold repetido, ese modelo se prueba contra cada pliegue (o subconjunto) único del conjunto de datos y, en cada caso, se calcula el error de predicción y, por último, la media de todos los errores de predicción se trata como el final puntuación de rendimiento del modelo. Entonces, a continuación se muestra el código para imprimir el puntaje final y el resumen general del modelo. 

R

# printing model performance metrics
# along with other details
print(model)

Producción:

Linear Regression 

31 samples
 2 predictor

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

  RMSE      Rsquared  MAE     
  4.021691  0.957571  3.362063

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

Ventajas de la validación cruzada repetida de K-fold

  • Un método muy eficaz para estimar el error de predicción y la precisión de un modelo.
  • 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 de la validación cruzada K-fold repetida

  • 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 esencial utilizar el valor correcto de K para el modelo (generalmente es deseable K = 5 y K = 10).
  • 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.

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 *