← Volver a Aprende con CDIA

Aprendizaje no supervisadoAgrupamiento con k-means

IntermedioMachine Learning7 min de lectura

Agrupamiento con k-means

Reunir los datos en k grupos según su parecido, asignando cada punto a su centroide más cercano: el algoritmo de agrupamiento más usado.

k-means agrupa un conjunto de datos en grupos (clusters), juntando los ejemplos que se parecen entre sí. Es el algoritmo de agrupamiento más usado: simple, rápido y sorprendentemente efectivo.

La idea: k centros

Cada grupo se representa por un punto central llamado centroide (el "promedio" del grupo). Un ejemplo pertenece al grupo cuyo centroide tiene más cerca. El algoritmo busca colocar esos centros de modo que cada punto quede lo más pegado posible al suyo.

El algoritmo, paso a paso

k-means alterna dos pasos hasta que nada cambia:

  1. Inicializar: elige centroides al azar.
  2. Asignar: cada punto se une al centroide más cercano.
  3. Actualizar: cada centroide se recalcula como el promedio de los puntos que le tocaron.
  4. Repetir los pasos 2 y 3 hasta que los grupos se estabilizan.

Es un baile de dos pasos —asignar y promediar— que converge en pocas iteraciones.

Cada color es un grupo; la ✕ es su centroide. k-means asigna cada punto al centroide más cercano y luego recoloca cada centroide en el promedio de su grupo, hasta estabilizarse.

Qué minimiza

El algoritmo reduce la inercia: la suma de las distancias al cuadrado de cada punto a su centroide .

Cuanto menor es la inercia, más compactos y bien definidos son los grupos.

Elegir k: el método del codo

lo elige la persona, no el algoritmo. Un truco habitual es el método del codo: se prueba la inercia para varios valores de y se grafica. Al principio baja rápido; llega un punto donde añadir más grupos ya casi no ayuda. Ese "codo" en la curva sugiere un buen .

En código

scikit-learn resuelve todo el baile en dos líneas:

from sklearn.cluster import KMeans

modelo = KMeans(n_clusters=3, n_init=10, random_state=0).fit(X)

print(modelo.labels_)          # a qué grupo (0, 1, 2) fue cada punto
print(modelo.cluster_centers_) # las coordenadas de los 3 centroides
modelo.predict(X_nuevo)        # asigna puntos nuevos al grupo más cercano

Conviene escalar las variables antes (con StandardScaler), porque k-means se basa en distancias y una variable de gran magnitud dominaría el agrupamiento.

Límites que conviene recordar

  • Hay que fijar de antemano.
  • Asume grupos redondos y de tamaño parecido; falla con formas alargadas o entrelazadas.
  • El resultado depende de la inicialización, por eso se corre varias veces (n_init) y se elige la mejor.

Para llevar

k-means agrupa datos en clusters asignando cada punto a su centroide más cercano y recalculando los centros hasta estabilizarse. Es la herramienta base del agrupamiento: rápida e intuitiva, siempre que los grupos sean más o menos redondos y elijamos bien . La otra mitad de esta serie, PCA, ataca el problema complementario: demasiadas variables.