Saltar al contenido

Scikit-Optimize para la sintonía de hiperparámetros en el aprendizaje de máquinas

4 de septiembre de 2020

La optimización de hiperparámetros se refiere a la realización de una búsqueda con el fin de descubrir el conjunto de argumentos de configuración de un modelo específico que dan como resultado el mejor rendimiento del modelo en un conjunto de datos específico.

Hay muchas maneras de realizar la optimización de hiperparámetros, aunque los métodos modernos, como la optimización bayesiana, son rápidos y eficaces. En el sitio web Biblioteca de Scikit-Optimize es una biblioteca Python de código abierto que proporciona una implementación de la Optimización Bayesiana que puede utilizarse para afinar los hiperparámetros de los modelos de aprendizaje de máquinas de la biblioteca Python de scikit-Learn.

Puedes usar fácilmente la biblioteca de Scikit-Optimize para afinar los modelos en tu próximo proyecto de aprendizaje de máquinas.

En este tutorial, descubrirá cómo utilizar la biblioteca Scikit-Optimize para usar la Optimización Bayesiana para la sintonización de hiperparámetros.

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

  • Scikit-Optimize proporciona un conjunto de herramientas generales para la optimización bayesiana que puede utilizarse para la sintonización de hiperparámetros.
  • Cómo usar manualmente la biblioteca Scikit-Optimize para afinar los hiperparámetros de un modelo de aprendizaje de máquina.
  • Cómo usar la clase incorporada BayesSearchCV para realizar la sintonización del modelo de hiperparámetros.

Empecemos.

Scikit-Optimize para la sintonía de hiperparámetros en el aprendizaje de máquinas

Scikit-Optimize para la sintonía de hiperparámetros en el aprendizaje de máquinas
Foto de Dan Nevill, algunos derechos reservados.

Resumen del Tutorial

Este tutorial está dividido en cuatro partes; son:

  1. Scikit-Optimize
  2. Conjunto de datos y modelo de aprendizaje automático
  3. Ajustar manualmente los hiperparámetros de los algoritmos
  4. Sintonizar automáticamente los hiperparámetros de los algoritmos

Scikit-Optimize

Scikit-Optimize, o skopt para abreviar, es una librería Python de código abierto para realizar tareas de optimización.

Ofrece algoritmos de optimización eficientes, como la optimización bayesiana, y puede utilizarse para encontrar el mínimo o el máximo de funciones de costo arbitrario.

La optimización bayesiana proporciona una técnica de principios basada en el Teorema de Bayes para dirigir la búsqueda de un problema de optimización global que sea eficiente y eficaz. Funciona construyendo un modelo probabilístico de la función objetiva, denominada función sustitutiva, que se busca luego de manera eficiente con una función de adquisición antes de elegir muestras candidatas para su evaluación en la función objetiva real.

Para más información sobre el tema de la Optimización Bayesiana, vea el tutorial:

Es importante destacar que la biblioteca proporciona apoyo para ajustar los hiperparámetros de los algoritmos de aprendizaje de máquinas que ofrece la biblioteca de aprendizaje de ciencias, la llamada optimización de hiperparámetros. Como tal, ofrece una alternativa eficiente a los procedimientos de optimización de hiperparámetros menos eficientes como la búsqueda en cuadrículas y la búsqueda aleatoria.

La biblioteca de optimización de la ciencia puede ser instalada usando pip, de la siguiente manera:

Una vez instalada, podemos importar la biblioteca e imprimir el número de versión para confirmar que la biblioteca se instaló con éxito y se puede acceder a ella.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo se reporta el número de versión actualmente instalada de scikit-optimize.

Su número de versión debería ser el mismo o más alto.

Para más instrucciones de instalación, vea la documentación:

Ahora que estamos familiarizados con lo que es Scikit-Optimize y cómo instalarlo, exploremos cómo podemos usarlo para afinar los hiperparámetros de un modelo de aprendizaje de una máquina.

Conjunto de datos y modelo de aprendizaje automático

