Saltar al contenido

HyperOptar por el aprendizaje automático de la máquina con Scikit-Learn

11 de septiembre de 2020

El Aprendizaje Automático de Máquinas (AutoML) se refiere a las técnicas para descubrir automáticamente modelos de buen rendimiento para tareas de modelado predictivo con muy poca participación del usuario.

HyperOpt es una biblioteca de código abierto para AutoML a gran escala e HyperOpt-Sklearn es una envoltura para HyperOpt que soporta AutoML con HyperOpt para la popular biblioteca de aprendizaje automático Scikit-Learn, incluyendo el conjunto de transformaciones de preparación de datos y algoritmos de clasificación y regresión.

En este tutorial, descubrirá cómo utilizar HyperOpt para el aprendizaje automático de máquinas con Scikit-Learn en Python.

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

  • Hyperopt-Sklearn es una biblioteca de código abierto para AutoML con preparación de datos scikit-learn y modelos de aprendizaje automático.
  • Cómo usar Hyperopt-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de clasificación.
  • Cómo usar Hyperopt-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de regresión.

Empecemos.

HyperOptar por el aprendizaje automático de la máquina con Scikit-Learn

HyperOptar por el aprendizaje automático de la máquina con Scikit-Learn
Foto de Neil Williamson, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cuatro partes; son:

  1. HyperOpt y HyperOpt-Sklearn
  2. Cómo instalar y usar HyperOpt-Sklearn
  3. HyperOpt-Sklearn para la clasificación
  4. HyperOpt-Sklearn para la regresión

HyperOpt y HyperOpt-Sklearn

HyperOpt es una librería Python de código abierto para la optimización Bayesiana desarrollada por James Bergstra.

Está diseñado para la optimización a gran escala de modelos con cientos de parámetros y permite que el procedimiento de optimización sea escalado a través de múltiples núcleos y múltiples máquinas.

La biblioteca se utilizó explícitamente para optimizar los conductos de aprendizaje de las máquinas, incluyendo la preparación de datos, la selección de modelos y los hiperparámetros de los modelos.

Nuestro enfoque consiste en exponer el gráfico de expresión subyacente de cómo se calcula una métrica de rendimiento (por ejemplo, la precisión de la clasificación en los ejemplos de validación) a partir de hiperparámetros que rigen no sólo cómo se aplican los pasos de procesamiento individuales, sino incluso qué pasos de procesamiento se incluyen.

– Haciendo una ciencia de la búsqueda de modelos: Optimización de hiperparámetros en cientos de dimensiones para arquitecturas de visión, 2013.

El uso directo de HyperOpt es un desafío, ya que requiere que el procedimiento de optimización y el espacio de búsqueda se especifiquen cuidadosamente.

Se creó una extensión de HyperOpt llamada HyperOpt-Sklearn que permite aplicar el procedimiento HyperOpt a los modelos de preparación de datos y de aprendizaje automático que ofrece la popular biblioteca de aprendizaje automático de código abierto Scikit-Learn.

HyperOpt-Sklearn envuelve la biblioteca HyperOpt y permite la búsqueda automática de métodos de preparación de datos, algoritmos de aprendizaje automático e hiperparámetros de modelos para tareas de clasificación y regresión.

… presentamos Hyperopt-Sklearn: un proyecto que aporta los beneficios de la configuración automática de algoritmos a los usuarios de Python y scikit-learn. Hyperopt-Sklearn utiliza Hyperopt para describir un espacio de búsqueda sobre las posibles configuraciones de los componentes de Scikit-Learn, incluyendo los módulos de preprocesamiento y clasificación.

– Hyperopt-Sklearn: Configuración automática de hiperparámetros para Scikit-Learn, 2014.

Ahora que estamos familiarizados con HyperOpt y HyperOpt-Sklearn, veamos cómo usar HyperOpt-Sklearn.

Cómo instalar y usar HyperOpt-Sklearn

El primer paso es instalar la biblioteca HyperOpt.

Esto se puede lograr usando el administrador de paquetes de pip como se indica a continuación:

Una vez instalado, podemos confirmar que la instalación se realizó con éxito y comprobar la versión de la biblioteca escribiendo el siguiente comando:

Esto resumirá la versión instalada de HyperOpt, confirmando que se está utilizando una versión moderna.

A continuación, debemos instalar la biblioteca HyperOpt-Sklearn.

Esto también puede ser instalado usando pip, aunque debemos realizar esta operación manualmente clonando el repositorio y ejecutando la instalación desde los archivos locales, de la siguiente manera:

Una vez más, podemos confirmar que la instalación se realizó con éxito comprobando el número de versión con el siguiente comando:

Esto resumirá la versión instalada de HyperOpt-Sklearn, confirmando que se está utilizando una versión moderna.

Ahora que las bibliotecas requeridas están instaladas, podemos revisar la API de HyperOpt-Sklearn.

Usar HyperOpt-Sklearn es sencillo. El proceso de búsqueda se define creando y configurando una instancia de la clase HyperoptEstimator.

Recomendado:  Herramientas visuales para la enseñanza del aprendizaje automático en K-12: un mapeo sistemático de diez años

El algoritmo utilizado para la búsqueda puede especificarse mediante el «algo«, el número de evaluaciones realizadas en la búsqueda se especifica a través del «max_evals«y se puede imponer un límite a la evaluación de cada oleoducto a través de latrial_timeout«argumento».

Hay muchos algoritmos de optimización diferentes disponibles, incluyendo:

  • Búsqueda aleatoria
  • Árbol de estimadores de Parzen
  • Recocido
  • Árbol
  • Árbol del Proceso Gaussiano

El «Árbol de estimadores de Parzen» es una buena opción por defecto, y puedes aprender más sobre los tipos de algoritmos en el artículo «Algoritmos para la optimización de hiperparámetros». [PDF]”

Para las tareas de clasificación, el «clasificador«especifica el espacio de búsqueda de los modelos, y para la regresión, elregressorEl argumento «Especifica el espacio de búsqueda de los modelos, que puede ser configurado para utilizar listas predefinidas de modelos proporcionadas por la biblioteca, por ejemplo».cualquier_clasificador«y»cualquier_regresor“.

De manera similar, el espacio de búsqueda de la preparación de los datos se especifica mediante la «preprocesamiento«y también puede utilizar una lista predefinida de pasos de preprocesamiento a través decualquier_preprocesamiento.

Para más información sobre los otros argumentos de la búsqueda, puede revisar el código fuente de la clase directamente:

Una vez definida la búsqueda, puede ser ejecutada llamando al fit() función.

Al final de la ejecución, el modelo de mejor rendimiento puede ser evaluado en nuevos datos llamando al puntuación() función.

Finalmente, podemos recuperar el Oleoducto de transformaciones, modelos y configuraciones de modelos que funcionaron mejor en el conjunto de datos de entrenamiento a través de la best_model() función.

Ahora que estamos familiarizados con el API, veamos algunos ejemplos trabajados.

HyperOpt-Sklearn para la clasificación

En esta sección, usaremos HyperOpt-Sklearn para descubrir un modelo para el conjunto de datos del sonar.

El conjunto de datos del sonar es un conjunto de datos estándar para el aprendizaje de la máquina, compuesto por 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 HyperOpt-Sklearn para encontrar un buen modelo para el conjunto de datos del sonar.

Podemos realizar una preparación básica de los datos, incluyendo la conversión de la cadena de objetivos a etiquetas de clase, y luego dividir el conjunto de datos en trenes y conjuntos de pruebas.

A continuación, podemos definir el procedimiento de búsqueda. Exploraremos todos los algoritmos de clasificación y todas las transformaciones de datos disponibles en la biblioteca y utilizaremos el algoritmo de búsqueda TPE, o Árbol de Estimadores Parciales, descrito en «Algoritmos para la Optimización de Hiper-Parámetros».

Recomendado:  Una breve introducción a BERT

La búsqueda evaluará 50 tuberías y limitará cada evaluación a 30 segundos.

Entonces empezamos la búsqueda.

Al final de la ejecución, informaremos sobre el rendimiento del modelo en el conjunto de datos de la reserva y resumiremos el conducto de mejor rendimiento.

A continuación se muestra el ejemplo completo.

Ejecutar el ejemplo puede llevar unos minutos.

Se informará sobre el progreso de la búsqueda y verá algunas advertencias que puede ignorar con seguridad.

Al final de la ejecución, el modelo de mejor rendimiento se evalúa en el conjunto de datos de retención y la tubería descubierta se imprime para su uso posterior.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el modelo elegido alcanzó una precisión de alrededor del 85,5 por ciento en el conjunto de pruebas de retención. El Pipeline implica un modelo de aumento de gradiente sin preprocesamiento.

El modelo impreso puede ser utilizado directamente, por ejemplo, el código copiado en otro proyecto.

A continuación, echemos un vistazo al uso de HyperOpt-Sklearn para un problema de modelado predictivo de regresión.

HyperOpt-Sklearn para la regresión

En esta sección, usaremos HyperOpt-Sklearn para descubrir un modelo para el conjunto de datos de la vivienda.

El conjunto de datos de la vivienda es un conjunto de datos estándar de aprendizaje de la máquina compuesto por 506 filas de datos con 13 variables numéricas de entrada y una variable numérica de destino.

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

El conjunto de datos implica la predicción del precio de la casa, dados los detalles del suburbio de la casa en la ciudad americana de Boston.

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 una variable de entrada.

A continuación, podemos usar HyperOpt-Sklearn para encontrar un buen modelo para el conjunto de datos del seguro de automóviles.

Usar HyperOpt-Sklearn para la regresión es lo mismo que usarlo para la clasificación, excepto el «regressorEl argumento de «debe especificarse».

En este caso, queremos optimizar el MAE, por lo tanto, estableceremos el «pérdida_fn» argumento a la error_absoluto_medio() función proporcionada por la biblioteca de aprendizaje de ciencias.

A continuación se muestra el ejemplo completo.

Ejecutar el ejemplo puede llevar unos minutos.

Se informará sobre el progreso de la búsqueda y verá algunas advertencias que puede ignorar con seguridad.

Al final de la tirada, el modelo de mejor rendimiento se evalúa en el conjunto de datos de la retención y el Pipeline descubierto se imprime para su uso posterior.

Nota: Sus resultados pueden variar dada la naturaleza estocástica del algoritmo o el procedimiento de evaluación, o las diferencias en la precisión numérica. Considere ejecutar el ejemplo unas cuantas veces y compare el resultado promedio.

En este caso, podemos ver que el modelo elegido alcanzó un MAE de alrededor de 0,883 en el conjunto de pruebas de retención, lo que parece hábil. El Pipeline implica un XGBRegressor modelo sin preprocesamiento.

Notapara que la búsqueda utilice XGBoost, debes tener la biblioteca de XGBoost instalada.

Más lecturas

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

Resumen

En este tutorial, descubriste cómo usar HyperOpt para el aprendizaje automático de máquinas con Scikit-Learn en Python.

Específicamente, aprendiste:

  • Hyperopt-Sklearn es una biblioteca de código abierto para AutoML con preparación de datos scikit-learn y modelos de aprendizaje automático.
  • Cómo usar Hyperopt-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de clasificación.
  • Cómo usar Hyperopt-Sklearn para descubrir automáticamente modelos de alto rendimiento para 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