Cómo estimar la precisión del modelo en R usando el paquete Caret
Cuando se construye un modelo predictivo, se necesita una forma de evaluar la capacidad del modelo en datos invisibles.
Por lo general, esto se hace estimando la precisión utilizando datos que no se utilizaron para entrenar el modelo, como un conjunto de pruebas, o mediante validación cruzada. El paquete caret en R proporciona varios métodos para estimar la precisión de un algoritmo de aprendizaje automático.
En esta publicación, descubrirá cinco enfoques para estimar el rendimiento del modelo a partir de datos invisibles. También tendrá acceso a recetas en R usando el paquete caret para cada método, que puede copiar y pegar en su propio proyecto ahora mismo.
Pon en marcha tu proyecto con mi nuevo libro Machine Learning Mastery With R, que incluye tutoriales paso a paso y los archivos de código fuente de R para todos los ejemplos.
Empecemos.
Estimación de la precisión del modelo
Hemos considerado la precisión del modelo antes en la configuración de las opciones de prueba en un arnés de prueba. Puede leer más en la publicación: Cómo elegir las opciones de prueba adecuadas al evaluar algoritmos de aprendizaje automático.
En esta publicación, descubrirá 5 métodos diferentes que puede utilizar para estimar la precisión del modelo.
Son los siguientes y cada uno se describirá por turno:
- División de datos
- Oreja
- Validación cruzada k veces
- Validación cruzada repetida de k veces
- Validación cruzada de dejar uno fuera
En general, recomendaría la validación cruzada repetida de k veces, pero cada método tiene sus características y beneficios, especialmente cuando se considera la cantidad de datos o la complejidad del espacio y el tiempo. Considere qué enfoque se adapta mejor a su problema.
División de datos
La división de datos implica dividir los datos en un conjunto de datos de entrenamiento explícito que se utiliza para preparar el modelo y un conjunto de datos de prueba invisible que se utiliza para evaluar el rendimiento del modelo en datos invisibles.
Es útil cuando se tiene un conjunto de datos muy grande para que el conjunto de datos de prueba pueda proporcionar una estimación significativa del rendimiento, o cuando se utilizan métodos lentos y se necesita una aproximación rápida del rendimiento.
El siguiente ejemplo divide el conjunto de datos del iris de modo que el 80 % se utiliza para entrenar un modelo Naive Bayes y el 20 % se utiliza para evaluar el rendimiento del modelo.
División de datos en R:
# load the libraries
library(caret)
library(klaR)
# load the iris dataset
data(iris)
# define an 80%/20% train/test split of the dataset
split=0.80
trainIndex <- createDataPartition(iris$Species, p=split, list=FALSE)
data_train <- iris[ trainIndex,]
data_test <- iris[-trainIndex,]
# train a naive bayes model
model <- NaiveBayes(Species~., data=data_train)
# make predictions
x_test <- data_test[,1:4]
y_test <- data_test[,5]
predictions <- predict(model, x_test)
# summarize results
confusionMatrix(predictions$class, y_test)
Oreja
El remuestreo Bootstrap implica tomar muestras aleatorias del conjunto de datos (con reselección) con las que evaluar el modelo. En conjunto, los resultados proporcionan una indicación de la variación del rendimiento del modelo. Normalmente, se realiza una gran cantidad de iteraciones de remuestreo (miles o decenas de miles).
El siguiente ejemplo utiliza un arranque con 10 remuestreos para preparar un modelo Naive Bayes.
Arranque de datos en R:
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="boot", number=100)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Validación cruzada k veces
El método de validación cruzada de k veces implica dividir el conjunto de datos en k-subconjuntos. Para cada subconjunto se mantiene mientras el modelo se entrena en todos los demás subconjuntos. Este proceso se completa hasta que se determina la precisión para cada instancia del conjunto de datos y se proporciona una estimación de precisión general.
Es un método sólido para estimar la precisión y el tamaño de k y ajustar la cantidad de sesgo en la estimación, con valores populares establecidos en 3, 5, 7 y 10.
El siguiente ejemplo utiliza una validación cruzada de 10 veces para estimar Naive Bayes en el conjunto de datos del iris.
Validación cruzada k veces en R:
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="cv", number=10)
# fix the parameters of the algorithm
grid <- expand.grid(.fL=c(0), .usekernel=c(FALSE))
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb", tuneGrid=grid)
# summarize results
print(model)
Validación cruzada repetida de k veces
El proceso de dividir los datos en k veces se puede repetir varias veces; esto se denomina validación cruzada repetida de k veces. La precisión del modelo final se toma como la media del número de repeticiones.
El siguiente ejemplo utiliza una validación cruzada de 10 veces con 3 repeticiones para estimar Naive Bayes en el conjunto de datos del iris.
Validación cruzada repetida de k veces en R:
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Validación cruzada de dejar uno fuera
En la validación cruzada Leave One Out (LOOCV), se omite una instancia de datos y se construye un modelo sobre todas las demás instancias de datos del conjunto de entrenamiento. Esto se repite para todas las instancias de datos.
El siguiente ejemplo demuestra LOOCV para estimar Naive Bayes en el conjunto de datos del iris.
Dejar uno fuera de la validación cruzada en R:
# load the library
library(caret)
# load the iris dataset
data(iris)
# define training control
train_control <- trainControl(method="LOOCV")
# train the model
model <- train(Species~., data=iris, trControl=train_control, method="nb")
# summarize results
print(model)
Resumen
En esta publicación, descubrió 5 métodos diferentes que puede utilizar para estimar la precisión de su modelo a partir de datos invisibles.
Esos métodos fueron: división de datos, arranque, validación cruzada de k veces, validación cruzada repetida de k veces y validación cruzada de dejar uno fuera.
Puede obtener más información sobre el paquete de intercalación en R en la página de inicio del paquete de intercalación y en la página CRAN del paquete de intercalación. Si desea dominar el paquete de intercalación, le recomendaría el libro escrito por el autor del paquete, titulado: Modelado predictivo aplicado, especialmente el Capítulo 4 sobre modelos de sobreajuste.