Curso
El machine learning ya no es un término extraño gracias a organizaciones como DataCamp, Coursera, Udacity y muchas otras que trabajan sin descanso para acercar una formación flexible y eficaz en machine learning a todo el mundo. Gracias a sus plataformas, hoy es muy fácil empezar en este campo casi sin requisitos previos. Sin embargo, el término Automated Machine Learning (AutoML) está ganando mucha visibilidad en los foros de formación en ciencia de datos. Empresas como Google o H2O.ai, entre otras, están haciendo un gran trabajo en esta área. No es un tema tan común como el machine learning a secas. Al fin y al cabo, el ML ya aborda en parte la automatización; así que es lógico que surja la pregunta: "¿También se puede automatizar el machine learning?"
En este tutorial encontrarás respuesta a muchas preguntas como esta.
Vamos al lío.
Entender un flujo de trabajo estándar de machine learning
Cuando resuelves un problema como Data Scientist, tu flujo de trabajo típico se parece a esto:
- Recopilación de datos
- Preprocesamiento de datos
- Inicializar un modelo de ML adecuado para el problema
- Entrenar el modelo
- Probar el modelo
- Ajustar los hiperparámetros del modelo
- Volver a probar el modelo
- Comunicar los resultados
El segundo paso, preprocesamiento de datos, es muy amplio porque suele ser una de las tareas más costosas en tiempo e incluye subtareas como limpieza, transformación, selección de variables, etc. Los pasos del 3 al 7 corresponden a un único modelo de ML. Una buena práctica no es quedarse en un solo modelo: lo normal es probar varios para comparar sus resultados y elegir el mejor. Y ahí llega otro bloque muy laborioso: ¿qué modelo elegir?
La siguiente cita sobre el proceso de depuración en ML no puede ser más certera y conviene tenerla presente:
Con esto ya te haces una idea de una tarea estándar de ingeniería de ML. Al final tendrás que decidir qué modelo es el mejor para tu problema y explicar por qué. Muchas veces habrá muchísimas combinaciones posibles que probar y el plazo apretará. ¿Te suena el panorama? Sigamos.
¿Cómo se puede automatizar el flujo de trabajo de ML?
Vamos a centrarnos en cómo decidir el mejor modelo para un problema cuando las opciones se multiplican y el tiempo escasea.
Al inicio de este tutorial planteábamos: "¿También se puede automatizar el machine learning?" No es ninguna tontería. El propio Sebastian Raschka describió AutoML en una entrevista como "la automatización de automatizar la automatización".
Vuelve al paso 5 del flujo estándar que acabas de ver: ajustar los hiperparámetros del modelo. Imagina que ya tienes los datos listos y arrancas un clasificador $X$. Supón que $X$ tiene 5 hiperparámetros. Tendrás que probar el mismo clasificador $X$ con distintas combinaciones de valores, lo cual no es precisamente trivial. Y ahora viene lo peor: tras muchas combinaciones, los resultados siguen sin ser buenos. Decides entonces probar cuatro clasificadores más (cada uno con 6 hiperparámetros). ¿Te haces una idea del tiempo que puede llevar? Y si aun así no hay buenos resultados, investigar por qué será otro proceso muy costoso.
De aquí nace la idea de AutoML.
"Si hay que construir numerosos modelos de ML con distintos algoritmos y múltiples configuraciones de hiperparámetros, entonces la construcción de modelos puede automatizarse, al igual que la comparación de su rendimiento y precisión." - KDNuggets
Ahora ya entiendes por qué el término Automated Machine Learning está tan en boca de todos en la comunidad de ciencia de datos. En la siguiente sección veremos más sobre AutoML.
Introducción al Automated Machine Learning
Ajustar hiperparámetros para diferentes modelos de ML también suele llevar mucho tiempo. En términos más de informática, el ajuste de hiperparámetros es un proceso de búsqueda que puede ser extremadamente exhaustivo. ¿Y si pudiéramos automatizarlo? Básicamente, eso es lo que hace AutoML. "El aprendizaje automático automatizado es una solución directa a la escasez de científicos de datos, ya que puede aumentar drásticamente su rendimiento y productividad acelerando ciclos de trabajo, mejorando la precisión de los modelos e, incluso, posiblemente reemplazar la necesidad de científicos de datos." -Automated Machine Learning for Internet of Things
Ya tienes base suficiente sobre AutoML y estás listo para verlo en acción. Antes, veamos algunas de las librerías de Python más usadas para AutoML.
Librerías de Python para AutoML
Existen muchas librerías de Python para realizar AutoML. Todas persiguen, con matices, el mismo objetivo: automatizar el proceso de ML. Estas son algunas de las más utilizadas:
Cada una aborda a su manera la "automatización de automatizar la automatización". En este tutorial usaremos Auto-Keras. Vamos a ello.
Introducción a Auto-Keras
"Auto-Keras es una librería de código abierto para aprendizaje automático automatizado."(Fuente) La desarrolla el DATA Lab de Texas A&M University junto con colaboradores de la comunidad. Según el sitio oficial de auto-keras: "El objetivo final de este AutoML es ofrecer herramientas de deep learning fácilmente accesibles a expertos de dominio con poca formación en ciencia de datos o ML. Auto-Keras proporciona funciones para buscar automáticamente arquitecturas e hiperparámetros de modelos de deep learning."

