Saltar al contenido

Optimización de hiperparámetros con búsqueda aleatoria y búsqueda en cuadrículas

14 de septiembre de 2020

Los modelos de aprendizaje automático tienen hiperparámetros que debes establecer para personalizar el modelo a tu conjunto de datos.

A menudo se conocen los efectos generales de los hiperparámetros en un modelo, pero la mejor manera de establecer un hiperparámetro y las combinaciones de hiperparámetros que interactúan para un determinado conjunto de datos es un desafío. A menudo hay heurísticos generales o reglas generales para configurar los hiperparámetros.

Un mejor enfoque es buscar objetivamente diferentes valores para los hiperparámetros de los modelos y elegir un subconjunto que dé como resultado un modelo que logre el mejor rendimiento en un conjunto de datos determinado. Esto se denomina optimización de hiperparámetros o ajuste de hiperparámetros y está disponible en la biblioteca de aprendizaje de máquinas Python de scikit-learn. El resultado de una optimización de hiperparámetros es un único conjunto de hiperparámetros de buen rendimiento que se puede utilizar para configurar el modelo.

En este tutorial, descubrirá la optimización de hiperparámetros para el aprendizaje de la máquina en Python.


Recomendado: ¿Qué es el Big data?.


Después de completar este tutorial, lo sabrás:

  • La optimización de los hiperparámetros es necesaria para sacar el máximo provecho de los modelos de aprendizaje de las máquinas.
  • Cómo configurar la optimización de hiperparámetros de búsqueda aleatoria y en cuadrícula para las tareas de clasificación.
  • Cómo configurar la optimización de hiperparámetros de búsqueda aleatoria y en cuadrícula para las tareas de regresión.

Empecemos.

Optimización de hiperparámetros con búsqueda aleatoria y búsqueda en cuadrículas

Optimización de hiperparámetros con búsqueda aleatoria y búsqueda en cuadrículas
Foto de James St. John, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cinco partes; son:

  1. Modelo de optimización de hiperparámetros
  2. Optimización de hiperparámetros API de Scikit-Learn
  3. Optimización de hiperparámetros para la clasificación
    1. Búsqueda aleatoria de la clasificación
    2. Búsqueda en la cuadrícula de la clasificación
  4. Optimización de hiperparámetros para la regresión
    1. Búsqueda aleatoria de la regresión
    2. Búsqueda en la red para la regresión
  5. Preguntas comunes sobre la optimización de hiperparámetros

Modelo de optimización de hiperparámetros

Los modelos de aprendizaje de máquinas tienen hiperparámetros.

Los hiperparámetros son puntos de elección o configuración que permiten personalizar un modelo de aprendizaje de una máquina para una tarea o conjunto de datos específicos.

  • Hiperparámetro: Argumento de configuración del modelo especificado por el desarrollador para guiar el proceso de aprendizaje para un conjunto de datos específico.

Los modelos de aprendizaje automático también tienen parámetros, que son los coeficientes internos establecidos por el entrenamiento o la optimización del modelo en un conjunto de datos de entrenamiento.

Los parámetros son diferentes de los hiperparámetros. Los parámetros se aprenden automáticamente; los hiperparámetros se establecen manualmente para ayudar a guiar el proceso de aprendizaje.

Para más información sobre la diferencia entre los parámetros e hiperparámetros, vea el tutorial:

Típicamente un hiperparámetro tiene un efecto conocido en un modelo en el sentido general, pero no está claro cuál es la mejor manera de establecer un hiperparámetro para un conjunto de datos determinado. Además, muchos modelos de aprendizaje de máquinas tienen un rango de hiperparámetros y pueden interactuar de forma no lineal.

Como tal, a menudo se requiere buscar un conjunto de hiperparámetros que den como resultado el mejor rendimiento de un modelo en un conjunto de datos. Esto se denomina optimización de hiperparámetros, ajuste de hiperparámetros o búsqueda de hiperparámetros.

Un procedimiento de optimización implica la definición de un espacio de búsqueda. Éste puede pensarse geométricamente como un volumen de n dimensiones, donde cada hiperparámetro representa una dimensión diferente y la escala de la dimensión son los valores que puede asumir el hiperparámetro, como valor real, valor entero o categórico.

  • Espacio de búsqueda: Volumen a buscar donde cada dimensión representa un hiperparámetro y cada punto representa una configuración de modelo.

Un punto en el espacio de búsqueda es un vector con un valor específico para cada valor de hiperparámetro. El objetivo del procedimiento de optimización es encontrar un vector que dé como resultado el mejor rendimiento del modelo después de su aprendizaje, como una máxima precisión o un mínimo error.

Se puede utilizar una gama de diferentes algoritmos de optimización, aunque dos de los métodos más simples y comunes son la búsqueda aleatoria y la búsqueda en cuadrículas.

  • Búsqueda aleatoria. Definir un espacio de búsqueda como un dominio delimitado de valores de hiperparámetros y puntos de muestra aleatorios en ese dominio.
  • Búsqueda en la red. Definir un espacio de búsqueda como una cuadrícula de valores hiperparamétricos y evaluar cada posición en la cuadrícula.

La búsqueda de cuadrículas es genial para comprobar combinaciones que se sabe que funcionan bien en general. La búsqueda aleatoria es genial para descubrir y obtener combinaciones de hiperparámetros que no habrías adivinado intuitivamente, aunque a menudo requiere más tiempo para ejecutarse.

A veces se utilizan métodos más avanzados, como la optimización bayesiana y la optimización evolutiva.

Ahora que estamos familiarizados con la optimización de hiperparámetros, veamos cómo podemos usar este método en Python.

Optimización de hiperparámetros API de Scikit-Learn

La biblioteca de aprendizaje de máquinas de código abierto de Python de scikit-learn proporciona técnicas para afinar los hiperparámetros del modelo.

Específicamente, proporciona el RandomizedSearchCV para la búsqueda aleatoria y el GridSearchCV para la búsqueda por cuadrículas. Ambas técnicas evalúan los modelos para un vector hiperparamétrico dado utilizando la validación cruzada, de ahí el «CV» sufijo de cada nombre de clase.

Ambas clases requieren dos argumentos. El primero es el modelo que está optimizando. Esta es una instancia del modelo con valores de conjunto de hiperparámetros que no quieres optimizar. El segundo es el espacio de búsqueda. Se define como un diccionario donde los nombres son los argumentos de los hiperparámetros del modelo y los valores son valores discretos o una distribución de valores a la muestra en el caso de una búsqueda aleatoria.

Ambas clases proveen un «cv«que permite especificar un número entero de pliegues, por ejemplo 5, o un objeto de validación cruzada configurado. Recomiendo que se defina y especifique un objeto de validación cruzada para tener más control sobre la evaluación del modelo y hacer que el procedimiento de evaluación sea obvio y explícito.

En el caso de las tareas de clasificación, recomiendo utilizar la clase RepeatedStratifiedKFold, y para las tareas de regresión, recomiendo utilizar la clase RepeatedKFold con un número apropiado de pliegues y repeticiones, como 10 pliegues y tres repeticiones.

Ambas clases de optimización de hiperparámetros también proporcionan un «puntuación«que toma una cadena que indica la métrica a optimizar.

La métrica debe ser maximizada, lo que significa que mejores modelos resultan en mayores puntuaciones. Para la clasificación, esto puede serexactitud‘. Para la regresión, esta es una medida de error negativo, como ‘error_absoluto_negativopara una versión negativa del error absoluto medio, donde los valores más cercanos a cero representan menos error de predicción del modelo.

Puedes ver una lista de métricas de puntuación incorporadas aquí:

Finalmente, la búsqueda puede hacerse en paralelo, por ejemplo, utilizar todos los núcleos de la CPU especificando el «n_jobs«como un número entero con el número de núcleos en su sistema, por ejemplo, 8. O puedes establecerlo en -1 para usar automáticamente todos los núcleos de tu sistema.

Una vez definida, la búsqueda se realiza llamando al fit() y proporcionar un conjunto de datos utilizados para entrenar y evaluar las combinaciones de modelos de hiperparámetros utilizando la validación cruzada.

Ejecutar la búsqueda puede llevar minutos u horas, dependiendo del tamaño del espacio de búsqueda y la velocidad de su hardware. A menudo, querrá adaptar la búsqueda a la cantidad de tiempo de que disponga en lugar de la posibilidad de lo que se podría buscar.

Al final de la búsqueda, puede acceder a todos los resultados mediante atributos de la clase. Tal vez los atributos más importantes son los mejor puntuación observado y el hiperparámetros que alcanzó la mejor puntuación.

Una vez que se conoce el conjunto de hiperparámetros que logran el mejor resultado, se puede definir un nuevo modelo, establecer los valores de cada hiperparámetro, y luego ajustar el modelo a todos los datos disponibles. Este modelo puede entonces ser usado para hacer predicciones sobre nuevos datos.

Ahora que estamos familiarizados con la API de optimización de hiperparámetros en scikit-learn, veamos algunos ejemplos trabajados.

Optimización de hiperparámetros para la clasificación

En esta sección, utilizaremos la optimización de hiperparámetros para descubrir una configuración de modelo de buen rendimiento para el conjunto de datos del sonar.

El conjunto de datos del sonar es un conjunto de datos estándar de aprendizaje por máquina que comprende 208 filas de datos con 60 variables de entrada numéricas y una variable objetivo con dos valores de clase, por ejemplo, la clasificación binaria.

Utilizando un arnés de prueba de validación cruzada estratificada 10 veces con tres repeticiones, un modelo ingenuo puede lograr una precisión de alrededor del 53 por ciento. Un modelo de alto rendimiento puede lograr una precisión en este mismo arnés de prueba de alrededor del 88 por ciento. Esto proporciona los límites del rendimiento esperado en este conjunto de datos.

El conjunto de datos implica la predicción de si los retornos del sonar indican una roca o una mina simulada.

No es necesario descargar el conjunto de datos; lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.

El siguiente ejemplo descarga el conjunto de datos y resume su forma.

Ejecutando el ejemplo se descarga el conjunto de datos y se divide en elementos de entrada y salida. Como era de esperar, podemos ver que hay 208 filas de datos con 60 variables de entrada.

A continuación, usemos la búsqueda aleatoria para encontrar una buena configuración de modelo para el conjunto de datos del sonar.

Para mantener las cosas simples, nos centraremos en un modelo lineal, el modelo de regresión logística, y los hiperparámetros comunes sintonizados para este modelo.

Búsqueda aleatoria de la clasificación

En esta sección, exploraremos la optimización de hiperparámetros del modelo de regresión logística en el conjunto de datos del sonar.

Primero, definiremos el modelo que será optimizado y usaremos valores por defecto para los hiperparámetros que no serán optimizados.

Evaluaremos las configuraciones de los modelos utilizando la validación cruzada estratificada de tres repeticiones y 10 pliegues.

A continuación, podemos definir el espacio de búsqueda.

Este es un diccionario donde los nombres son argumentos para el modelo y los valores son distribuciones de las que se pueden extraer muestras. Optimizaremos el solverel penalizacióny el C hiperparámetros del modelo con distribuciones discretas para el solucionador y el tipo de penalización y una distribución logarítmica uniforme de 1e-5 a 100 para el C valor.

El log-uniforme es útil para buscar valores de penalización, ya que a menudo exploramos valores de diferentes órdenes de magnitud, al menos como un primer paso.

A continuación, podemos definir el procedimiento de búsqueda con todos estos elementos.

Es importante que establezcamos el número de iteraciones o muestras a extraer del espacio de búsqueda a través de la «n_iter«argumento». En este caso, lo fijaremos en 500.

Finalmente, podemos realizar la optimización y reportar los resultados.

A continuación se muestra el ejemplo completo.

Ejecutar el ejemplo puede llevar un minuto. Es rápido porque estamos usando un espacio de búsqueda pequeño y un modelo rápido para ajustar y evaluar. Puede que vea algunas advertencias durante la optimización para combinaciones de configuraciones inválidas. Estas pueden ser ignoradas con seguridad.

Al final de la carrera, se informa de la mejor puntuación y la configuración de hiperparámetros que alcanzó el mejor rendimiento.

Sus resultados específicos variarán dada la naturaleza estocástica del procedimiento de optimización. Intente ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que la mejor configuración alcanzó una precisión de alrededor del 78,9 por ciento, lo cual es justo, y los valores específicos para la solver, penalización…y… C los hiperparámetros utilizados para lograr esa puntuación.

A continuación, usemos la búsqueda en cuadrícula para encontrar una buena configuración de modelo para el conjunto de datos del sonar.

Búsqueda en la cuadrícula de la clasificación

Usar la búsqueda en cuadrícula es muy parecido a usar la búsqueda aleatoria para la clasificación.

La principal diferencia es que el espacio de búsqueda debe ser una cuadrícula discreta para ser buscado. Esto significa que en lugar de usar una distribución logarítmica uniforme para Cpodemos especificar valores discretos en una escala de registro.

Además, la clase GridSearchCV no tiene varias iteraciones, ya que sólo estamos evaluando combinaciones de hiperparámetros en la cuadrícula.

Enlazando todo esto, el ejemplo completo de búsqueda de configuraciones de regresión logística para el conjunto de datos del sonar se enumera a continuación.

Ejecutar el ejemplo puede llevar un momento. Es rápido porque estamos usando un espacio de búsqueda pequeño y un modelo rápido para ajustar y evaluar. De nuevo, puede que vea algunas advertencias durante la optimización para combinaciones de configuración inválidas. Estas pueden ser ignoradas con seguridad.

Al final de la carrera, se informa de la mejor puntuación y la configuración de hiperparámetros que alcanzó el mejor rendimiento.

Sus resultados específicos variarán dada la naturaleza estocástica del procedimiento de optimización. Intente ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que la mejor configuración alcanzó una precisión de alrededor del 78,2%, lo que también es justo y los valores específicos para el solver, penalización y C los hiperparámetros utilizados para lograr esa puntuación. Curiosamente, los resultados son muy similares a los encontrados en la búsqueda aleatoria.

Optimización de hiperparámetros para la regresión

En esta sección utilizaremos la hiper-optimización para descubrir una configuración de modelo de alto rendimiento para el conjunto de datos del seguro de automóviles.

El conjunto de datos de seguro de automóviles es un conjunto de datos estándar de aprendizaje por máquina que comprende 63 filas de datos con una variable de entrada numérica y una variable de destino numérica.

Utilizando un arnés de pruebas de validación cruzada estratificada 10 veces con 3 repeticiones, un modelo ingenuo puede lograr un error absoluto medio (MAE) de alrededor de 66. Un modelo de alto rendimiento puede lograr un MAE en este mismo arnés de prueba de alrededor de 28. Esto proporciona los límites del rendimiento esperado en este conjunto de datos.

El conjunto de datos implica la predicción de la cantidad total en reclamaciones (miles de coronas suecas) dado el número de reclamaciones para las diferentes regiones geográficas.

No es necesario descargar el conjunto de datos, lo descargaremos automáticamente como parte de nuestros ejemplos de trabajo.

El siguiente ejemplo descarga el conjunto de datos y resume su forma.

Ejecutando el ejemplo se descarga el conjunto de datos y se divide en elementos de entrada y salida. Como era de esperar, podemos ver que hay 63 filas de datos con 1 variable de entrada.

A continuación, podemos usar la optimización de hiperparámetros para encontrar una buena configuración de modelo para el conjunto de datos del seguro de automóviles.

Para mantener las cosas simples, nos centraremos en un modelo lineal, el modelo de regresión lineal y los hiperparámetros comunes ajustados para este modelo.

