Última actualización el 7 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.
Auto-Sklearn es una biblioteca de código abierto para realizar AutoML en Python. Utiliza la popular biblioteca de aprendizaje automático Scikit-Learn para transformaciones de datos y algoritmos de aprendizaje automático y utiliza un procedimiento de búsqueda de optimización bayesiana para descubrir de forma eficiente un modelo de tuberías de alto rendimiento para un conjunto de datos determinado.
En este tutorial, descubrirás cómo utilizar Auto-Sklearn para AutoML con los algoritmos de aprendizaje automático Scikit-Learn en Python.
Después de completar este tutorial, lo sabrás:
- Auto-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 Auto-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de clasificación.
- Cómo usar Auto-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de regresión.
Empecemos.
Resumen del Tutorial
Este tutorial está dividido en cuatro partes; son:
- AutoML con Auto-Sklearn
- Instalar y usar Auto-Sklearn
- Auto-aprendizaje para la clasificación
- Auto-aprendizaje para la regresión
AutoML con Auto-Sklearn
El Aprendizaje Automático de Máquinas, o AutoML para abreviar, es un proceso de descubrimiento de la tubería de mejor rendimiento de las transformaciones de datos, el modelo y la configuración del modelo para un conjunto de datos.
El AutoML a menudo implica el uso de sofisticados algoritmos de optimización, como la Optimización Bayesiana, para navegar eficientemente por el espacio de los posibles modelos y configuraciones de modelos y descubrir rápidamente lo que funciona bien para una determinada tarea de modelación predictiva. Permite a los profesionales no expertos en aprendizaje automático descubrir rápida y fácilmente lo que funciona bien o incluso mejor para un determinado conjunto de datos con muy pocos antecedentes técnicos o de entrada directa.
Auto-Sklearn es una biblioteca de Python de código abierto para AutoML que utiliza modelos de aprendizaje automático de la biblioteca de aprendizaje automático de Scikit-learn.
Fue desarrollado por Matthias Feurer, et al. y descrito en su documento de 2015 titulado «Aprendizaje automático eficiente y robusto».
… introducimos un nuevo y robusto sistema de AutoML basado en scikit-learn (utilizando 15 clasificadores, 14 métodos de preprocesamiento de características y 4 métodos de preprocesamiento de datos, dando lugar a un espacio de hipótesis estructurado con 110 hiperparámetros).
– Aprendizaje automático eficiente y robusto, 2015.
La ventaja de Auto-Sklearn es que, además de descubrir la preparación de datos y el modelo que funciona para un conjunto de datos, también es capaz de aprender de los modelos que funcionaron bien en conjuntos de datos similares y es capaz de crear automáticamente un conjunto de modelos de alto rendimiento descubiertos como parte del proceso de optimización.
Este sistema, que denominamos AUTO-SKLEARN, mejora los métodos existentes de AutoML al tener en cuenta automáticamente el rendimiento pasado en conjuntos de datos similares, y al construir conjuntos a partir de los modelos evaluados durante la optimización.
– Aprendizaje automático eficiente y robusto, 2015.
Los autores ofrecen una útil descripción de su sistema en el documento, que se presenta a continuación.
Instalar y usar Auto-Sklearn
El primer paso es instalar la biblioteca de Auto-Sklearn, que se puede lograr usando pip, de la siguiente manera:
sudo pip instalar autosklearn |
Una vez instalado, podemos importar la biblioteca e imprimir el número de versión para confirmar que se instaló con éxito:
# Imprimir versión de autoaprendizaje importación autosklearn imprimir(«Autoaprendizaje»: %s’ % autosklearn.La versión…) |
Ejecutando el ejemplo se imprime el número de versión.
Su número de versión debería ser el mismo o más alto.
El uso de Auto-Sklearn es sencillo.
Dependiendo de si su tarea de predicción es de clasificación o de regresión, usted crea y configura una instancia de la clase AutoSklearnClassifier o AutoSklearnRegressor, la ajusta en su conjunto de datos, y eso es todo. El modelo resultante se puede utilizar para hacer predicciones directamente o guardarse en un archivo (utilizando pickle) para su uso posterior.
... # Definir la búsqueda modelo = AutoSklearnClassifier() # realizar la búsqueda modelo.encajar(X_tren, y_tren) |
Hay una tonelada de opciones de configuración proporcionadas como argumentos a la clase de Autoaprendizaje.
De forma predeterminada, la búsqueda utilizará una división de prueba de trenes de su conjunto de datos durante la búsqueda, y este valor predeterminado se recomienda tanto para la velocidad como para la simplicidad.
Lo importante es que deberías poner el «n_jobs» argumento al número de núcleos en su sistema, por ejemplo, 8 si tiene 8 núcleos.
El proceso de optimización se llevará a cabo durante el tiempo que usted permita, medido en minutos. Por defecto, se ejecutará durante una hora.
Recomiendo que se establezca el «tiempo_de_esta_tarea«…por el número de segundos que quieres que dure el proceso. Por ejemplo, menos de 5-10 minutos es probablemente suficiente para muchas pequeñas tareas de modelado predictivo (menos de 1.000 filas).
Usaremos 5 minutos (300 segundos) para los ejemplos de este tutorial. También limitaremos el tiempo asignado a cada evaluación del modelo a 30 segundos a través de la función «límite_de_tiempo_por_corrido«argumento». Por ejemplo:
... # Definir la búsqueda modelo = AutoSklearnClassifier(tiempo_de_esta_tarea=120, límite_de_tiempo_por_corrido=30, n_jobs=8) |
Puede limitar los algoritmos considerados en la búsqueda, así como las transformaciones de datos.
Por defecto, la búsqueda creará un conjunto de modelos de alto rendimiento descubiertos como parte de la búsqueda. A veces, esto puede llevar a una sobrecarga y puede ser desactivado por el ajuste de la «tamaño_de_conjunto» argumento a 1 y «configuraciones_iniciales_vía_aprendizaje_de_metal» a 0.
... # Definir la búsqueda modelo = AutoSklearnClassifier(tamaño_de_conjunto=1, configuraciones_iniciales_vía_aprendizaje_de_metal=0) |
Al final de una corrida, se puede acceder a la lista de modelos, así como a otros detalles.
Tal vez la característica más útil es la sprint_statistics() que resume la búsqueda y el rendimiento del modelo final.
... # Resumir el rendimiento imprimir(modelo.sprint_statistics()) |
Ahora que estamos familiarizados con la biblioteca de Auto-Sklearn, veamos algunos ejemplos trabajados.
Auto-aprendizaje para la clasificación
En esta sección, usaremos Auto-aprendizaje 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.
Usaremos Auto-Sklearn para encontrar un buen modelo para el conjunto de datos del sonar.
Primero, dividiremos el conjunto de datos en conjuntos de entrenamiento y de prueba y permitiremos que el proceso encuentre un buen modelo en el conjunto de entrenamiento, para luego evaluar el rendimiento de lo que se encontró en el conjunto de pruebas de retención.
... # 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) |
El AutoSklearnClassifier está configurado para funcionar durante 5 minutos con 8 núcleos y limitar cada evaluación del modelo a 30 segundos.
... # Definir la búsqueda modelo = AutoSklearnClassifier(tiempo_de_esta_tarea=5*60, límite_de_tiempo_por_corrido=30, n_jobs=8) |
La búsqueda se realiza entonces en el conjunto de datos de entrenamiento.
... # realizar la búsqueda modelo.encajar(X_tren, y_tren) |
Posteriormente, se informa de un resumen de la búsqueda y del modelo de mejor rendimiento.
... # Resumir imprimir(modelo.sprint_statistics()) |
Finalmente, evaluamos el rendimiento del modelo que se preparó en el conjunto de datos de la prueba de retención.
... # Evaluar el mejor modelo y_hat = modelo.predecir(X_test) acc = accuracy_score(y_test, y_hat) imprimir(«Precisión: %.3f» % acc) |
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 auto-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 sklearn.métrica importación accuracy_score de autosklearn.clasificación importación AutoSklearnClassifier # Cargar conjunto de datos url = «https://raw.githubusercontent.com/jbrownlee/Datasets/master/sonar.csv dataframe = read_csv(url, encabezado=Ninguno) # print(dataframe.head()) # 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 = AutoSklearnClassifier(tiempo_de_esta_tarea=5*60, límite_de_tiempo_por_corrido=30, n_jobs=8) # realizar la búsqueda modelo.encajar(X_tren, y_tren) # Resumir imprimir(modelo.sprint_statistics()) # Evaluar el mejor modelo y_hat = modelo.predecir(X_test) acc = accuracy_score(y_test, y_hat) imprimir(«Precisión: %.3f» % acc) |
Ejecutar el ejemplo llevará unos cinco minutos, dado el duro límite que le impusimos a la carrera.
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.
Al final de la tirada, se imprime un resumen que muestra que se evaluaron 1.054 modelos y que el rendimiento estimado del modelo final fue del 91%.
resultados de auto-aprendizaje: Nombre del conjunto de datos: f4c282bd4b56d4db7e5f7fe1a6a8edeb Métrico: precisión Mejor puntuación de validación: 0,913043 Número de ejecuciones del algoritmo del objetivo: 1054 Número de ejecuciones exitosas del algoritmo del objetivo: 952 Número de ejecuciones del algoritmo del objetivo estrellado: 94 Número de algoritmos objetivo que superaron el límite de tiempo: 8 Número de algoritmos objetivo que superaron el límite de la memoria: 0 |
Luego evaluamos el modelo en el conjunto de datos de retención y vemos que se logró una precisión de clasificación del 81,2 por ciento, lo cual es razonablemente hábil.
Auto-aprendizaje para la regresión
En esta sección, usaremos Auto-Sklearn para descubrir un modelo 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 consta de 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 tres 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.
# 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/auto-insurance.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.
Usaremos Auto-Sklearn para encontrar un buen modelo para el conjunto de datos del seguro de auto.
Podemos utilizar el mismo proceso que se utilizó en la sección anterior, aunque utilizaremos el AutoSklearnRegressor en lugar de la clase AutoSklearnClassifier.
... # Definir la búsqueda modelo = AutoSklearnRegressor(tiempo_de_esta_tarea=5*60, límite_de_tiempo_por_corrido=30, n_jobs=8) |
Por defecto, el regresor optimizará la métrica R^2.
En este caso, estamos interesados en el error absoluto medio, o MAE, que podemos especificar a través de la «métrico» argumento cuando se llama a la fit() función.
... # realizar la búsqueda modelo.encajar(X_tren, y_tren, métrico=auto_medio_absoluto_error) |
El ejemplo completo figura a continuación.
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 |
# Ejemplo de auto-aprendizaje para el conjunto de datos de regresión del seguro 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 autosklearn.regresión importación AutoSklearnRegressor de autosklearn.métrica importación error_absoluto_medio como auto_medio_absoluto_error # Cargar conjunto de datos url = ‘https://raw.githubusercontent.com/jbrownlee/Datasets/master/auto-insurance.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 = AutoSklearnRegressor(tiempo_de_esta_tarea=5*60, límite_de_tiempo_por_corrido=30, n_jobs=8) # realizar la búsqueda modelo.encajar(X_tren, y_tren, métrico=auto_medio_absoluto_error) # Resumir imprimir(modelo.sprint_statistics()) # Evaluar el mejor modelo y_hat = modelo.predecir(X_test) mae = error_absoluto_medio(y_test, y_hat) imprimir(«MAE: %.3f» % mae) |
Ejecutar el ejemplo llevará unos cinco minutos, dado el duro límite que le impusimos a la carrera.
Puede que veas algunos mensajes de advertencia durante la carrera y puedes ignorarlos con seguridad, como por ejemplo:
El algoritmo del objetivo devolvió NaN o inf como calidad. La ejecución del algoritmo se trata como CRASHED, el costo se establece en 1.0 para los escenarios de calidad. (Cambiar el valor a través de la opción «costo_por_crash».) |
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.
Al final de la tirada, se imprime un resumen que muestra que se evaluaron 1.759 modelos y que el rendimiento estimado del modelo final fue un MAE de 29.
resultados de auto-aprendizaje: Nombre del conjunto de datos: ff51291d93f33237099d48c48ee0f9ad Métrico: mean_absolute_error Mejor puntuación de validación: 29.911203 Número de ejecuciones del algoritmo del objetivo: 1759 Número de ejecuciones exitosas del algoritmo del objetivo: 1362 Número de ejecuciones del algoritmo del objetivo estrellado: 394 Número de algoritmos objetivo que superaron el límite de tiempo: 3 Número de algoritmos objetivo que superaron el límite de la memoria: 0 |
Luego evaluamos el modelo en el conjunto de datos de retención y vemos que se logró un MAE de 26, lo cual es un gran resultado.
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 Auto-Sklearn para AutoML con los algoritmos de aprendizaje automático Scikit-Learn en Python.
Específicamente, aprendiste:
- Auto-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 Auto-Sklearn para descubrir automáticamente modelos de alto rendimiento para tareas de clasificación.
- Cómo usar Auto-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.