Búsqueda de sitios web

Ajuste de modelos de aprendizaje automático mediante el paquete Caret R


Los algoritmos de aprendizaje automático están parametrizados para que puedan adaptarse mejor a un problema determinado. Una dificultad es que configurar un algoritmo para un problema determinado puede ser un proyecto en sí mismo.

Al igual que al seleccionar "el mejor" algoritmo para un problema, no se puede saber de antemano qué parámetros del algoritmo serán los mejores para un problema. Lo mejor es investigar empíricamente con experimentos controlados.

El paquete caret R fue diseñado para facilitar la búsqueda de parámetros óptimos para un algoritmo. Proporciona un método de búsqueda de cuadrícula para buscar parámetros, combinado con varios métodos para estimar el rendimiento de un modelo determinado.

En esta publicación, descubrirá 5 recetas que puede utilizar para ajustar los algoritmos de aprendizaje automático y encontrar los parámetros óptimos para sus problemas utilizando el paquete caret R.

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.

Ajuste del modelo

El paquete caret R proporciona una búsqueda en cuadrícula donde usted puede especificar los parámetros para probar su problema. Probará todas las combinaciones y localizará la que dé los mejores resultados.

Los ejemplos de esta publicación demostrarán cómo se puede utilizar el paquete caret R para ajustar un algoritmo de aprendizaje automático.

La cuantificación del vector de aprendizaje (LVQ) se utilizará en todos los ejemplos debido a su simplicidad. Es como los k vecinos más cercanos, excepto que la base de datos de muestras es más pequeña y se adapta en función de los datos de entrenamiento. Tiene dos parámetros para ajustar, el número de instancias (libros de códigos) en el modelo llamado tamaño y el número de instancias para verificar al hacer predicciones llamado k.

Cada ejemplo también utilizará el conjunto de datos de flores de iris, que viene con R. Este conjunto de datos de clasificación proporciona 150 observaciones para tres especies de flores de iris y sus medidas de pétalos y sépalos en centímetros.

Cada ejemplo también supone que estamos interesados en la precisión de la clasificación como métrica que estamos optimizando, aunque esto se puede cambiar. Además, cada ejemplo estima el rendimiento de un modelo determinado (combinación de tamaño y k parámetros) utilizando una validación cruzada repetida n veces, con 10 pliegues y 3 repeticiones. Esto también se puede cambiar si lo desea.

Búsqueda de cuadrícula: cuadrícula automática

Hay dos formas de ajustar un algoritmo en el paquete Caret R, la primera es permitiendo que el sistema lo haga automáticamente. Esto se puede hacer configurando tuneLength para indicar el número de valores diferentes que se deben probar para cada parámetro del algoritmo.

Esto solo admite parámetros de algoritmo categóricos y enteros, y hace una suposición aproximada sobre qué valores probar, pero puede ayudarlo a comenzar a funcionar muy rápidamente.

La siguiente receta demuestra la búsqueda automática en cuadrícula del tamaño y k atributos de LVQ con 5 (tuneLength=5) valores de cada uno (25 modelos en total).

Ajuste automático de parámetros en R:

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

Los valores finales utilizados para el modelo fueron tamaño=10 y k=1.

Búsqueda de cuadrícula: cuadrícula manual

La segunda forma de buscar parámetros de algoritmo es especificar una cuadrícula de sintonización manualmente. En la cuadrícula, cada parámetro del algoritmo se puede especificar como un vector de valores posibles. Estos vectores se combinan para definir todas las combinaciones posibles a probar.

La siguiente receta demuestra la búsqueda de una cuadrícula de sintonización manual con 4 valores para el parámetro de tamaño y 5 valores para el parámetro k (20 combinaciones).

Búsqueda de cuadrícula con el paquete caret r:

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,20,50), k=c(1,2,3,4,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)

Los valores finales utilizados para el modelo fueron tamaño=50 y k=5.

Preprocesamiento de datos

El conjunto de datos se puede preprocesar como parte del ajuste de parámetros. Es importante hacer esto dentro de la muestra utilizada para evaluar cada modelo, para garantizar que los resultados tengan en cuenta toda la variabilidad de la prueba. Si el conjunto de datos dice normalizado o estandarizado antes del proceso de ajuste, tendría acceso a conocimiento adicional (sesgo) y no daría una estimación tan precisa del rendimiento en datos invisibles.

Todos los atributos del conjunto de datos del iris están en las mismas unidades y generalmente en la misma escala, por lo que la normalización y estandarización no son realmente necesarias. Sin embargo, el siguiente ejemplo demuestra cómo ajustar el tamaño y los parámetros k de LVQ mientras se normaliza el conjunto de datos con preProcess=”scale”.

Búsqueda de cuadrícula con preprocesamiento con el paquete caret r:

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", preProcess="scale", trControl=control, tuneLength=5)
# summarize the model
print(model)

Los valores finales utilizados para el modelo fueron tamaño=8 y k=6.

Procesamiento paralelo

El paquete caret admite el procesamiento paralelo para reducir el tiempo de cálculo de un experimento determinado. Se admite automáticamente siempre que esté configurado. En este ejemplo, cargamos el paquete doMC y configuramos la cantidad de núcleos en 4, lo que deja disponibles 4 subprocesos de trabajo para marcar al ajustar el modelo. Esto se utiliza para los bucles de las repeticiones de validación cruzada para cada combinación de parámetros.

Búsqueda de cuadrícula con procesamiento paralelo con el paquete caret r:

# ensure results are repeatable
set.seed(7)
# configure multicore
library(doMC)
registerDoMC(cores=4)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneLength=5)
# summarize the model
print(model)

Los resultados son los mismos que en el primer ejemplo, solo que se completan más rápido.

Visualización del rendimiento

Puede resultar útil graficar el rendimiento de diferentes combinaciones de parámetros de algoritmos para buscar tendencias y la sensibilidad del modelo. Caret admite graficar el modelo directamente, lo que comparará la precisión de diferentes combinaciones de algoritmos.

En la siguiente receta, se define una cuadrícula manual más grande de parámetros del algoritmo y se representan gráficamente los resultados. El gráfico muestra el tamaño en el eje x y la precisión del modelo en el eje y. Se dibujan dos líneas, una para cada valor de k. El gráfico muestra las tendencias generales en el aumento del rendimiento con el tamaño y que probablemente se prefiera el valor mayor de k.

Búsqueda de cuadrícula con visualización con el paquete caret r:

# ensure results are repeatable
set.seed(7)
# load the library
library(caret)
# load the dataset
data(iris)
# prepare training scheme
control <- trainControl(method="repeatedcv", number=10, repeats=3)
# design the parameter tuning grid
grid <- expand.grid(size=c(5,10,15,20,25,30,35,40,45,50), k=c(3,5))
# train the model
model <- train(Species~., data=iris, method="lvq", trControl=control, tuneGrid=grid)
# summarize the model
print(model)
# plot the effect of parameters on accuracy
plot(model)

Los valores finales utilizados para el modelo fueron tamaño=35 y k=5.

Resumen

En esta publicación, descubrió el soporte en el paquete caret R para ajustar los parámetros del algoritmo mediante una búsqueda de cuadrícula.

Ha visto 5 recetas que utilizan el paquete caret R para ajustar el tamaño y los parámetros k para el algoritmo LVQ.

Cada receta en esta publicación es independiente y está lista para que la copie y pegue en su propio proyecto y la adapte a su problema.

Artículos relacionados