Aller au contenu
English
Compte : non connecté, synchronisation possible Mon apprentissage
Selectionner le thème
English

Clustering : partitionner des données en machine learning

Par mis à jour le

Améliorer cette page

Le clustering (ou partitionnement de données) est une technique d'apprentissage non supervisé qui regroupe automatiquement des données similaires, sans étiquettes fournies à l'avance. L'algorithme découvre lui-même des groupes (clusters) dans les données, là où un humain ne verrait qu'un nuage de points.

Cette leçon définit le clustering, montre comment l'appliquer avec k-means et scikit-learn dans l'environnement data de la formation, explique comment choisir le nombre de clusters avec la méthode du coude et le coefficient de silhouette, puis compare les principaux algorithmes. Un cas d'exploitation le résume : regrouper des serveurs par profil de charge, sans que personne ait étiqueté à l'avance « base de données » ou « serveur web ». Elle approfondit la famille non supervisée présentée dans les types d'apprentissage.

  • Définir le clustering et le situer dans l'apprentissage non supervisé.
  • Entraîner un modèle k-means avec scikit-learn.
  • Choisir le bon nombre de clusters (coude et silhouette).
  • Comparer k-means, DBSCAN et le clustering hiérarchique.
  • Reconnaître les cas d'usage concrets du clustering.

La leçon suppose l'environnement conda data de la leçon Conda et Miniconda, un notebook ou un terminal Python, et la distinction étiquetées ou non étiquetées vue dans les types d'apprentissage. Les blocs de code s'exécutent à la suite, dans la même session : le deuxième bloc de la section sur le nombre de clusters réutilise X et KMeans définis par le premier bloc, et le troisième prolonge le deuxième. Dans un notebook, exécutez donc les cellules dans l'ordre.

Le clustering regroupe des observations qui se ressemblent. Contrairement à la classification, où l'on connaît déjà la catégorie de chaque exemple, le clustering travaille sur des données sans étiquettes : il n'y a pas de bonne réponse fournie, l'algorithme cherche des structures par lui-même.

