← retour aux snippets

sklearn SpectralClustering: graph clustering

clustering spectral basé graphe de similarité

sklearn SpectralClustering: graph clustering

objectif

Expliquer et montrer comment clustering spectral basé graphe de similarité.

code minimal

import numpy as np
from sklearn.cluster import SpectralClustering
from sklearn.datasets import make_moons

X, _ = make_moons(n_samples=800, noise=0.06, random_state=42)
spec = SpectralClustering(n_clusters=2, affinity="nearest_neighbors", n_neighbors=15, assign_labels="kmeans", random_state=42)
labels = spec.fit_predict(X)
np.unique(labels, return_counts=True)

utilisation

# comparer différentes affinités
for aff in ["rbf", "nearest_neighbors"]:
    m = SpectralClustering(n_clusters=2, affinity=aff, random_state=0).fit(X)
    print(aff, np.unique(m.labels_, return_counts=True)[1])

variante(s) utile(s)

# transformer en matrice d'affinité personnalisée
from sklearn.metrics.pairwise import cosine_similarity
A = cosine_similarity(X)
m = SpectralClustering(n_clusters=2, affinity='precomputed').fit(A)
print(np.bincount(m.labels_))

notes

  • Bien adapté aux formes non convexes (moons, circles).
  • Sur grands N, coûteux en mémoire (matrice n×n).