Clustering espectral

Basic

Clustering espectral | Agrupación basada en eigenvectores

Creado: Última actualización: Tiempo de lectura: 2 min
まとめ
  • El clustering espectral utiliza el espectro de un grafo de similitud para proyectar los datos a un espacio donde k-means separa fácilmente los clústeres.
  • Maneja estructuras no linealmente separables (círculos concéntricos, lunas) al basarse en conectividad.
  • Hiperparámetros clave: affinity (rbf, vecinos más cercanos, coseno), gamma o n_neighbors, y el método assign_labels.
  • Tras obtener los (k) primeros eigenvectores del laplaciano normalizado, se normalizan las filas y se aplica k-means.

1. Descripción general #

Dado un matiz de afinidad (W), definimos el laplaciano

$$ L = D - W, \qquad D = \mathrm{diag}(d_i),; d_i = \sum_j W_{ij}, $$

y su versión simétrica normalizada

$$ L_{\mathrm{sym}} = D^{-1/2} L D^{-1/2} = I - D^{-1/2} W D^{-1/2}. $$

Tomamos los (k) eigenvectores asociados a los valores propios más pequeños, formamos la matriz (U), normalizamos cada fila y ejecutamos k-means sobre esas representaciones. Las etiquetas resultantes se asignan a las muestras originales.

2. Ejemplo en Python #

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from sklearn.datasets import make_circles
from sklearn.cluster import SpectralClustering

X, _ = make_circles(n_samples=500, factor=0.4, noise=0.05, random_state=0)

model = SpectralClustering(
    n_clusters=2,
    affinity="rbf",
    gamma=50,
    assign_labels="kmeans",
    random_state=0,
)
labels = model.fit_predict(X)

plt.figure(figsize=(6, 5))
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap="coolwarm", s=20)
plt.title("Clustering espectral")
plt.tight_layout()
plt.show()

Ejemplo de clustering espectral

3. Notas prácticas #

  • Usa affinity="nearest_neighbors" cuando prefieras grafos esparcidos y ajusta n_neighbors.
  • assign_labels="cluster_qr" ofrece mayor estabilidad en embeddings de alta dimensión.
  • Normaliza las características antes de construir el grafo para que gamma tenga sentido.

4. Referencias #

  • Shi, J., & Malik, J. (2000). Normalized Cuts and Image Segmentation. IEEE TPAMI.
  • Ng, A. Y., Jordan, M. I., & Weiss, Y. (2002). On Spectral Clustering: Analysis and an Algorithm. NeurIPS.
  • scikit-learn developers. (2024). Spectral clustering. https://scikit-learn.org/stable/modules/clustering.html#spectral-clustering