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

El objetivo principal de cualquier modelo de aprendizaje automático es predecir el resultado de los datos en tiempo real. Para verificar si el modelo desarrollado es lo suficientemente eficiente como para predecir el resultado de un punto de datos no visto, la evaluación del rendimiento del modelo de aprendizaje automático aplicado se vuelve muy necesaria. La técnica de validación cruzada K-fold es básicamente un método para volver a muestrear el conjunto de datos para evaluar un modelo de aprendizaje automático. En esta técnica, el parámetro K se refiere al número de subconjuntos diferentes en los que se dividirá el conjunto de datos dado. Además, los subconjuntos K-1 se usan para entrenar el modelo y los subconjuntos que quedan fuera se usan como un conjunto de validación.

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

  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

Para implementar todos los pasos involucrados en el método K-fold, el lenguaje R tiene bibliotecas ricas y paquetes de funciones incorporadas a través de las cuales se vuelve muy fácil llevar a cabo la tarea completa. El siguiente es el procedimiento paso a paso para implementar la técnica K-fold como un método de validación cruzada en modelos de aprendizaje automático de clasificación y regresión.

Implementar la técnica K-fold en la clasificación

Se prefieren los modelos de aprendizaje automático de clasificación cuando la variable de destino consta de valores categóricos como spam, no spam, verdadero o falso, etc. Aquí se utilizará el clasificador Naive Bayes como clasificador probabilístico para predecir la etiqueta de clase de la variable de destino.  

Paso 1: cargar el conjunto de datos y otros paquetes necesarios

El primer requisito es configurar el entorno R cargando todas las bibliotecas y paquetes necesarios para llevar a cabo el proceso completo sin fallas. A continuación se muestra la implementación de este paso.

R

# loading required packages
 
# 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

Para realizar manipulaciones en el conjunto de datos, es muy necesario inspeccionarlo primero. Dará una idea clara sobre la estructura, así como los diversos tipos de datos presentes en el conjunto de datos. Para ello, el conjunto de datos debe asignarse a una variable. A continuación se muestra el código para hacer lo mismo.

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:

Filas: 1250

Columnas: 9

$Año <dbl> 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, -1,546

$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

$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, -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, …

$Volumen <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.09850, 101, …

$Hoy <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.546, -1.747,…

$Dirección <fct> Arriba, Arriba, Abajo, Arriba, Arriba, Arriba, Abajo, Arriba, Arriba, Arriba, Abajo, Abajo, Arriba, Arriba, Abajo, Arriba, Abajo, Arriba, Abajo, Abajo, Abajo, Abajo, Arriba , Abajo, Abajo, Arriba…

> tabla(conjunto de datos$Dirección)

abajo arriba 

 602 648 

De acuerdo con la información anterior, el conjunto de datos contiene 250 filas y 9 columnas. El tipo de datos de las variables independientes es < dbl> , que proviene de double y significa el número de punto flotante de precisión doble. La variable objetivo es del tipo de datos <fct> y es deseable para un modelo de clasificación. Además, la variable objetivo tiene 2 resultados, a saber, Abajo y Arriba , donde la proporción de estas dos categorías es casi 1:1, es decir, están equilibradas. Todas las categorías de la variable objetivo deben estar en aproximadamente la misma proporción para hacer un modelo sin sesgo. 

Para ello, existen muchas técnicas como:

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

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

En este paso, se define la función para establecer el valor del parámetro K y luego se desarrolla el modelo según los pasos involucrados en la técnica K-fold. 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 = "cv",
                              number = 10)
 
 
# 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

Después del entrenamiento y la validación del modelo, es hora de calcular la precisión general del modelo. A continuación se muestra el código para generar un resumen del modelo. 

R

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

Producción: 

bayesiana ingenua 

1250 muestras

   8 predictor

   2 clases: ‘Abajo’, ‘Arriba’ 

Sin procesamiento previo

Remuestreo: validación cruzada (10 veces) 

Resumen de tamaños de muestra: 1125, 1125, 1125, 1126, 1125, 1124, … 

Resultados de remuestreo a través de parámetros de ajuste:

  usekernel Precisión Kappa    

  FALSO 0.9543996 0.9083514

   VERDADERO 0.9711870 0.9422498

El parámetro de sintonización ‘fL’ se mantuvo constante en un valor de 0

El parámetro de ajuste ‘ajustar’ se mantuvo constante en un valor de 1

Se utilizó la precisión para seleccionar el modelo óptimo utilizando el valor más grande.

Los valores finales utilizados para el modelo fueron fL = 0, usekernel = TRUE y ajuste = 1.

Implementar la técnica K-fold en regresión

Los modelos de aprendizaje automático de regresión se utilizan para predecir la variable objetivo que es de naturaleza continua, como el precio de un producto básico o las ventas de una empresa. A continuación se muestran los pasos completos para implementar la técnica de validación cruzada K-fold en modelos de regresión.

Paso 1: Importación de todos los paquetes necesarios

Configure el entorno R importando todos los paquetes y bibliotecas necesarios. A continuación se muestra la implementación de este paso. 

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")

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

En este paso, el conjunto de datos deseado se carga en el entorno R. Después de eso, se imprimen algunas filas del conjunto de datos para comprender su estructura. A continuación se muestra el código para llevar a cabo esta tarea.

R

# 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

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

El valor del parámetro K se define en la función y el modelo se desarrolla de acuerdo con los pasos mencionados en el algoritmo de la técnica de validación cruzada K-fold. A continuación se muestra la implementación. 

R

# 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)

Paso 4: evaluar el rendimiento del modelo

Como se mencionó en el algoritmo de K-fold, 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 rendimiento final. puntuación 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: 

Regresión lineal 

200 muestras

  3 predictor

Sin procesamiento previo

Remuestreo: validación cruzada (10 veces) 

Resumen de tamaños de muestra: 181, 180, 180, 179, 180, 180, … 

Resultados de remuestreo:

  RMSE R cuadrado MAE     

  2.027409 0.9041909 1.539866

El parámetro de sintonización ‘intercepción’ se mantuvo constante en un valor de VERDADERO

Ventajas de la validación cruzada K-fold

  • 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 de la validación cruzada K-fold

  • 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).

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 *