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).