Le critère de regroupement est la similarité, mesurée par une distance (souvent la distance euclidienne, celle d'une règle entre deux points). Deux points proches finissent dans le même cluster, deux points éloignés dans des clusters différents.

Voici un jeu de données non étiquetées : à l'oeil, on devine des groupes, mais rien ne les nomme.

Nuage de points de données non étiquetées, sans groupes identifiés

k-means est l'algorithme de clustering le plus courant. Il partitionne les données en k groupes en plaçant k centres (centroïdes) et en assignant chaque point au centre le plus proche, puis en recalculant chaque centre comme la moyenne des points de son groupe. Ces deux étapes se répètent jusqu'à stabilisation.

Activez d'abord l'environnement data, qui fournit scikit-learn 1.9.1, NumPy 2.5.4 et matplotlib 3.11.2 aux versions épinglées par la leçon conda. Les sorties ci-dessous ont été obtenues avec ces versions :

Fenêtre de terminal
conda activate data
python -c "import sklearn; print(sklearn.__version__)"
# 1.9.1

Le code tient en quelques lignes. On génère des données de démonstration avec make_blobs, puis on entraîne un k-means à 4 clusters :

from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Données de démonstration : 300 points, 4 groupes
X, _ = make_blobs(n_samples=300, centers=4, cluster_std=0.70, random_state=42)
# Entraînement de k-means
km = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = km.fit_predict(X)
print("Inertie :", round(km.inertia_, 1))
print("Silhouette :", round(silhouette_score(X, labels), 3))

La sortie confirme un bon partitionnement : l'inertie est la somme des distances au carré entre chaque point et le centre de son cluster (plus elle est basse, plus les groupes sont compacts), et la silhouette, expliquée plus bas, atteint 0.855 sur un maximum de 1.

Inertie : 277.5
Silhouette : 0.855

L'attribut labels contient le numéro de cluster de chaque point, et km.cluster_centers_ les coordonnées des centres. En colorant les points par cluster et en marquant les centres, le résultat est net :

Les mêmes points, colorés en 4 clusters distincts avec leurs centres marqués d'une croix rouge

Le principal défi de k-means : il faut lui donner k, le nombre de clusters, alors que c'est souvent ce qu'on cherche. Deux méthodes complémentaires aident à le trouver.

On entraîne k-means pour plusieurs valeurs de k et on trace l'inertie (la somme des distances au carré des points à leur centre) en fonction de k. L'inertie baisse toujours quand k augmente, mais elle chute brutalement puis se stabilise : le « coude » de la courbe indique le bon k.

for k in range(1, 9):
m = KMeans(n_clusters=k, random_state=42, n_init=10).fit(X)
print(k, round(m.inertia_, 1))

Ce bloc réutilise X et KMeans du bloc précédent. Voici la sortie complète, de k=1 à k=8 :

1 19710.6
2 9125.8
3 1840.9
4 277.5
5 251.0
6 225.6
7 200.4
8 178.2

L'inertie s'effondre jusqu'à k=4 (de 1840 à 277), puis ne baisse plus que de 22 à 27 points par cran : c'est le coude. Le bon k est donc à 4 clusters, ce que la courbe montre clairement. Ici, le coude est net parce que les données ont été générées avec quatre groupes bien séparés ; sur des données réelles il est souvent plus flou, d'où l'intérêt de le recouper avec la silhouette :

Courbe de la méthode du coude : l'inertie chute fortement jusqu'à k=4 puis s'aplatit

Le coefficient de silhouette mesure à quel point chaque point est bien dans son cluster (proche des siens, loin des autres). Il varie de -1 à 1 ; plus haut est meilleur. On le calcule pour plusieurs k et on garde le maximum :

for k in range(2, 9):
m = KMeans(n_clusters=k, random_state=42, n_init=10).fit(X)
print(k, round(silhouette_score(X, m.labels_), 3))

Ce bloc réutilise lui aussi X, KMeans et silhouette_score. Sortie complète, de k=2 à k=8 (la silhouette n'existe pas pour k=1) :

2 0.609
3 0.789
4 0.855
5 0.739
6 0.599
7 0.457
8 0.33

Le score est maximal à k=4 (0.855) puis recule à chaque cran, ce qui confirme la méthode du coude. Quand les deux méthodes concordent, le choix est solide.

k-means n'est pas seul. Le bon algorithme dépend de la forme des groupes et de la présence de bruit dans les données.

AlgorithmePrincipeForcesLimites
k-meansk centres, distance minimaleRapide, simpleIl faut donner k ; clusters sphériques
DBSCANDensité de pointsTrouve k seul, gère le bruit, formes libresSensible à ses deux paramètres
Clustering hiérarchiqueFusions successives (dendrogramme)Pas besoin de k a priori, visuelLent sur gros volumes

Le bruit désigne les points isolés, trop éloignés des autres pour former un groupe. DBSCAN a deux paramètres : le rayon de voisinage (eps) et le nombre minimal de voisins (min_samples) qui fait d'une zone un groupe dense. Le dendrogramme est l'arbre des fusions du clustering hiérarchique : on le coupe à la hauteur voulue pour obtenir le nombre de groupes. La leçon ne les entraîne pas, elle les situe par rapport à k-means.

En pratique : k-means pour démarrer et pour des groupes bien séparés, DBSCAN quand les clusters ont des formes irrégulières ou qu'il y a des points aberrants, le hiérarchique pour explorer visuellement la structure.

Le clustering sert partout où l'on veut révéler des groupes sans les connaître à l'avance :

  • Profils de charge : regrouper des serveurs ou des services d'après leurs métriques (CPU, mémoire, requêtes) pour repérer les familles de comportement, puis celui qui n'appartient à aucune.
  • Segmentation client : regrouper les clients par comportement d'achat pour cibler le marketing.
  • Détection d'anomalies : les points qui n'entrent dans aucun cluster dense sont des candidats suspects (fraude, panne).
  • Compression et résumé : remplacer des milliers de points par quelques centres représentatifs.
  • Organisation de contenu : regrouper des documents ou des images similaires.
  1. Le clustering regroupe des données similaires sans étiquettes : c'est de l'apprentissage non supervisé.
  2. k-means est l'algorithme de référence : simple, rapide, mais il faut lui donner k.
  3. La méthode du coude et la silhouette aident à choisir le nombre de clusters ; les faire concorder fiabilise le choix.
  4. DBSCAN gère le bruit et les formes libres, le hiérarchique offre une vue visuelle.
  5. Cas d'usage phares : profils de charge de serveurs, segmentation client et détection d'anomalies.

Contrôle de connaissances

Validez vos connaissances avec ce quiz interactif

6 questions
6 min.
70% requis

Informations

  • Le chronomètre démarre au clic sur Démarrer
  • Questions à choix multiples, vrai/faux et réponses courtes
  • Vous pouvez naviguer entre les questions
  • Les résultats détaillés sont affichés à la fin

Lance le quiz et démarre le chronomètre

Ce projet vous est utile ?

Les guides, formations, quiz et labs restent gratuits. Si vous les utilisez régulièrement, vous pouvez contribuer à leur maintenance et à leur développement.

Devenir membre de soutien (nouvel onglet) Soutenir une fois (nouvel onglet) En savoir plus

Suivez aussi le projet sur LinkedIn