Desde que empecé a interesarme y aprender sobre las diferentes herramientas y recursos para desarrollar aplicaciones con Machine Learning, ninguna me ha parecido más útil que el framework de ML.NET. Además cada vez existen más recursos para aprender a desarrollar aplicaciones y funciones con este framework de manera «rápida».
Cuando digo «rápida» no quiero decir que se pueda aprender Machine Learning en 15 minutos. Se requiere un poco de paciencia al inicio, pero luego de probar y ensayar un par de semanas, o incluso días, se puede tener una comprensión muy buena en la teoría y en la práctica.
Uno de los limitantes que sí existe en los recursos es que todavía hay pocos tutoriales o videos en español. Por eso decidí escribir este post (y seguramente escribiré mas) explicando y detallando la serie de ocho videos de ML.NET – Machine Learning que recientemente se publicó como parte del .NET Conf 2019.
En el primer video de la serie se explica ciertos conceptos de Machine Learning. Lo interesante de esto es que no se requiere ser un experto estadístico y matemático para empezar a construir aplicaciones con ML.NET.
Como resumen del primer video podemos concluir que Machine Learning se trata de enseñar a un programa a distinguir patrones e información dentro de un conjunto de datos para poder hacer predicciones o programar funciones más «humanas» como: EsEstoUnPerro(foto_animal).
En el segundo video se explica cómo ML.NET nos provee de un framework completo de desarrollo donde podemos aprovechar todo nuestro conocimiento en el entorno de .NET para crear aplicaciones con Machine Learning sin necesidad de conocer otros lenguajes como R, Python o SPSS. Además de no requerir instalar herramientas de desarrollo adicionales.
En el tercer video de la serie lo más interesante es la explicación del flujo de toda aplicación de Machine Learning. Es un flujo sencillo de tres pasos:
Preparar los datos. Este paso siempre se lo da por hecho en casi todos los tutoriales de Machine Learning, pero es el más importante de todos y requiere de mucho esfuerzo. Los datos se deben extraer y estructurar con la mejor calidad posible para que el aprendizaje de máquina los pueda entender e interpretar.
Entrenar y construir. Con los datos preparados se puede usar un algoritmo de entrenamiento para construir un modelo que nos permitirá hacer las predicciones y clasificaciones que queremos como resultado. Más adelante explico qué es un algoritmo y un modelo.
Ejecutar. En la mayoría de tutoriales de Machine Learning solo se explica cómo construir un modelo, pero en la práctica la construcción del modelo no nos sirve de nada si no lo podemos usar dentro de una aplicación. Esta es otra de las grandes ventajas de ML.NET, como el modelo está construido dentro de un ambiente de .NET es muy sencillo utilizarlo dentro de una aplicación con pocas lineas de código.
En el cuarto video se crea ya un primer modelo de clasificación binaria (binary classification), esta es la aplicación más común en el mundo del Machine Learning, cuando queremos saber si algo simplemente es bueno o malo. Se puede utilizar para analizar un texto, pero también para analizar una tabla o conjunto de datos.
Los únicos requisitos (además de Visual Studio con .NET Core) para comenzar a crear estas aplicaciones son descargar e instalar el SDK de ML.NET y el Model Builder CLI para la construcción de los modelos. (Si usas VS Code o VS para Mac). Si usas Visual Studio para Windows solo requieres instalar el Model Builder.
Aquí vale la pena repasar otros conceptos de Machine Learning:
¿Qué son los datos de origen? Los datos de origen, o conjunto de datos, es la base de todo sistema de Machine Learning. Estos datos son los que se utilizará para enseñar a un sistema a realizar predicciones o clasificaciones con nuevos o futuros datos.
¿Qué es un modelo? Un modelo se puede concebir como un filtro que recibe y clasifica datos según sus características. Un modelo es el resultante del análisis de los datos de origen y búsqueda de patrones que permitan hacer predicciones sobre nuevos datos.
¿Qué es un algoritmo de entrenamiento? Este es el conjunto de pasos o procedimientos que se utilizará para encontrar los patrones en los datos que servirán para la construcción del modelo. Aquí está una de las grandes utilidades de ML.NET, y es que no es necesario tener bases o conocimiento de estos algoritmos ya que el framework de ML.NET evalúa y nos sugiere automáticamente el algoritmo con mejores resultados para nuestros datos.
En el quinto y sexto video se repite el proceso para crear una aplicación de Machine Learning, pero se utiliza otro tipo de modelos que son también muy comunes en aplicaciones reales.
La clasificación múltiple (multi-class classification) se utiliza para clasificar un grupo de datos en más de un conjunto, es decir, ya no solo clasificar los datos en buenos o malos sino en bueno, muy bueno, regular y malo. Ejemplo: cuando se quiere calificar a los clientes en tipo A, AA o AAA.
La regresión (regression) se utiliza para analizar datos históricos con el objetivo de predecir un valor o variable cuando las características de esto datos cambien en el tiempo. La aplicación más común de esto es la predicción de precios según el comportamiento del mercado. Otro ejemplo puede ser la predicción de crecimiento en ventas según la tendencia presentada en los datos históricos de ventas en el año.
Algunos requisitos que no se mencionan en los videos son los paquetes Nuget. En el proyecto debes agregar la referencias del paquete: Microsoft.ML de preferencia siempre la última versión.