Primero, seleccionemos un conjunto de datos estándar y un modelo para abordarlo.

Usaremos el conjunto de datos de aprendizaje de la máquina de la ionosfera. Se trata de un conjunto de datos estándar de aprendizaje por máquina que comprende 351 filas de datos con tres 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 64 por ciento. Un modelo de alto rendimiento puede lograr una precisión en este mismo arnés de prueba de alrededor del 94 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 las mediciones de la ionosfera indican una estructura específica o no.

Puedes aprender más sobre el conjunto de datos aquí:

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 351 filas de datos con 34 variables de entrada.

Podemos evaluar un modelo de máquina de vector de apoyo (SVM) en este conjunto de datos utilizando una validación cruzada estratificada repetida.

Recomendado:  Una suave introducción a la diversidad de conjuntos para el aprendizaje automático

Podemos informar del rendimiento medio del modelo en el conjunto de datos promediado en todos los pliegues y repeticiones, lo que proporcionará una referencia para la sintonización del modelo de hiperparámetros realizada en secciones posteriores.

El ejemplo completo figura a continuación.

Ejecutando el ejemplo primero carga y prepara el conjunto de datos, luego evalúa el modelo SVM en el conjunto de datos.

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 SVM con hiperparámetros por defecto alcanzó una precisión media de clasificación de alrededor del 83,7 por ciento, que es hábil y cercana al rendimiento máximo en el problema del 94 por ciento.

A continuación, veamos si podemos mejorar el rendimiento afinando los hiperparámetros del modelo usando la biblioteca de Scikit-optimize.

Ajustar manualmente los hiperparámetros de los algoritmos

La biblioteca de Scikit-Optimize puede ser usada para afinar los hiperparámetros de un modelo de aprendizaje de una máquina.

Podemos lograrlo manualmente usando las capacidades de optimización bayesiana de la biblioteca.

Esto requiere que primero definamos un espacio de búsqueda. En este caso, estos serán los hiperparámetros del modelo que deseamos afinar, y el alcance o rango de cada hiperparámetro.

Afinaremos los siguientes hiperparámetros del modelo SVM:

  • Cel parámetro de regularización.
  • núcleoel tipo de núcleo utilizado en el modelo.
  • gradoutilizado para el núcleo del polinomio.
  • gammaque se usa en la mayoría de los otros núcleos.

Para los hiperparámetros numéricos C y gamma…definiremos una escala de registro para buscar entre un pequeño valor de 1e-6 y 100. Grado es un número entero y buscaremos valores entre 1 y 5. Finalmente, el núcleo es una variable categórica con valores nombrados específicos.

Podemos definir el espacio de búsqueda de estos cuatro hiperparámetros, una lista de tipos de datos de la biblioteca de skopt, de la siguiente manera:

Anote el tipo de datos, el rango y el nombre del hiperparámetro especificado para cada uno.

Podemos entonces definir una función que será llamada por el procedimiento de búsqueda. Esta es una función esperada por el procedimiento de optimización más adelante y toma un modelo y un conjunto de hiperparámetros específicos para el modelo, lo evalúa y devuelve una puntuación para el conjunto de hiperparámetros.

En nuestro caso, queremos evaluar el modelo usando la validación cruzada estratificada 10 veces repetida en nuestro conjunto de datos de la ionosfera. Queremos maximizar la precisión de la clasificación, por ejemplo, encontrar el conjunto de hiperparámetros del modelo que den la mejor precisión. Por defecto, el proceso minimiza la puntuación devuelta por esta función, por lo tanto, devolveremos uno menos la precisión, por ejemplo, la habilidad perfecta será (1 – precisión) o 0,0, y la peor habilidad será 1,0.

El evaluate_model() La función a continuación implementa esto y toma un conjunto específico de hiperparámetros.

Recomendado:  Aprovechar los gráficos de conocimiento para enriquecer el aprendizaje automático