Búsqueda aleatoria de la regresión

Configurar y utilizar el procedimiento de optimización de hiperparámetros de búsqueda aleatoria para la regresión es muy parecido a utilizarlo para la clasificación.

En este caso, configuraremos los hiperparámetros importantes de la implementación de la regresión lineal, incluyendo el solver, alfa, fit_intercept…y… normalizar.

Utilizaremos una distribución discreta de valores en el espacio de búsqueda para todos, excepto para el «alfa«que es un término de penalización, en cuyo caso utilizaremos una distribución logarítmica uniforme como hicimos en la sección anterior para el «C«argumento de regresión logística.

La principal diferencia en la regresión en comparación con la clasificación es la elección del método de puntuación.

Para la regresión, el rendimiento se mide a menudo utilizando un error, que se minimiza, con el cero representando un modelo con una habilidad perfecta. Los procedimientos de optimización de hiperparámetros en scikit-learn asumen una puntuación máxima. Por lo tanto, se proporciona una versión de cada métrica de error que se hace negativa.

Esto significa que los grandes errores positivos se convierten en grandes errores negativos, el buen rendimiento son pequeños valores negativos cercanos a cero y la habilidad perfecta es cero.

El signo del MAE negativo puede ser ignorado al interpretar el resultado.

En este caso nos referiremos a un error absoluto (MAE) y una versión maximizada de este error está disponible al establecer el «puntuación«argumento para»error_absoluto_negativo“.

A continuación se muestra el ejemplo completo.

Ejecutar el ejemplo puede llevar un momento. Es rápido porque estamos usando un espacio de búsqueda pequeño y un modelo rápido para ajustar y evaluar. Puede que vea algunas advertencias durante la optimización para combinaciones de configuración inválidas. Estas pueden ser ignoradas con seguridad.

Al final de la carrera, se informa de la mejor puntuación y la configuración de hiperparámetros que alcanzó el mejor rendimiento.

Sus resultados específicos variarán dada la naturaleza estocástica del procedimiento de optimización. Intente ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que la mejor configuración logró un MAE de alrededor de 29,2, que está muy cerca del mejor rendimiento del modelo. Podemos entonces ver los valores específicos de hiperparámetros que lograron este resultado.

A continuación, usemos la búsqueda en cuadrícula para encontrar una buena configuración de modelo para el conjunto de datos del seguro de automóviles.

Búsqueda en la red para la regresión

Como una búsqueda de cuadrícula, no podemos definir una distribución a la muestra y en su lugar debemos definir una cuadrícula discreta de valores hiperparamétricos. Como tal, especificaremos la «alfa«como un rango de valores en una escala log-10.

La búsqueda de la red para la regresión requiere que el «puntuación«… se especifique, como lo hicimos en la búsqueda aleatoria.

En este caso, volveremos a utilizar la función de puntuación negativa de MAE.

Enlazando todo esto, el ejemplo completo de búsqueda de configuraciones de regresión lineal para el conjunto de datos del seguro de automóviles se enumera a continuación.

Ejecutar el ejemplo puede llevar un minuto. Es rápido porque estamos usando un espacio de búsqueda pequeño y un modelo rápido para ajustar y evaluar. De nuevo, puede que vea algunas advertencias durante la optimización para combinaciones de configuraciones inválidas. Estas pueden ser ignoradas con seguridad.

Al final de la carrera, se informa de la mejor puntuación y la configuración de hiperparámetros que alcanzó el mejor rendimiento.

Sus resultados específicos variarán dada la naturaleza estocástica del procedimiento de optimización. Intente ejecutar el ejemplo unas cuantas veces.

En este caso, podemos ver que la mejor configuración logró un MAE de alrededor de 29,2, que es casi idéntico a lo que logramos con la búsqueda aleatoria en la sección anterior. Curiosamente, los hiperparámetros también son casi idénticos, lo que es una buena confirmación.

Preguntas comunes sobre la optimización de hiperparámetros

