El enfoque del conjunto de validación en la programación R

El enfoque del conjunto de validación es una técnica de validación cruzada en el aprendizaje automático . Las técnicas de validación cruzada se utilizan a menudo para juzgar el rendimiento y la precisión de un modelo de aprendizaje automático. En el enfoque del conjunto de validación, el conjunto de datos que se utilizará para construir el modelo se divide aleatoriamente en 2 partes, a saber, conjunto de entrenamiento y conjunto de validación (o conjunto de prueba). El modelo se entrena en el conjunto de datos de entrenamiento y su precisión se calcula prediciendo la variable objetivo para aquellos puntos de datos que no están presentes durante el entrenamiento que es el conjunto de validación. Todo este proceso de dividir los datos, entrenar el modelo, probar el modelo es una tarea compleja. Pero el lenguaje Rconsta de numerosas bibliotecas y funciones integradas que pueden llevar a cabo todas las tareas de manera muy fácil y eficiente. 

Pasos involucrados en el enfoque del conjunto de validación

  1. Una división aleatoria del conjunto de datos en una cierta proporción (generalmente se prefiere una proporción de 70-30 o 80-20)
  2. Entrenamiento del modelo en el conjunto de datos de entrenamiento
  3. El modelo resultante se aplica al conjunto de validación.
  4. La precisión del modelo se calcula a través del error de predicción mediante el uso de métricas de rendimiento del modelo

Este artículo analiza el método paso a paso para implementar el enfoque del conjunto de validación como una técnica de validación cruzada para los modelos de aprendizaje automático de clasificación y regresión .

Para modelos de aprendizaje automático de clasificación

Este tipo de modelo de aprendizaje automático se usa cuando la variable objetivo es una variable categórica como positiva, negativa o diabética, no diabética, etc. El modelo predice la etiqueta de clase de la variable dependiente. Aquí, se aplicará el algoritmo  de regresión logística para construir el modelo de clasificación.

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

Antes de realizar cualquier tarea exploratoria o de manipulación, se deben incluir todas las bibliotecas y paquetes necesarios para utilizar varias funciones integradas y un conjunto de datos que facilitará la realización de todo el proceso.

R

# loading required packages
  
# package to perform data manipulation 
# and visualization
library(tidyverse)
  
# package to compute 
# cross - validation methods
library(caret)
  
# package Used to split the data 
# used during classification into 
# train and test subsets
library(caTools)
  
# loading package to 
# import desired dataset
library(ISLR)

 Paso 2: Explorar el conjunto de datos

Es muy necesario comprender la estructura y la dimensión del conjunto de datos, ya que esto ayudará a construir un modelo correcto. Además, al tratarse de un modelo de clasificación, se deben conocer las diferentes categorías presentes en la variable objetivo. 

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

De acuerdo con la información anterior, el conjunto de datos importado tiene 250 filas y 9 columnas. El tipo de datos de columnas como <dbl> significa el número de punto flotante de precisión doble (dbl viene de doble). La variable de destino debe ser del tipo de datos de factor en los modelos de clasificación. Dado que el tipo de datos de la columna Dirección ya es <fct>, no es necesario cambiar nada. 

Además, la variable de respuesta o variable de destino es una variable categórica binaria (ya que los valores en la columna son solo hacia abajo y hacia arriba) y la proporción de ambas etiquetas de clase es de aproximadamente 1:1, lo que significa que están balanceadas. Si hubiera un caso de desequilibrio de clases, como si la proporción de etiquetas de clase fuera 1:2, debemos asegurarnos de que ambas categorías estén en una proporción aproximadamente igual. Para ello, existen muchas técnicas como:

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

Paso 3: Construcción del modelo y generación del conjunto de validación

Este paso implica la división aleatoria del conjunto de datos, el desarrollo del conjunto de entrenamiento y validación, y el entrenamiento del modelo. A continuación se muestra la implementación.

R

# setting seed to generate a  
# reproducible random sampling
set.seed(100)
  
# dividing the complete dataset
# into 2 parts having ratio of
# 70% and 30%
spl = sample.split(dataset$Direction, SplitRatio = 0.7)
  
# selecting that part of dataset
# which belongs to the 70% of the
# dataset divided in previous step
train = subset(dataset, spl == TRUE)
  
# selecting that part of dataset
# which belongs to the 30% of the
# dataset divided in previous step
test = subset(dataset, spl == FALSE)
  
# checking number of rows and column
# in training and testing dataset
print(dim(train))
print(dim(test))
  
# Building the model 
  
# training the model by assigning Direction column 
# as target variable and rest other columns 
# as independent variables
model_glm = glm(Direction ~ . , family = "binomial", 
                data = train, maxit = 100)

 Producción:

> print(dim(train))
[1] 875   9
> print(dim(test))
[1] 375   9

Paso 4: Predicción de la variable objetivo

A medida que se completa el entrenamiento del modelo, es hora de hacer predicciones sobre los datos no vistos. Aquí, la variable objetivo tiene solo 2 valores posibles, por lo que en la función es deseable usar type = response de modo que el modelo prediga la puntuación de probabilidad de la variable categórica objetivo como 0 o 1. 

Hay un paso opcional de transformar la variable de respuesta en la variable de factor de 1 y 0, de modo que si el puntaje de probabilidad de un punto de datos está por encima de cierto umbral, será tratado como 1 y si está por debajo de ese umbral, será tratado como 0. Aquí, el límite de probabilidad se establece en 0,5.  A continuación se muestra el código para implementar estos pasos.

R

# predictions on the validation set
predictTest = predict(model_glm, newdata = test, 
                      type = "response")
  
# assigning the probability cutoff as 0.5
predicted_classes <- as.factor(ifelse(predictTest >= 0.5, 
                                      "Up", "Down"))

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

La mejor manera de juzgar la precisión de un modelo de aprendizaje automático de clasificación es a través de Confusion Matrix . Esta array nos da un valor numérico que sugiere cuántos puntos de datos se predicen correctamente e incorrectamente tomando como referencia los valores reales de la variable objetivo en el conjunto de datos de prueba. Junto con la array de confusión, se pueden calcular otros detalles estadísticos del modelo, como la precisión y kappa, utilizando el siguiente código.

R

# generating confusion matrix and
# other details from the  
# prediction made by the model
print(confusionMatrix(predicted_classes, test$Direction))

 
Producción:

Confusion Matrix and Statistics

          Reference
Prediction Down  Up
      Down  177   5
      Up      4 189
                                         
               Accuracy : 0.976          
                 95% CI : (0.9549, 0.989)
    No Information Rate : 0.5173         
    P-Value [Acc > NIR] : <2e-16         
                                         
                  Kappa : 0.952          
                                         
 Mcnemar's Test P-Value : 1              
                                         
            Sensitivity : 0.9779         
            Specificity : 0.9742         
         Pos Pred Value : 0.9725         
         Neg Pred Value : 0.9793         
             Prevalence : 0.4827         
         Detection Rate : 0.4720         
   Detection Prevalence : 0.4853         
      Balanced Accuracy : 0.9761         
                                         
       'Positive' Class : Down                                                                                            

Para modelos de aprendizaje automático de regresión

Los modelos de regresión se utilizan para predecir una cantidad cuya naturaleza es continua, como el precio de una casa, las ventas de un producto, etc. Generalmente, en un problema de regresión, la variable objetivo es un número real, como valores enteros o de punto flotante. La precisión de este tipo de modelo se calcula tomando la media de los errores al predecir la salida de varios puntos de datos. A continuación se muestran los pasos para implementar el enfoque del conjunto de validación en modelos de regresión lineal .

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

El lenguaje R contiene una variedad de conjuntos de datos. Aquí estamos usando un conjunto de datos de árboles que es un conjunto de datos incorporado para el modelo de regresión lineal. A continuación se muestra el código para importar el conjunto de datos y los paquetes necesarios para realizar varias operaciones para construir el modelo.

R

# loading required packages 
  
# package to perform data manipulation 
# and visualization 
library(tidyverse) 
  
# package to compute 
# cross - validation methods 
library(caret) 
  
# 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

Entonces, en este conjunto de datos, hay un total de 3 columnas entre las cuales Volumen es la variable de destino. Dado que la variable es de naturaleza continua, se puede utilizar un algoritmo de regresión lineal para predecir el resultado.

Paso 2: construir el modelo y generar el conjunto de validación

En este paso, el modelo se divide aleatoriamente en una proporción de 80-20. El 80 % de los puntos de datos se usarán para entrenar el modelo, mientras que el 20 % actúa como el conjunto de validación que nos dará la precisión del modelo. A continuación se muestra el código para el mismo.

R

# reproducible random sampling 
set.seed(123)
  
# creating training data as 80% of the dataset 
random_sample <- createDataPartition(trees $ Volume,  
                                     p = 0.8, list = FALSE) 
  
# generating training dataset 
# from the random_sample 
training_dataset  <- trees[random_sample, ] 
  
# generating testing dataset 
# from rows which are not  
# included in random_sample 
testing_dataset <- trees[-random_sample, ] 
  
# Building the model 
  
# training the model by assigning sales column 
# as target variable and rest other columns 
# as independent variables 
model <- lm(Volume ~., data = training_dataset)

Paso 3: Prediga la variable objetivo

Después de construir y entrenar el modelo, se realizarán predicciones de la variable objetivo de los puntos de datos que pertenecen al conjunto de validación. 

R

# predicting the target variable 
predictions <- predict(model, testing_dataset)

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

Las métricas estadísticas que se utilizan para evaluar el rendimiento de un modelo de regresión lineal son el error cuadrático medio (RMSE), el error cuadrático medio (MAE) y el error R 2 . Entre todos los errores R 2 , la métrica hace el juicio más preciso y su valor debe ser alto para un mejor modelo. A continuación se muestra el código para calcular el error de predicción del modelo.

R

# computing model performance metrics 
data.frame(R2 = R2(predictions, testing_dataset $ Volume), 
           RMSE = RMSE(predictions, testing_dataset $ Volume), 
           MAE = MAE(predictions, testing_dataset $ Volume))

Producción:

         R2     RMSE     MAE
1 0.9564487 5.274129 4.73567

Ventajas del enfoque del conjunto de validación

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

Desventajas del enfoque del conjunto de validación

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

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 *