Fuente: Auto-Keras
Para instalar Auto-Keras, ejecuta este comando.
Nota: Actualmente, Auto-Keras solo es compatible con Python 3.6.
!pip install autokeras
Ahora que ya lo has instalado, hagamos una prueba rápida.
Un caso práctico de AutoML con Auto-Keras
Usaremos el conocido dataset MNIST. keras lo incluye de serie, así que no necesitas descargarlo aparte. Empezaremos cargando el módulo ImageClassifier de auto-keras y el dataset MNIST desde keras.
from keras.datasets import mnist
from autokeras import ImageClassifier
Has cargado MNIST desde keras.datasets e importado ImageClassifier de auto-keras. Ahora separaremos el conjunto en entrenamiento y prueba.
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(x_train.shape + (1,)) # (1,) indica el canal, que en este caso es 1
x_test = x_test.reshape(x_test.shape + (1,)) # (1,) indica el canal, que en este caso es 1
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz
11493376/11490434 [==============================] - 1s 0us/step
Con las particiones listas, entrenaremos ImageClassifier con x_train e y_train y evaluaremos en x_test e y_test.
# Instanciar la clase ImageClassifier
clf = ImageClassifier(verbose=True, augment=False)
# Entrenar el clasificador con el conjunto de entrenamiento
clf.fit(x_train, y_train, time_limit=12 * 60 * 60)
clf.final_fit(x_train, y_train, x_test, y_test, retrain=True)
# Resumen de resultados
y = clf.evaluate(x_test, y_test)
print(y * 100)
Así de simple: con 4 o 5 líneas puedes hacer una prueba rápida. Eso sí, no es tan inmediato: este código tarda bastante en ejecutarse. Una configuración decente para ejecutar experimentos de deep learning te ayudará, y Google Colab es también un gran punto de partida.
Veamos ahora los parámetros usados más arriba. Consultaremos la documentación de auto-keras y destacamos lo relevante:
- En ImageClassifier():
- verbose: Booleano que indica si se imprime el proceso de búsqueda.
- augment: Booleano que indica si hay que aplicar aumentos de datos. Si no se define, usa Constant.DATA_AUGMENTATION, que es True por defecto.
- En el método fit():
- time_limit: Límite de tiempo de la búsqueda en segundos.
- final_fit(): Entrenamiento final tras encontrar la mejor arquitectura.
- retrain: Booleano que indica si se reinicializan los pesos del modelo.
Auto-Keras es una librería en evolución y aún está en versión previa. Según el sitio oficial, admite estos módulos principales:
- supervised: clase base para toda tarea supervisada.
- bayesian: un GaussianProcessRegressor para optimización bayesiana.
- search: clase base de todos los buscadores. Cada buscador puede sobreescribir su función de búsqueda para implementar su estrategia.
- graph: clase que representa el grafo de arquitectura neuronal de un modelo de Keras. Extrae el grafo donde cada nodo es un tensor intermedio entre capas y cada capa es un borde. Varias aristas pueden referirse a la misma capa (por ejemplo, Add suma dos tensores en uno, así que se relaciona con dos aristas).
- preprocessor: clase para dar formato a los datos. Proporciona métodos para transformar etiquetas de clasificación en vectores.
- model_trainer: clase para entrenar el modelo. Puede entrenar un modelo de Pytorch con los data loaders dados. La métrica, la función de pérdida y el modelo deben ser compatibles entre sí. Consulta los atributos para más detalles.
Notas finales
¡Has llegado al final! En este tutorial has repasado el proceso general de ML y has visto cómo puede automatizarse. Echaste un vistazo a las librerías disponibles para AutoML. Usaste auto-keras y comprobaste el nivel de abstracción que ofrece y lo fácil que es utilizarlo.
Puede que te surja la idea de que, cuando AutoML sea totalmente sólido, sustituirá a muchos data scientists. ¿Seguro? Piénsalo otra vez. AutoML libera a los científicos de datos de la carga iterativa de seleccionar el mejor modelo para un problema. Así pueden centrarse más en los datos, que es lo esencial. Esta entrevista a Randy Olson aporta buenas ideas al respecto. Échale un ojo y verás cómo te motiva. Si alguna vez dudas del valor del trabajo de un profesional de ML, mira este post.
El campo del AutoML avanza rápido. Por ejemplo, NAS (Neural Architecture Search) es un algoritmo que busca la mejor arquitectura de red neuronal. Aquí tienes algunos recursos con casos de uso de última generación:
- Design by Evolution: cómo evolucionar tu red neuronal con AutoML
- AutoML Challenge: un gran salto para las competiciones de ML
- La IA de Google puede crear mejor código de ML que los propios investigadores
- Auto-Keras, o cómo crear un modelo de deep learning en 4 líneas de código
Algunas referencias utilizadas:
- Auto-Keras, o cómo crear un modelo de deep learning en 4 líneas de código
- AutoKeras: el "asesino" del AutoML de Google
Si te interesa aprender más sobre deep learning, haz el curso de DataCamp "Deep Learning in Python" y echa un vistazo a nuestro curso Introduction to Deep Learning in Python.


