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
- 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)
- Entrenamiento del modelo en el conjunto de datos de entrenamiento
- El modelo resultante se aplica al conjunto de validación.
- 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