Saltar al contenido →

Create ML. MLClassifier

Nuevo entrega del tutorial sobre Create ML, en este caso el artículo está dedicado a los modelos de clasificación y no viene solo, podeís descargar desde la App Store la app que implementa el modelo:

XO Challenge es una App del clásico juego de mesa Tres en Raya y usa el modelo de clasificación que generaremos en este artículo. Puedes descargarla desde el App Store ya mismo.

Anteriormente en Create ML Tutorial…

En el árticulo anterior construimos un modelo para clasificar imágenes y lo usamos para que identificara a los personajes de la serie The Big Bang Theory representados en muñecos Pixel.

Y ahora en Create ML Tutorial…

Le llega el turno a los modelos de clasificación. Estos modelos son, basicamente, modelos que en base a unos parámetros nos dicen a que categoría pertenece el objeto al que representan esos mismos parámetros.

Antes de nada…

Seguro que alguna vez te surgido la duda sobre en qué se diferencia un modelo de clasificación y otro de regresión. Una forma muy rápida y sencilla de responder es decir que…

Los modelos de clasificación responden a la pregunta qué, mientras que los modelo de regresión responden a la pregunta cuánto.

Manos a la obra

Lo primero que vamos a necesitar son… datos, muchos datos, pero sobre todo de calidad.

En nuestro caso, un modelo que nos ayude a jugar al 3 en Raya, usaremos los datos que el Center for Machine Learning and Intelligent Systems de la Universidad de California, Irvine tiene publicados en uno de sus repositorios.

Os animo a que deis un paseo por él, para mí es uno de los mejores que podéis encontrar en Internet, tanto por la variedad como por la cantidad.

La carpeta de datos contiene dos archivos:

  • tic-tac-toe.data Son los datos con los que entrenamos y validamos el modelo

  • tic-tac-toe.names Explicación detallada sobre el formato del archivo de datos.

En mi caso, y para aclarar el archivo de datos, lo he convertido a un archivo en formato CSV con cabeceras.

Para convertirlo he abierto el archivo .data con Numbers, le he añadido las cabeceras y lo he exportado a un archivo .csv

Importando los datos a Create ML

Lo principal, que son los datos, lo tenemos, así que vamos importarlos con Create ML.

Lo primero es recordar que los datos se importan a una estructura de tipo MLDataTable, y segundo pero no menos importante, que estos datos deben estar en formato JSON o CSV.

Nuestros datos están en un archivo CSV, por lo que lo primero que debemos hacer es establecer las opciones de lectura de este archivo. Esto se hace mediante el tipo anidado ML.DataTable.ParsingOptions.

Con él podemos indicar que nuestro archivo de datos tiene cabecera, cual es el caracter de delimitación de campos, de salto de línea, con que caracter se indican los comentarios…

En el caso que nos atañe indico que nuestro archivo tiene cabeceras y que el delimitador de campos es el caracter ‘;’

Estas opciones de lectura se pasan, junto con la URL donde tenemos el archivo csv, al inicializador de la estrutura MLDataTable

Trabajando con los datos

Ahora que tenemos los datos en una estrucutura con la que poder trabajar, vamos a tener que tocar un poco los datos para dejarlos tal y como queremos.

Lo primero que voy a hacer es renombrar la columna classification y bautizarla como X_Wins. Esto lo hacemos con la función renameColumn(named:to:)

También voy a dividir el MLDataTable en dos, uno lo usaré para entrenamiento y otro para validar el modelo. De esto se encarga la función randomSplit(by:)

Para un repaso de las operaciones que puedes ejecutar sobre un MLDataTable échale un vistazo al primer artículo de la serie

Creando el MLClassifier

Los datos están tal y como queremos por lo que podemos crear el clasificador. El termino clasificador es un tanto genérico ya que existen diferentes tipo de clasificadores. Actualmente Create ML da soporte a los siguientes tipos:

  • Decision Tree. Predicciones basadas en la creación de reglas para dividir los datos
  • Random Forest. Se basa en una colección de árboles de decisión entrenados a partir de subconjuntos de los datos

  • Boosted Tree. Como el Random Forest, pero en este caso los árboles de decisión se combinan con la tecnica Gradient Boosting](https://es.wikipedia.org/wiki/Gradient_boosting)

  • Logistic Regression. Predice un valor a partir de una serie de características.

  • Support Vector. Utiliza la maximización de la separación entre categorias.

¿Y tengo que saber cuál es el que mejor se adapta a mi modelo? Pues no estaría mal, y de hecho sería lo recomendable, pero Create ML viene en nuestra ayuda y escoge el que mejor se adapta de forma automática.

No puedo dejar de recomendaros encarecidamente que leáis la documentación de los distintos tipos de clasificadores para ver las opciones de parametrización que nos ofrecen.

La creación se hace mediante el inicializador de la enumeración MLClassifier al que le pasamos como parámetros el conjunto de datos de entrenamiento y el nombre de la columna con los distintos valores de la clasificación.

Comprobando el modelo

Con los pasos anteriores ya podríamos guardar el modelo y usarlo en un App, pero es conveniente ver qué tal funcional el modelo.

Para ello lo evaluamos y vemos el resultado de esta evaluación. Lo primero se hace con la función evaluation(on:) de MLClassifier y lo segundo viendo el contenido de la propiedad debugDescription.

En el log nos vamos a fijar en tres cosas:

  1. La precisión del modelo (accuracy)
  2. La matriz de confusión (Confusion Matrix)

  3. La tabla de precisión y rellamadas (Precision Recall)

La precisión del modelo es precisamente eso, cuán preciso es el modelo que acabamos de obtener. A mayor porcentaje, mejor.

La matriz de confusión nos dice lo que predice el modelo y lo que debería haber predicho. Lo valores cuando el nombre de la fila y columna son el mismo (un acierto) deben ser altos y cuando son diferentes (un error) bajos

La precisión y las rellamadas miden la eficiencia del modelo para los falsos positivos y los falson negativos respectivamente.

Exportando el modelo para CoreML

Tenemos un modelo que arroja buenos resultados, así que ahora vamos a exportarlo al formato mlmodel para poder usarlo en una App con CoreML

Esta es una operación que hemos venido realizando a lo largo de toda la serie de artículos por lo que no nos vamos a parar mucho en ella.

Sólo diremos que antes de exportar el modelo de disco podemos asignarle una serie de metadatos que veremos cuando importemos y seleccionemos el modelo en Xcode.

En el próximo artículo…

Será el último de la serie dedicado a Create ML y abordaremos el tema de los modelos de regresión, o lo que es lo mismo , MLRegressor

Código Fuente

Podéis encontrar el Playground con el entrenamiento del modelo en este repositorio de GitHub

Enlaces de Interés

Artículos de la serie

Publicado en Create ML