← capítulo

Clustering jerárquico

k-means te obligaba a elegir k. Esto no.

Construye el árbol completo de agrupaciones, desde cada punto solo hasta un único grupo grande, y luego córtalo donde la estructura te lo indique.

Todo el algoritmo

Empieza con cada punto como su propio cluster. Luego repite hasta que quede uno:

Veintinueve merges para treinta puntos. Sin k, sin centroides, sin seed.

Los datos

30 puntos, tres blobs de make_blobs, sin etiquetas. Pequeño a propósito: un dendrograma dibuja una hoja por punto.

La única decisión real: el linkage

¿Qué tan lejos están dos clusters? Elige una regla:

dsingle(A,B)=minaA,  bBxaxbd_{\text{single}}(A, B) = \min_{a \in A,\; b \in B} \lVert x_a - x_b \rVert dcomplete(A,B)=maxaA,  bBxaxbd_{\text{complete}}(A, B) = \max_{a \in A,\; b \in B} \lVert x_a - x_b \rVert daverage(A,B)=1ABaAbBxaxbd_{\text{average}}(A, B) = \frac{1}{|A|\,|B|} \sum_{a \in A} \sum_{b \in B} \lVert x_a - x_b \rVert

Single encadena, complete arma bolitas apretadas, average es el primer intento seguro.

Míralo aglomerar

Los puntos se condensan arriba; el dendrograma se construye barra por barra abajo. Cada frame es un merge real. El rojo une los dos clusters que se fusionan en ese paso.

Los merges bajos ocurren dentro de los blobs; luego el árbol brinca un hueco grande para fusionarlos. De ese hueco sale k=3: tú no lo elegiste, las alturas lo anunciaron.

Corta el árbol en k

El dendrograma, coloreado por los clusters en k=3, los merges entre blobs en gris arriba, y la línea de corte tirada en el hueco vacío (altura 3.92, entre 1.90 y 5.94):

Desde cero vs. librería

Nuestro corte en k=3 contra sklearn.cluster.AgglomerativeClustering. Las alturas de merge coinciden con scipy hasta el epsilon de máquina; las etiquetas planas coinciden con sklearn; ambos recuperan los blobs verdaderos. Todos los adjusted Rand index dan 1.0.

Puntos clave