Aprendizaje No Supervisado, Clustering K-Means, para todos…

Leonardo Gamboa Uribe
7 min readJun 24, 2020

--

En el articulo anterior, Aprendizaje Supervisado logramos predecir la categoría o posición de un jugador en el campo, a partir de un modelo generado con información conocida, por eso se llama Supervisado, por que requiere la intervención de “alguien” que etiquete previamente sus características.

En este articulo de Aprendizaje no supervisado, no necesitamos indicarle al algoritmo cuál es la respuesta correcta. Cuando usamos este tipo de aprendizaje, la “Inteligencia Artificial” aprende de los datos, por decirlo de alguna forma.

En este caso usaremos el método de clustering, que consiste en la agrupación automática de datos. Al ser un aprendizaje no-supervisado, no hay una respuesta correcta. Esto hace que la evaluación de los grupos identificados sea un poco subjetiva.

La idea de este ejercicio es agrupar (clustering) en cuatro grupos (cluster) a los jugadores en función de sus características de juego (portero, defensa, central, delantero). El objetivo será ver si las diferentes agrupaciones que el algoritmo detecta son coherentes con las dinámicas del fútbol.

Figuras que representan las características de los jugadores en el campo de juego, las cuales serán agrupadas para identificar patrones comunes.
Ejemplo de agrupación de jugadores de la muestra histórica, agrupados exclusivamente por sus características, en ningún momento hay supervisor ”humano” en su decisión.

Para realizar la agrupación en el ejercicio, utilizaremos el algoritmo K-means.

K-means es un algoritmo de clasificación no supervisada (clusterización) que agrupa objetos en k grupos basándose en sus características. El agrupamiento se realiza minimizando la suma de distancias entre cada objeto y el centroide de su grupo o cluster. Se suele usar la distancia cuadrática.

El algoritmo consta de tres pasos:

  1. Inicialización: una vez escogido el número de grupos, k, se establecen k centroides en el espacio de los datos, por ejemplo, escogiéndolos aleatoriamente.
  2. Asignación objetos a los centroides: cada objeto de los datos es asignado a su centroide más cercano.
  3. Actualización centroides: se actualiza la posición del centroide de cada grupo tomando como nuevo centroide la posición del promedio de los objetos pertenecientes a dicho grupo.

El algoritmo k-means resuelve un problema de optimización, siendo la función a optimizar (minimizar) la suma de las distancias cuadráticas de cada objeto al centroide de su cluster.

Representación típica del funcionamiento de k-mean en cada iteración.

Gráficamente, podríamos resumir que k-means agrupara personas con las mismas características. En la figura, según sus características; hombres delgados, muy fuertes y otros. En ningún momento etiquetamos personas, como lo haría el Aprendizaje Supervisado.

El ejercicio lo realizaremos en un entorno JupiterNote (Anaconda) usando Python y sus librerías, las cuales incorporaremos en cada paso para su mejor comprensión. Si sigues el ejercicio paso a paso no solo entenderás, si no que aprenderás y comprenderás que estamos haciendo y en ningún momento deberías quedar con cara de “poker”.

Lo primero es cargar los datos en nuestro dataset, a partir del fichero .csv , después filtraremos os jugadores con más de 2000 minutos de juego, para facilitar la comprensión de los resultados y la gráfica. Posteriormente puedes ir cambiando este valor para ver el impacto en el modelo de predicción. Posteriormente desplegaremos detalles del dataset.

la librería pandas implementa dataframes, tablas de datos indexadas formadas por series de datos de un mismo tipo. Funciona en base a numpy.

1.- Porteros 2.-Defensas 3.- Centrales 4.- Delanteros

Como los datos que estamos usando ya están clasificados del ejercicio anterior, conocemos la predicción/categoría de cada uno, esto nos servirá más adelante para comparar el resultado de nuestro ejercicio de custerización y validar si vamos en linea o no.

A continuación desplegaremos una muestra de los datos del dataset. Lo que esta enmarcado no lo mostramos en la imagen por que es muy extenso, pero podréis verlo al ejecutar el notebook.

En el recuadro rojo (arriba) guardamos en una lista temporal los nombres de los jugadores, por que en el momento de normalización de datos, no podemos tener campos alfanuméricos.

Aunque no esta relacionado con la clusterización, vamos a generar una matriz de correlación: esta matriz nos permite ver de una forma muy visual qué valores tienen impacto en otros. De aquí esperamos ver cosas como que los jugadores delanteros ganan más balones en el área o que los jugadores que hacen más faltas reciben más tarjetas. Estas suposiciones no tienen porqué ser ciertas, pero nos pueden ayudar a detectar si hemos hecho algo mal. El color más rojo indica mayor incidencia. En el articulo Matrices de Correlación lo explico con más detalle.

Seaborn es una librería para Python que permite generar fácilmente elegantes gráficos. Seaborn esta basada en matplotlib y proporciona una interfaz de alto nivel que es realmente sencilla de aprender. Dada su gran popularidad se encuentra instalada por defecto en la distribución Anaconda.

Normalización o escalado.

A la hora de usar cualquier algoritmo de clustering, es una buena idea normalizar nuestros datos. En este contexto, «normalizar» se refiere a que los valores de cada atributo estén en escalas similares. Normalizar ayuda al clustering porque los grupos se forman a partir de distancias. Si hay atributos con escalas muy diferentes, los atributos de escala mayor dominarán las distancias.

En el ejemplo abajo podemos verificar la conversión de los datos a una escala comparativa. Primero listamos los datos normalizados (tener en cuenta que el nombre de las comunas han sido reemplazadas por números). Mas abajo tenemos os datos de dataset original, para compararlos. Las lineas amarillas indican la correspondencia de las columnas entre el dataset normalizado y el original.

Scikit-learnes una librería de python para Machine Learning y Análisis de Datos. Está basada en NumPy, SciPy y Matplotlib. La ventajas principales de scikit-learn son su facilidad de uso y la gran cantidad de técnicas de aprendizaje automático que implementa. Con scikit-learn podemos realizar aprendizaje supervisado y no supervisado. Podemos usarlo para resolver problemas tanto de clasificación y como de regresión.

El el diagrama de densidad más abajo podemos visualizar y comparar la gráfica de datos sin normaización, con lo que los valores muy bajos no tienen representación si los comparamos con los altos (minutos, goles). En cambio en el normalizado, a la derecha, ya ponemos realizar una comparativa

Los diagramas de densidad se pueden utilizar para ver cómo se comporta distribuciones de datos. En Seaborn este tipo de diagramas se puede obtener con el método kdeplot. En el conjunto de datos de ejemplo puede ser de interés comprobar cómo se distribuye los valores de la factura, para lo que se puede utilizar el siguiente ejemplo

Recordemos que el clustering es una técnica de aprendizaje automático no-supervisada. Esto implica que no es capaz de establecer la relación entre los atributos de entrada y los resultados … sencillamente porque no hay resultados. Así que la responsabilidad de identificar qué atributos son relevantes recae sobre nosotros.

Después de la operación de cluterización con el algoritmo k-means, podemos ver el resultado destacado en el cuadro azul más abajo. Define 4 cluster, con sus valores, los cuales si los comparamos con los datos “conocidos” del dataset (paso 5 del notebook) podemos decir que ha funcionado.

relación categoría original, con la predicción de cluster

En la gráfica más abajo podemos observar los grupos o cluster claramente definidos y relacionados con los jugadores de cada uno.

Para poder comparar resultado os dejo aquí el resultado del ejercicio realizado con BigML con los mismos datos usados en el modelo de Aprendizaje Supervisado. Podemos ver que los resultados cuadran, usando las librerías Python y el producto, ambos usando K-Means

Para finalizar aquí podéis encontrar el dataset y el notebook desarrollado en el articulo. Te recomiendo que lo realices paso a paso.

--

--

Leonardo Gamboa Uribe

PhD in AI student, Master's degree in Artificial Intelligence, Computer Science Engineering, Digital Transformation Expert