Otra explicación adicional que no se menciona en los videos es qué parte del código corresponde a qué parte del flujo de Machine Learning que vimos en el tercer video.
La preparación de datos corresponde a la fuente de datos seleccionada, en estos ejemplos son siempre archivos de texto ya preparados, y a la carga de estos datos dentro de un objeto que será utilizado como fuente de datos para entrenar al modelo.

La etapa de entrenar y construir se ve aplicada cuando se crea el pipeline (configuración del modelo y algoritmo a utilizar) y se corre el entrenamiento del modelo, lo interesante de esto es que no requerimos tener conocimientos avanzados sobre los diferentes tipos de algoritmos ya que el Model Builder ha evaluado y seleccionado el mejor algoritmo por nosotros.

La etapa de ejecutar, como lo mencioné anteriormente, es la más interesante de todas ya que se puede usar el modelo construido en nuestra aplicación con pocas lineas de código, esta se puede ver en la aplicación de consola generada. Esta es la mayor ventaja de ML.NET sobre otros lenguajes como R y Python.

En el séptimo video se crea un modelo personalizado, no se usa el ModelBuilder y se crea una aplicación de recomendación de películas usando una clasificación binaria y un algoritmo de entrenamiento field aware factorization machine. El objetivo del ejemplo es predecir si una película le va a gustar o no a un usuario. Para esto usa como fuente de datos un archivo con información de una lista de usuarios y las películas que les gustó previamente a los usuarios.
El video no es muy explicativo en cómo se construyó la aplicación, pero sí lo es en el potencial que tiene el crear aplicaciones con modelos personalizados. La pregunta obvia ahora es: ¿Cómo puedo saber qué tipo de modelo es adecuado para mi aplicación?
Para esto les recomiendo este sitio donde se explica los principales modelos que se pueden construir con el generador de modelos (Model Builder) de ML.NET y sus aplicaciones más comunes.
En el último video de esta serie se muestra una aplicación creada para clasificar imágenes y predecir qué tipo de flor tiene la imagen. Nuevamente no es muy explicativo el video pero demuestra que también se pueden generar modelos que clasifiquen imágenes y no solo datos. Esta es otra gran diferencia con otros lenguajes como R que se especializan más en trabajar con datos pero no todavía en imágenes.
Un concepto final para repasar es el de aprendizaje profundo (Deep learning). Esto lo defino como la construcción de un modelo a partir de otro modelo previamente creado. En el ejemplo del video se construye un modelo para clasificar imágenes de flores utilizando un modelo previamente creado para la clasificación de imágenes. En el ejemplo se usa un modelo creado con TensorFlow y si quieres entender cómo crear aplicaciones con clasificación de imágenes puedes seguir este turorial.
Con eso hemos concluido la revisión de la serie de 8 videos de ML.NET Machine Learning. Como video bonus, y para ponerse ya manos a la obra, les dejo un video «end to end» mucho más detallado para crear una aplicación completamente desde cero.