![](https://topbigdata.es/wp-content/uploads/2020/09/HyperOptar-por-el-aprendizaje-automatico-de-la-maquina-con-Scikit-Learn.jpg)
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](https://topbigdata.es/wp-content/uploads/2020/09/HyperOptar-por-el-aprendizaje-automatico-de-la-maquina-con-Scikit-Learn.jpg)
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:
- HyperOpt y HyperOpt-Sklearn
- Cómo instalar y usar HyperOpt-Sklearn
- HyperOpt-Sklearn para la clasificación
- 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:
sudo pip instalar hyperopt |
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.
Nombre: hyperopt Versión: 0.2.3 Resumen: Optimización de Hiperparámetros Asíncronos Distribuidos Página web: http://hyperopt.github.com/hyperopt/ Autor: James Bergstra Correo electrónico del autor: james.bergstra@gmail.com Licencia: BSD Ubicación: … Requiere: tqdm, seis, networkx, futuro, scipy, cloudpickle, numpy Requerido por: |
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:
git clon git@github.com:hyperopt/hyperopt-sklearn.git cd hyperopt-sklearn sudo pip instalar . cd .. |
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.
Nombre: hpsklearn Versión: 0.0.3 Resumen: Optimización de hiperparámetros para el aprendizaje de la piel Página de inicio: http://hyperopt.github.com/hyperopt-sklearn/ Autor: James Bergstra Correo electrónico del autor: anon@anon.com Licencia: BSD Ubicación: … Requiere: nariz, aprendizaje de la ciencia, adormecimiento, ciencia, hiperopción… Requerido por: |
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.
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».
... # Definir la búsqueda modelo = HiperoptEstimador(..., algo=tpe.sugerir, max_evals=50, trial_timeout=120) |
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.
... # Definir la búsqueda modelo = HiperoptEstimador(clasificador=cualquier_clasificador(«cla), preprocesamiento=cualquier_preprocesamiento(«pre), ...) |
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.
... # realizar la búsqueda modelo.encajar(X_tren, y_tren) |
Al final de la ejecución, el modelo de mejor rendimiento puede ser evaluado en nuevos datos llamando al puntuación() función.
... # Resumir el rendimiento acc = modelo.puntuación(X_test, y_test) imprimir(«Precisión: %.3f» % acc) |
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.
... # Resumir el mejor modelo imprimir(modelo.best_model()) |
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.
# Resumir el conjunto de datos del sonar de pandas importación lea_csv # Cargar conjunto de datos url = «https://raw.githubusercontent.com/jbrownlee/Datasets/master/sonar.csv dataframe = read_csv(url, encabezado=Ninguno) # Dividido en elementos de entrada y salida datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] imprimir(X.forma, y.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.
... # Preparar mínimamente el conjunto de datos X = X.astype(«Float32) y = LabelEncoder().fit_transform(y.astype(«str)) # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) |
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».
La búsqueda evaluará 50 tuberías y limitará cada evaluación a 30 segundos.
... # Definir la búsqueda modelo = HiperoptEstimador(clasificador=cualquier_clasificador(«cla), preprocesamiento=cualquier_preprocesamiento(«pre), algo=tpe.sugerir, max_evals=50, trial_timeout=30) |
Entonces empezamos la búsqueda.
... # realizar la búsqueda modelo.encajar(X_tren, y_tren) |
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.
... # Resumir el rendimiento acc = modelo.puntuación(X_test, y_test) imprimir(«Precisión: %.3f» % acc) # Resumir el mejor modelo imprimir(modelo.best_model()) |
A continuación se muestra el ejemplo completo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# Ejemplo de hiperopto-aprendizaje para el conjunto de datos de clasificación del sonar de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.preprocesamiento importación LabelEncoder de hpsklearn importación HiperoptEstimador de hpsklearn importación cualquier_clasificador de hpsklearn importación cualquier_preprocesamiento de hyperopt importación tpe # Cargar conjunto de datos url = «https://raw.githubusercontent.com/jbrownlee/Datasets/master/sonar.csv dataframe = read_csv(url, encabezado=Ninguno) # Dividido en elementos de entrada y salida datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] # Preparar mínimamente el conjunto de datos X = X.astype(«Float32) y = LabelEncoder().fit_transform(y.astype(«str)) # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Definir la búsqueda modelo = HiperoptEstimador(clasificador=cualquier_clasificador(«cla), preprocesamiento=cualquier_preprocesamiento(«pre), algo=tpe.sugerir, max_evals=50, trial_timeout=30) # realizar la búsqueda modelo.encajar(X_tren, y_tren) # Resumir el rendimiento acc = modelo.puntuación(X_test, y_test) imprimir(«Precisión: %.3f» % acc) # Resumir el mejor modelo imprimir(modelo.best_model()) |
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.
Precisión: 0,855 Aprendizaje: GradientBoostingClassifier(ccp_alpha=0.0, criterion=’friedman_mse’, init=None, learning_rate=0.009132299586303643, loss=»deviance», max_depth=None, max_features=»sqrt», max_leaf_nodes=Ninguna, min_impurity_decrease=0.0, min_impurity_split=Ninguna, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, n_estimadores=342, n_iter_no_cambio=Ninguno, presort=»auto», random_state=2, subsample=0.6844206624548879, tol=0.0001, fracción_validación=0.1, verboso=0, warm_start=Falso), ‘preprocesos’: (), ‘ex_preprocs’: ()} |
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.
# Resumir el conjunto de datos del seguro de auto de pandas importación lea_csv # Cargar conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) # Dividido en elementos de entrada y salida datos = dataframe.valores X, y = datos[[:, :–1], datos[[:, –1] imprimir(X.forma, y.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.
... # Definir la búsqueda modelo = HiperoptEstimador(regressor=cualquier_regresor(«reg), preprocesamiento=cualquier_preprocesamiento(«pre), pérdida_fn=error_absoluto_medio, algo=tpe.sugerir, max_evals=50, trial_timeout=30) |
A continuación se muestra el ejemplo completo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# Ejemplo de hiperopt-sklearn para el conjunto de datos de regresión de la vivienda de pandas importación read_csv de sklearn.model_selection importación prueba_de_trenes_split de sklearn.métrica importación error_absoluto_medio de hpsklearn importación HiperoptEstimador de hpsklearn importación cualquier_regresor de hpsklearn importación cualquier_preprocesamiento de hyperopt importación tpe # Cargar conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv’ dataframe = read_csv(url, encabezado=Ninguno) # Dividido en elementos de entrada y salida datos = dataframe.valores datos = datos.astype(«Float32) X, y = datos[[:, :–1], datos[[:, –1] # Dividido en tren y conjuntos de prueba X_tren, X_test, y_tren, y_test = prueba_de_trenes_split(X, y, tamaño_de_prueba=0.33, estado_aleatorio=1) # Definir la búsqueda modelo = HiperoptEstimador(regressor=cualquier_regresor(«reg), preprocesamiento=cualquier_preprocesamiento(«pre), pérdida_fn=error_absoluto_medio, algo=tpe.sugerir, max_evals=50, trial_timeout=30) # realizar la búsqueda modelo.encajar(X_tren, y_tren) # Resumir el rendimiento mae = modelo.puntuación(X_test, y_test) imprimir(«MAE: %.3f» % mae) # Resumir el mejor modelo imprimir(modelo.best_model()) |
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.
MAE: 0.883 Aprendizaje: XGBRegressor(base_score=0.5, booster=»gbtree», colsample_bylevel=0.5843250948679669, colsample_bynode=1, colsample_bytree=0.6635160670570662, gamma=6.923399395303031e-05, importance_type=»gain», learning_rate=0.07021104887683309, max_delta_step=0, max_depth=3, min_child_weight=5, missing=nan, n_estimadores=4000, n_trabajos=1, nthread=None, objetivo=»reg:linear», random_state=0, reg_alpha=0.5690202874759704, reg_lambda=3.3098341637038, scale_pos_weight=1, seed=1, silencioso=Ninguno, submuestra=0.7194797262656784, verbosidad=1), ‘preprocesos’: (), ‘ex_preprocs’: ()} |
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.