Evaluar un clustering

Aprendizaje no supervisado en Python

Benjamin Wilson

Director of Research at lateral.io

Evaluar un clustering

  • Puedes comprobar la correspondencia con, p. ej., especies de iris
  • ... ¿y si no hay especies para comparar?
  • Mide la calidad de un clustering
  • Ayuda a decidir cuántos clusters buscar
Aprendizaje no supervisado en Python

Iris: clusters vs. especies

  • k-means encontró 3 clusters en las muestras de iris
  • ¿Los clusters coinciden con las especies?
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14
Aprendizaje no supervisado en Python

Tablas cruzadas con pandas

  • Clusters vs. especies es una “tabla cruzada”
  • Usa la librería pandas
  • Dadas las especies de cada muestra en la lista species
print(species)
['setosa', 'setosa', 'versicolor', 'virginica', ... ]
Aprendizaje no supervisado en Python

Alinear etiquetas y especies

import pandas as pd
df = pd.DataFrame({'labels': labels, 'species': species})
print(df)
     labels     species
0         1      setosa
1         1      setosa
2         2  versicolor
3         2   virginica
4         1      setosa
...
Aprendizaje no supervisado en Python

Crosstab de etiquetas y especies

ct = pd.crosstab(df['labels'], df['species'])
print(ct)
species  setosa  versicolor  virginica
labels
0             0           2         36
1            50           0          0
2             0          48         14

¿Cómo evaluar un clustering si no hubiera información de especies?

Aprendizaje no supervisado en Python

Medir la calidad del clustering

  • Usando solo muestras y sus etiquetas de cluster

  • Un buen clustering tiene clusters compactos

  • Muestras de cada cluster agrupadas

Aprendizaje no supervisado en Python

La inercia mide la calidad del clustering

  • Mide lo dispersos que están los clusters (cuanto más bajo, mejor)
  • Distancia de cada muestra al centroide de su cluster
  • Tras fit(), disponible como atributo inertia_
  • k-means intenta minimizar la inercia al elegir clusters
from sklearn.cluster import KMeans

model = KMeans(n_clusters=3)
model.fit(samples)
print(model.inertia_)
78.9408414261
Aprendizaje no supervisado en Python

El número de clusters

  • Clusterings del dataset iris con distinto número de clusters
  • Más clusters implica menor inercia
  • ¿Cuál es el número óptimo de clusters?

Gráfico de líneas: número de clusters vs. inercia

Aprendizaje no supervisado en Python

¿Cuántos clusters elegir?

  • Un buen clustering tiene clusters compactos (baja inercia)
  • ... pero no demasiados clusters
  • Elige el “codo” en la curva de inercia
  • Donde la inercia empieza a bajar más lento
  • P. ej., para iris, 3 es una buena opción

Gráfico de líneas: número de clusters vs. inercia

Aprendizaje no supervisado en Python

¡Vamos a practicar!

Aprendizaje no supervisado en Python

Preparing Video For Download...