En esta sección se abordan algunas preguntas comunes sobre la optimización de los hiperparámetros.

¿Cómo elegir entre la búsqueda aleatoria y la búsqueda por cuadrículas?

Elija el método basado en sus necesidades. Recomiendo empezar con una cuadrícula y hacer una búsqueda aleatoria si tiene tiempo.

La búsqueda en cuadrículas es apropiada para pequeñas y rápidas búsquedas de valores de hiperparámetros que se sabe que funcionan bien en general.

La búsqueda aleatoria es apropiada para descubrir nuevos valores de hiperparámetros o nuevas combinaciones de hiperparámetros, que a menudo dan lugar a un mejor rendimiento, aunque puede llevar más tiempo completarla.

¿Cómo acelerar la optimización de los hiperparámetros?

Asegúrate de poner el «n_jobs«…el argumento del número de núcleos de su máquina.

Después de eso, más sugerencias incluyen:

  • Evalúe en una muestra más pequeña de su conjunto de datos.
  • Explora un espacio de búsqueda más pequeño.
  • Use menos repeticiones y/o pliegues para la validación cruzada.
  • Ejecutar la búsqueda en una máquina más rápida, como la AWS EC2.
  • Usar un modelo alternativo que sea más rápido de evaluar.

¿Cómo elegir los hiperparámetros a buscar?

La mayoría de los algoritmos tienen un subconjunto de hiperparámetros que tienen la mayor influencia sobre el procedimiento de búsqueda.

Estos están listados en la mayoría de las descripciones del algoritmo. Por ejemplo, aquí hay algunos algoritmos y sus hiperparámetros más importantes:

Si no está seguro:

  • Revisa los documentos que usan el algoritmo para obtener ideas.
  • Revise la documentación del API y del algoritmo para obtener ideas.
  • Busca en todos los hiperparámetros.

¿Cómo utilizar los hiperparámetros de mejor rendimiento?

Definir un nuevo modelo y establecer los valores de hiperparámetros del modelo a los valores encontrados por la búsqueda.

Luego ajuste el modelo a todos los datos disponibles y use el modelo para comenzar a hacer predicciones sobre nuevos datos.

Esto se llama preparar un modelo final. Vea más aquí:

¿Cómo hacer una predicción?

Primero, ajustar un modelo final (pregunta anterior).

Entonces llama al predecir() para hacer una predicción.

Para ejemplos de cómo hacer una predicción con un modelo final, ver el tutorial:

¿Tiene otra pregunta sobre la optimización de los hiperparámetros?
Hágamelo saber en los comentarios de abajo.

Más lecturas

Esta sección proporciona más recursos sobre el tema si desea profundizar en él.

Tutoriales

APIs

Artículos

Resumen

En este tutorial, descubriste la optimización de hiperparámetros para el aprendizaje de la máquina en Python.

Específicamente, aprendiste:

  • La optimización de los hiperparámetros es necesaria para sacar el máximo provecho de los modelos de aprendizaje de las máquinas.
  • Cómo configurar la optimización de hiperparámetros de búsqueda aleatoria y en cuadrícula para las tareas de clasificación.
  • Cómo configurar la optimización de hiperparámetros de búsqueda aleatoria y en cuadrícula para las tareas de regresión.

¿Tiene alguna pregunta?
Haga sus preguntas en los comentarios de abajo y haré lo posible por responder.

Descubre el aprendizaje rápido de la máquina en Python!

Aprendizaje de la máquina maestra con Python

Desarrolle sus propios modelos en minutos

…con sólo unas pocas líneas de código de aprendizaje científico…

Aprende cómo en mi nuevo Ebook:
Dominio de la máquina de aprendizaje con la pitón

Cubre Tutoriales de auto-estudio y proyectos integrales como:
Cargando datos, visualización, modelado, tuningy mucho más…

Finalmente traer el aprendizaje automático a
Sus propios proyectos

Sáltese los académicos. Sólo los resultados.

Ver lo que hay dentro