sklearn OPTICS: clustering par densité
objectif
Expliquer et montrer comment clustering de densité avec OPTICS et extraction de clusters.
code minimal
import numpy as np
from sklearn.cluster import OPTICS
from sklearn.datasets import make_blobs
X, _ = make_blobs(n_samples=1000, centers=6, cluster_std=0.60, random_state=42)
model = OPTICS(min_samples=10, xi=0.05, min_cluster_size=0.05)
labels = model.fit_predict(X)
np.unique(labels, return_counts=True)
utilisation
# labels == -1 pour le bruit
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
print("clusters:", n_clusters)
# récupérer l'ordre de portée et la distance de portée
reach = model.reachability_[model.ordering_]
ordering = model.ordering_[:10]
print(reach[:10], ordering)
variante(s) utile(s)
# ajuster la sensibilité via xi et min_cluster_size
for xi in (0.03, 0.05, 0.1):
for mcs in (0.03, 0.05, 0.1):
mdl = OPTICS(min_samples=10, xi=xi, min_cluster_size=mcs).fit(X)
labs = mdl.labels_
n = len(set(labs)) - (1 if -1 in labs else 0)
print(f"xi={xi} mcs={mcs} -> clusters={n}")
notes
- OPTICS découvre une structure hiérarchique de densité; labels -1 = bruit.
- xi contrôle le seuil d’extraction, min_cluster_size la taille minimale d’un cluster.