ConsigneSegmente des données avec K-Means
K-Means est un algorithme de clustering non-supervisé : il regroupe les points en K clusters sans utiliser d'étiquettes.
Utilisé pour la segmentation client, la compression d'image, la détection de groupes naturels...
1. choisir K centres aléatoires (centroids)2. assigner chaque point au centre le plus proche3. recalculer chaque centre = moyenne des points assignés4. répéter 2-3 jusqu'à stabilisationLe résultat dépend de l'initialisation. Depuis scikit-learn 1.4, n_init vaut 'auto', c'est-à-dire une seule exécution avec k-means++ : écris explicitement n_init=10 pour que sklearn relance dix fois et garde la meilleure.
from sklearn.cluster import KMeanskmeans = KMeans(n_clusters=3, random_state=42, n_init=10)kmeans.fit(X)kmeans.labels_ cluster assigné à chaque point (0, 1, 2)kmeans.cluster_centers_ coordonnées des K centreskmeans.inertia_ somme des distances² aux centres (à minimiser)kmeans.predict(X_new) cluster d'un nouveau pointTester plusieurs K et regarder l'inertie :
inerties = []for k in range(1, 11): km = KMeans(n_clusters=k, n_init=10, random_state=42).fit(X) inerties.append(km.inertia_)L'inertie diminue toujours avec K. On cherche le "coude" sur la courbe : le K à partir duquel ça ralentit.
Alternative : silhouette score.
import numpy as npfrom sklearn.cluster import KMeansnp.random.seed(42)c1 = np.random.randn(50, 2) + [ 2, 2]c2 = np.random.randn(50, 2) + [-2, -2]c3 = np.random.randn(50, 2) + [ 2, -2]X = np.vstack([c1, c2, c3])kmeans = KMeans(n_clusters=3, random_state=42, n_init=10).fit(X)for i, c in enumerate(kmeans.cluster_centers_): print(f'Cluster {i}: ({c[0]:.2f}, {c[1]:.2f})')print(f'Inertie: {kmeans.inertia_:.2f}')print(f'Labels (nb par cluster): {np.bincount(kmeans.labels_)}')- K doit être choisi à l'avance- sensible aux outliers- suppose des clusters sphériques de tailles similaires- sensible à l'échelle → standardiser les featuresAlternatives selon la forme des clusters : dbscan (densité, gère le bruit), GaussianMixture (clusters elliptiques), AgglomerativeClustering (hiérarchique).
Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →