Exercice 89 / 100

ML — Clustering KMeans

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

Fonctionnement (itératif)

1. choisir K centres aléatoires (centroids) 2. assigner chaque point au centre le plus proche 3. recalculer chaque centre = moyenne des points assignés 4. répéter 2-3 jusqu'à stabilisation
K-Means tourne en boucle : chaque point rejoint le centre le plus proche, chaque centre se replace au milieu de ses points, et on recommence tant que les assignations changent

Le résultat dépend de l'initialisation. Par défaut, sklearn lance l'algo n_init=10 fois et garde la meilleure exécution.

Workflow sklearn

from sklearn.cluster import KMeans
kmeans = 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 centres kmeans.inertia_ somme des distances² aux centres (à minimiser) kmeans.predict(X_new) cluster d'un nouveau point

Choisir K : la méthode du coude

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

Exemple complet

import numpy as np from sklearn.cluster import KMeans
np.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_)}')

Limites

- K doit être choisi à l'avance - sensible aux outliers - suppose des clusters sphériques de tailles similaires - sensible à l'échelle → standardiser les features

Alternatives selon la forme des clusters : dbscan (densité, gère le bruit), GaussianMixture (clusters elliptiques), AgglomerativeClustering (hiérarchique).

exercise.py

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →