Formation ML / Unsupervised

K-Means Clustering

Debutant 30 min 14 sections

Apprenez a regrouper des donnees automatiquement avec l'algorithme K-Means, une technique fondamentale d'apprentissage non supervise.

Objectifs d'apprentissage

  • Comprendre la difference entre supervise et non supervise
  • Implementer K-Means avec scikit-learn
  • Utiliser la methode du coude pour choisir K
  • Visualiser et interpreter les clusters

Prerequis

Notions de base en Python

Theorie

Apprentissage non supervise

Contrairement a la classification (supervise), le clustering n'utilise PAS de labels predefinies.

Objectif: Trouver des groupes "naturels" dans les donnees.

K-Means:

  • K = nombre de clusters desire (a definir)
  • Chaque cluster a un "centroide" (centre)
  • Les points sont assignes au centroide le plus proche

Algorithme:

  1. Initialiser K centroides aleatoirement
  2. Assigner chaque point au centroide le plus proche
  3. Recalculer les centroides (moyenne des points)
  4. Repeter 2-3 jusqu'a convergence

Applications: segmentation clients, compression d'images, detection d'anomalies...

Theorie

Schema: Fonctionnement de K-Means

Supervise vs Non-supervise:

SUPERVISENON-SUPERVISE
Donnees avec labelsDonnees SANS labels
"Apprends a reconnaitre chiens et chats""Trouve des groupes par toi-meme"
flowchart LR subgraph Supervise["SUPERVISE: on connait les classes"] S1["Chien"] S2["Chat"] S3["Chien"] S4["Chat"] end subgraph NonSupervise["NON-SUPERVISE: classes inconnues"] N1(("?")) N2(("?")) N3(("?")) N4(("?")) end style S1 fill:#F7E64D,color:#1A1A1A style S3 fill:#F7E64D,color:#1A1A1A style S2 fill:#C09CF0,color:#1A1A1A style S4 fill:#C09CF0,color:#1A1A1A style N1 fill:#E5D7F5,color:#1A1A1A style N2 fill:#E5D7F5,color:#1A1A1A style N3 fill:#E5D7F5,color:#1A1A1A style N4 fill:#E5D7F5,color:#1A1A1A

Algorithme K-Means etape par etape:

flowchart LR subgraph E1["ETAPE 1: Initialisation"] I1["Placer K centroides
aleatoirement"] end subgraph E2["ETAPE 2: Assignation"] A1["Chaque point →
centroide le plus proche"] end subgraph E3["ETAPE 3: Mise a jour"] U1["Recalculer centroides
= moyenne des points"] end subgraph E4["ETAPE 4: Repeter"] R1["Jusqu'a convergence"] end E1 --> E2 --> E3 --> E4 E4 -.->|"pas stable"| E2

Comment un point est assigne:

Le point est assigne au centroide le plus proche (distance minimale).

Exemple concret avec code couleur - Assignation d'un point:

Nouveau point: $\textcolor{#3498db}{x = 4.5}$, $\textcolor{#e67e22}{y = 3.2}$

Centroides des clusters:

  • $\textcolor{#9B7AC4}{Centroide\ A}$: $(\textcolor{#9B7AC4}{2.0}, \textcolor{#9B7AC4}{1.5})$
  • $\textcolor{#F7E64D}{Centroide\ B}$: $(\textcolor{#F7E64D}{5.0}, \textcolor{#F7E64D}{3.0})$

Etape 1 - Calcul des distances (Euclidienne):

$d_A = \sqrt{(\textcolor{#3498db}{4.5} - \textcolor{#9B7AC4}{2.0})^2 + (\textcolor{#e67e22}{3.2} - \textcolor{#9B7AC4}{1.5})^2} = \sqrt{6.25 + 2.89} = \textcolor{#e74c3c}{\mathbf{3.02}}$

$d_B = \sqrt{(\textcolor{#3498db}{4.5} - \textcolor{#F7E64D}{5.0})^2 + (\textcolor{#e67e22}{3.2} - \textcolor{#F7E64D}{3.0})^2} = \sqrt{0.25 + 0.04} = \textcolor{#27ae60}{\mathbf{0.54}}$

Etape 2 - Comparaison:

$\textcolor{#27ae60}{d_B = 0.54} < \textcolor{#e74c3c}{d_A = 3.02}$

Resultat: Le point est assigne au $\textcolor{#27ae60}{\mathbf{Cluster\ B}}$ (distance minimale)

Legende des couleurs:

  • $\textcolor{#3498db}{Bleu}$: coordonnee X du point ($\textcolor{#3498db}{4.5}$)
  • $\textcolor{#e67e22}{Orange}$: coordonnee Y du point ($\textcolor{#e67e22}{3.2}$)
  • $\textcolor{#9B7AC4}{Violet}$: Centroide A (trop loin)
  • $\textcolor{#F7E64D}{Jaune}$: Centroide B (plus proche)
  • $\textcolor{#27ae60}{Vert}$: Distance gagnante / Cluster assigne
  • $\textcolor{#e74c3c}{Rouge}$: Distance perdante

Resume du processus:

flowchart TD Init["1. Initialise
K centroides"] Assign["2. Assigne
les points"] Update["3. Recalcule
centroides"] Check{"Convergence?
(stable?)"} Done["FINI!
K clusters"] Init --> Assign Assign --> Update Update --> Check Check -->|Non| Assign Check -->|Oui| Done style Init fill:#E5D7F5,color:#1A1A1A style Done fill:#F7E64D,color:#1A1A1A
Avance Exercice manuel: A vous de calculer!

Objectif: Maitriser les calculs de K-Means a la main (distances, assignation, centroides).

Prenez une feuille et un stylo. Resolvez chaque partie AVANT de regarder la solution !

CONTEXTE

Vous avez 6 points a regrouper en K=2 clusters. Les coordonnees sont :

Pointxy
A12
B21
C23
D87
E98
F89

Les centroides initiaux sont :

  • $C_1 = (1, 1)$ (Cluster 1)
  • $C_2 = (9, 9)$ (Cluster 2)

Distance euclidienne : $d = \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2}$

PARTIE 1 : Calcul des distances

Calculez la distance de chaque point aux deux centroides.

1.1) Distance du point A au centroide $C_1$ et au centroide $C_2$

1.2) Distance du point D au centroide $C_1$ et au centroide $C_2$

1.3) Completez le tableau des distances pour les 6 points

PARTIE 2 : Assignation aux clusters

Chaque point est assigne au centroide le plus proche.

2.1) A quel cluster appartient le point A ?

2.2) A quel cluster appartient le point D ?

2.3) Listez tous les points du Cluster 1 et du Cluster 2

PARTIE 3 : Mise a jour des centroides

Apres l'assignation, on recalcule les centroides (moyenne des points de chaque cluster).

3.1) Calculez le nouveau centroide $C_1'$ (moyenne des points du Cluster 1)

3.2) Calculez le nouveau centroide $C_2'$ (moyenne des points du Cluster 2)

3.3) Les centroides ont-ils beaucoup bouge ?

PARTIE 4 : Calcul de l'inertie

L'inertie est la somme des distances au carre entre chaque point et son centroide.

$$\text{Inertie} = \sum_{i} d(P_i, C_{\text{assigne}})^2$$

4.1) Calculez l'inertie avec les centroides initiaux ($C_1$, $C_2$)

4.2) Calculez l'inertie avec les nouveaux centroides ($C_1'$, $C_2'$)

4.3) L'inertie a-t-elle diminue ? Pourquoi ?

PARTIE 5 : Interpretation

5.1) L'algorithme a-t-il converge apres cette iteration ?

5.2) Si on avait initialise avec $C_1 = (5, 5)$ et $C_2 = (5, 6)$, le resultat aurait-il ete different ?

5.3) Pourquoi K-Means peut donner des resultats differents selon l'initialisation ?

Avance Solution de l'exercice manuel

SOLUTION DETAILLEE

Prenez le temps de comparer avec vos reponses. Verifiez chaque etape !

RAPPEL DES DONNEES

Points : A(1,2), B(2,1), C(2,3), D(8,7), E(9,8), F(8,9)

Centroides initiaux : $\textcolor{#9B7AC4}{C_1 = (1, 1)}$, $\textcolor{#F7E64D}{C_2 = (9, 9)}$

PARTIE 1 : Calcul des distances

1.1) Point A(1, 2) :

$$d(A, C_1) = \sqrt{(1-1)^2 + (2-1)^2} = \sqrt{0 + 1} = \textcolor{#27ae60}{\mathbf{1.00}}$$

$$d(A, C_2) = \sqrt{(1-9)^2 + (2-9)^2} = \sqrt{64 + 49} = \textcolor{#e74c3c}{\mathbf{10.63}}$$

1.2) Point D(8, 7) :

$$d(D, C_1) = \sqrt{(8-1)^2 + (7-1)^2} = \sqrt{49 + 36} = \textcolor{#e74c3c}{\mathbf{9.22}}$$

$$d(D, C_2) = \sqrt{(8-9)^2 + (7-9)^2} = \sqrt{1 + 4} = \textcolor{#27ae60}{\mathbf{2.24}}$$

1.3) Tableau complet des distances :

PointCoordsDistance a C1Distance a C2Plus proche
A(1, 2)1.0010.63C1
B(2, 1)1.0010.63C1
C(2, 3)2.249.22C1
D(8, 7)9.222.24C2
E(9, 8)10.631.41C2
F(8, 9)10.631.00C2

PARTIE 2 : Assignation aux clusters

2.1) Point A : $d(A, C_1) = 1.00 < d(A, C_2) = 10.63$ → $\textcolor{#9B7AC4}{\text{Cluster 1}}$

2.2) Point D : $d(D, C_1) = 9.22 > d(D, C_2) = 2.24$ → $\textcolor{#F7E64D}{\text{Cluster 2}}$

2.3) Composition des clusters :

  • $\textcolor{#9B7AC4}{\text{Cluster 1}}$ : A, B, C (les 3 points en bas a gauche)
  • $\textcolor{#F7E64D}{\text{Cluster 2}}$ : D, E, F (les 3 points en haut a droite)

$\boxed{\text{Cluster 1} = \{A, B, C\} \quad \text{Cluster 2} = \{D, E, F\}}$

PARTIE 3 : Mise a jour des centroides

3.1) Nouveau centroide $C_1'$ :

Points du Cluster 1 : A(1,2), B(2,1), C(2,3)

$$C_1' = \left( \frac{1+2+2}{3}, \frac{2+1+3}{3} \right) = \left( \frac{5}{3}, \frac{6}{3} \right)$$

$\boxed{C_1' = \textcolor{#9B7AC4}{(1.67, 2.00)}}$

3.2) Nouveau centroide $C_2'$ :

Points du Cluster 2 : D(8,7), E(9,8), F(8,9)

$$C_2' = \left( \frac{8+9+8}{3}, \frac{7+8+9}{3} \right) = \left( \frac{25}{3}, \frac{24}{3} \right)$$

$\boxed{C_2' = \textcolor{#F7E64D}{(8.33, 8.00)}}$

3.3) Deplacement des centroides :

  • $C_1$ : $(1, 1) \to (1.67, 2.00)$ → deplacement de $\sqrt{0.67^2 + 1^2} = 1.20$
  • $C_2$ : $(9, 9) \to (8.33, 8.00)$ → deplacement de $\sqrt{0.67^2 + 1^2} = 1.20$

Les centroides se sont deplaces vers le "centre de gravite" de leurs points.

PARTIE 4 : Calcul de l'inertie

4.1) Inertie avec centroides initiaux :

$$\text{Inertie}_{init} = d(A,C_1)^2 + d(B,C_1)^2 + d(C,C_1)^2 + d(D,C_2)^2 + d(E,C_2)^2 + d(F,C_2)^2$$

$$= 1^2 + 1^2 + 2.24^2 + 2.24^2 + 1.41^2 + 1^2$$

$$= 1 + 1 + 5 + 5 + 2 + 1 = \textcolor{#e67e22}{\mathbf{15}}$$

4.2) Inertie avec nouveaux centroides :

Distances aux nouveaux centroides :

  • $d(A, C_1') = \sqrt{(1-1.67)^2 + (2-2)^2} = 0.67$
  • $d(B, C_1') = \sqrt{(2-1.67)^2 + (1-2)^2} = 1.05$
  • $d(C, C_1') = \sqrt{(2-1.67)^2 + (3-2)^2} = 1.05$
  • $d(D, C_2') = \sqrt{(8-8.33)^2 + (7-8)^2} = 1.05$
  • $d(E, C_2') = \sqrt{(9-8.33)^2 + (8-8)^2} = 0.67$
  • $d(F, C_2') = \sqrt{(8-8.33)^2 + (9-8)^2} = 1.05$

$$\text{Inertie}_{new} = 0.67^2 + 1.05^2 + 1.05^2 + 1.05^2 + 0.67^2 + 1.05^2$$

$$= 0.45 + 1.10 + 1.10 + 1.10 + 0.45 + 1.10 = \textcolor{#27ae60}{\mathbf{5.30}}$$

4.3) Comparaison :

$\boxed{\text{Inertie} : 15 \to 5.30 \text{ (reduction de 65\%)}}$

L'inertie a diminue car les centroides sont maintenant au centre de leurs clusters, minimisant les distances.

PARTIE 5 : Interpretation

5.1) Convergence :

Non, l'algorithme n'a pas encore converge. Il faudrait refaire une iteration :

  • Recalculer les distances avec $C_1'$ et $C_2'$
  • Verifier si les assignations changent
  • Si aucun point ne change de cluster → convergence

5.2) Initialisation differente :

Avec $C_1 = (5, 5)$ et $C_2 = (5, 6)$, les deux centroides sont proches. L'algorithme pourrait :

  • Converger vers une solution differente
  • Ou trouver la meme solution apres plus d'iterations

5.3) Pourquoi des resultats differents :

K-Means minimise l'inertie localement, pas globalement. Differentes initialisations peuvent mener a differents minima locaux. C'est pourquoi n_init=10 execute 10 fois avec des initialisations differentes et garde le meilleur resultat.

RESUME DES RESULTATS

EtapeCluster 1Cluster 2Inertie
InitialC1 = (1, 1)C2 = (9, 9)15.0
Apres 1 iterC1' = (1.67, 2)C2' = (8.33, 8)5.3

Legende des couleurs :

  • $\textcolor{#9B7AC4}{Violet}$ : Cluster 1 et son centroide
  • $\textcolor{#F7E64D}{Jaune}$ : Cluster 2 et son centroide
  • $\textcolor{#27ae60}{Vert}$ : Distance gagnante (plus proche)
  • $\textcolor{#e74c3c}{Rouge}$ : Distance perdante (plus loin)
  • $\textcolor{#e67e22}{Orange}$ : Inertie initiale
Code

Explorer les donnees

Cliquez sur "Executer" pour voir le resultat
Code

Visualiser les donnees brutes

Cliquez sur "Executer" pour voir le resultat
Contenu verrouille section restante
6 / 14

Continuez votre apprentissage

Vous avez explore 6 sections de ce module. Connectez-vous pour debloquer le reste du cours, incluant les exercices pratiques et les solutions.

Console Python

Raccourcis clavier
Ctrl/Cmd+Enter Executer
Ctrl/Cmd+Shift+/ Commenter
Tab Indenter
Shift+Tab Desindenter
Ctrl/Cmd+Z Annuler
Ctrl/Cmd+Y Retablir
Ctrl+Enter pour executer
Cliquez sur "Executer" pour voir le resultat