A continuación, podemos ejecutar la búsqueda llamando al gp_minimize() y pasando el nombre de la función a llamar para evaluar cada modelo y el espacio de búsqueda para optimizar.

El procedimiento se llevará a cabo hasta que converja y devuelva un resultado.

El objeto resultante contiene muchos detalles, pero lo más importante es que podemos acceder a la puntuación de la configuración con mejor rendimiento y a los hiperparámetros utilizados por el mejor modelo de formación.

A continuación se muestra el ejemplo completo de la sintonización manual de los hiperparámetros de un SVM en el conjunto de datos de la ionosfera.

Ejecutar el ejemplo puede llevar unos momentos, dependiendo de la velocidad de su máquina.

Puede que vea algunos mensajes de advertencia que puede ignorar con seguridad, como:

Al final de la ejecución, se informa de la configuración de mejor rendimiento.

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 la configuración, reportada en orden de la lista de espacio de búsqueda, fue una modesta C valor, un RBF núcleo, a grado de 2 (ignorado por el núcleo RBF), y un modesto gamma valor.

Lo importante es que podemos ver que la habilidad de este modelo era aproximadamente 94,7 por ciento, que es un modelo de alto rendimiento

Esta no es la única manera de usar la biblioteca de Scikit-Optimize para la sintonía de hiperparámetros. En la siguiente sección, podemos ver un enfoque más automatizado.

Sintonizar automáticamente los hiperparámetros de los algoritmos

La biblioteca de aprendizaje de máquinas Scikit-Learn proporciona herramientas para afinar los hiperparámetros del modelo.

Específicamente, proporciona las clases GridSearchCV y RandomizedSearchCV que toman un modelo, un espacio de búsqueda y una configuración de validación cruzada.

El beneficio de estas clases es que el procedimiento de búsqueda se realiza automáticamente, requiriendo una configuración mínima.

De manera similar, la biblioteca Scikit-Optimize proporciona una interfaz similar para realizar una optimización bayesiana de los hiperparámetros del modelo a través de la clase BayesSearchCV.

Esta clase puede ser usada de la misma manera que los equivalentes de Scikit-Learn.

En primer lugar, el espacio de búsqueda debe definirse como un diccionario con los nombres de los hiperparámetros utilizados como clave y el alcance de la variable como valor.

Podemos entonces definir el BayesSearchCV configuración tomando el modelo que deseamos evaluar, el espacio de búsqueda de hiperparámetros y la configuración de validación cruzada.

Podemos entonces ejecutar la búsqueda y reportar el mejor resultado y configuración al final.

Enlazando esto, el ejemplo completo de sintonización automática de hiperparámetros SVM usando la clase BayesSearchCV en el conjunto de datos de la ionosfera se enumera a continuación.

Ejecutar el ejemplo puede llevar unos momentos, dependiendo de la velocidad de su máquina.

Puede que vea algunos mensajes de advertencia que puede ignorar con seguridad, como:

Al final de la ejecución, se informa de la configuración de mejor rendimiento.

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 se desempeñó por encima de los modelos de mayor rendimiento logrando una precisión de clasificación media de alrededor del 95,2 por ciento.

La búsqueda descubrió una gran C valor, un RBF núcleoy un pequeño gamma valor.

Esto proporciona una plantilla que puede utilizar para ajustar los hiperparámetros en su proyecto de aprendizaje de la máquina.

Más lecturas

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

Tutoriales relacionados

APIs

Resumen

En este tutorial, usted descubrió cómo utilizar la biblioteca Scikit-Optimize para usar la Optimización Bayesiana para la sintonización de hiperparámetros.

Específicamente, aprendiste:

  • Scikit-Optimize proporciona un conjunto de herramientas generales para la optimización bayesiana que puede utilizarse para la sintonización de hiperparámetros.
  • Cómo usar manualmente la biblioteca Scikit-Optimize para afinar los hiperparámetros de un modelo de aprendizaje de máquina.
  • Cómo usar la clase incorporada BayesSearchCV para realizar la sintonización del modelo de hiperparámetros.

¿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