← Tous les articles

MATHÉMATIQUES / MACHINE LEARNING Prototype

Comprendre PCA
par la géométrie.

Un nuage de points. Un axe que tu fais tourner.
Et les mathématiques qui relient les deux.

Comment passer de plusieurs variables à quelques coordonnées tout en conservant le maximum de variance ?

Imagine un jeu de données où chaque observation est décrite par cinquante nombres. Cinquante mesures, cinquante caractéristiques, cinquante dimensions. Certaines apportent peut-être des variations très proches : quand l’une augmente, une autre augmente presque toujours avec elle.

Peut-on représenter ces observations avec moins de nombres, sans trop déformer leur géométrie ?

C’est ce que permet l’analyse en composantes principales, souvent appelée PCA, pour Principal Component Analysis, ou ACP en français. Elle cherche de nouveaux axes sur lesquels les données varient le plus, puis nous permet de conserver seulement une partie de ces axes.

Pour comprendre comment elle fonctionne, nous allons partir de deux dimensions. Tu pourras tourner un axe, observer les projections et reconstruire progressivement le raisonnement qui mène aux vecteurs propres.

Tu n’as pas besoin de connaître les vecteurs propres pour commencer. Les démonstrations sont proposées dans des encadrés optionnels.

1. Supprimer une dimension

Chaque point du nuage ci-dessous possède deux coordonnées : une position horizontale et une position verticale.

Nous voudrions remplacer ces deux coordonnées par un seul nombre. Pour cela, choisissons une droite et projetons chaque point dessus, perpendiculairement à la droite. La position du point projeté le long de cet axe devient sa nouvelle coordonnée.

Mais quelle droite choisir ?

Fais tourner l’axe. Observe la manière dont les points se répartissent sur la ligne de projection.

EXPÉRIENCE 01 / LINIA

Le laboratoire de projection

Un point, une couleur : retrouve-le dans le nuage et sur la ligne. Les échelles restent fixes.

Le laboratoire de projection

Quand l’axe traverse le nuage dans sa largeur, les points projetés se retrouvent dans un espace très resserré. Une grande partie de l’étalement initial disparaît.

Quand il suit sa longueur, les projections sont davantage dispersées. Nous supprimons toujours une dimension, mais nous conservons mieux les variations dominantes du nuage.

Notre question devient donc plus précise : quelle direction conserve le plus de dispersion après projection ?

2. Mesurer cette dispersion avec la variance

Pour comparer les directions, il nous faut une mesure de l’étalement des points projetés.

Appelons leurs coordonnées z1,z2,…,znz_1,z_2,\ldots,z_n. Leur moyenne est :

zˉ=1n∑i=1nzi. \bar z=\frac{1}{n}\sum_{i=1}^{n}z_i.

La variance mesure la moyenne des écarts au carré autour de cette moyenne :

Var⁡(z)=1n∑i=1n(zi−zˉ)2. \operatorname{Var}(z)=\frac{1}{n}\sum_{i=1}^{n}(z_i-\bar z)^2.

Pourquoi prendre les carrés ? Les écarts peuvent être positifs ou négatifs. Si nous les additionnions directement, ils s’annuleraient. Les carrés permettent de mesurer leur taille sans cette annulation et donnent davantage de poids aux grands écarts.

Tourne à nouveau l’axe. Cette fois, essaie de faire monter la variance aussi haut que possible.

EXPÉRIENCE 02 / LINIA

Voir la variance

La variance est calculée sur les coordonnées projetées. Essaie de trouver son maximum.

Voir la variance
Variance projetée
0,46
Voir le calcul

La moyenne des projections est zéro. La variance est la moyenne des écarts au carré ; trois écarts sont illustrés ici.

La direction qui maximise cette variance est notre première direction principale. La coordonnée obtenue en projetant les données dessus est la première composante principale, ou PC1.

Dans la pratique, on appelle aussi souvent « composante » l’axe lui-même. Nous distinguerons ici la direction, qui décrit l’axe, et les coordonnées des observations sur cet axe.

Nous avons déjà l’intuition de PCA. Il reste à comprendre pourquoi ce critère est utile, puis comment trouver la direction optimale sans essayer tous les angles.

3. Ce que nous perdons en projetant

La projection donne une coordonnée par point. À partir de cette coordonnée, nous pouvons replacer le point sur la droite, dans l’espace original. C’est une reconstruction.

Elle est imparfaite : nous avons oublié la position du point dans la direction perpendiculaire à la droite.

Le segment entre le point initial et sa reconstruction représente cette erreur. Une manière de mesurer la déformation totale consiste à additionner les longueurs au carré de ces segments.

Compare la direction de variance maximale avec une autre direction. Dans laquelle les segments d’erreur sont-ils globalement les plus courts ?

EXPÉRIENCE 03 / LINIA

Projection et reconstruction

Les segments représentent les résidus. Leur longueur au carré est mesurée dans les unités du nuage.

Projection et reconstruction
Variance conservée
0,46
Erreur de reconstruction
3,84
Dispersion totale
4,30
Conservée · 10,7 %Perdue · 89,3 %

Pour des données centrées et une projection orthogonale, ces deux objectifs coïncident : maximiser la variance conservée revient à minimiser l’erreur de reconstruction au carré.

C’est le sens précis dans lequel PCA cherche à « perdre le moins possible ». Elle minimise cette déformation géométrique. Cela ne garantit pas que les variations conservées seront les plus utiles pour prédire une maladie, reconnaître un objet ou distinguer des catégories. Nous reviendrons sur cette différence.

Pour aller plus loin — Pourquoi ces deux objectifs coïncident

Pour un point centré xix_i et une direction unitaire uu, la reconstruction est :

x^i=(xi⊤u)u. \hat x_i=(x_i^\top u)u.

La reconstruction et le résidu xi−x^ix_i-\hat x_i sont perpendiculaires. Le théorème de Pythagore donne :

∥xi∥2=(xi⊤u)2+∥xi−x^i∥2. \|x_i\|^2=(x_i^\top u)^2+\|x_i-\hat x_i\|^2.

En prenant la moyenne sur tous les points :

1n∑i∥xi∥2⏟dispersion totale, fixe=1n∑i(xi⊤u)2⏟variance conserveˊe+1n∑i∥xi−x^i∥2⏟erreur de reconstruction. \underbrace{\frac1n\sum_i\|x_i\|^2}_{\text{dispersion totale, fixe}} =\underbrace{\frac1n\sum_i(x_i^\top u)^2}_{\text{variance conservée}} +\underbrace{\frac1n\sum_i\|x_i-\hat x_i\|^2}_{\text{erreur de reconstruction}}.

La dispersion totale ne dépend pas de l’angle. Augmenter le deuxième terme diminue donc nécessairement le troisième.

4. Centrer le nuage

Déplaçons maintenant tout le nuage vers la droite, sans changer sa forme.

Les distances entre les points n’ont pas changé. Leur dispersion autour de la moyenne non plus. La direction principale devrait donc rester identique.

Pour travailler directement avec ces variations autour de la moyenne, PCA commence par centrer les données. Nous calculons la moyenne de chaque variable, puis nous la soustrayons à chaque observation.

Si xix_i est une observation et μ\mu le vecteur des moyennes :

xi,c=xi−μ. x_{i,c}=x_i-\mu.

Le centre du nuage se retrouve à l’origine. Nous avons changé sa position, sans modifier sa forme.

Déplace le nuage, puis active le centrage. Les directions principales restent les mêmes.

EXPÉRIENCE 04 / LINIA

Retirer la moyenne

Déplacer tout le nuage change sa moyenne, mais pas ses directions principales.

Retirer la moyenne
Moyenne avant
(2,00 ; 1,50)
Moyenne actuelle
(2,00 ; 1,50)
Variance sur PC1
4,00

PC1 conserve la même orientation : 34°. La translation s’applique aussi au centre de l’axe.

À partir de maintenant, la lettre XX désignera la matrice des données centrées : une ligne par observation, une colonne par variable. Elle possède donc nn lignes et dd colonnes.

Nous garderons la moyenne de côté : elle sera nécessaire pour reconstruire les observations dans leur repère original.

5. Écrire une projection avec un vecteur

Une direction peut être décrite par un vecteur uu. En deux dimensions, il possède deux coordonnées :

u=[u1u2]. u=\begin{bmatrix}u_1\\u_2\end{bmatrix}.

Nous lui imposons une longueur égale à 1 :

∥u∥=1. \|u\|=1.

Cette contrainte permet de comparer les directions à la même échelle. Sinon, nous pourrions augmenter les coordonnées projetées simplement en allongeant le vecteur. Multiplier uu par 10 multiplierait les projections par 10 et leur variance par 100, sans améliorer le choix de direction.

Pour un point xix_i, la coordonnée sur l’axe est son produit scalaire avec uu :

zi=xi⊤u. z_i=x_i^\top u.

Pour toutes les observations à la fois :

z=Xu. \boxed{z=Xu.}

Une matrice de taille n×dn\times d, multipliée par un vecteur à dd coordonnées, donne un vecteur à nn coordonnées : un nombre par observation.

EXPÉRIENCE 05 / LINIA

Du point à la matrice

Les étapes relient la géométrie aux symboles. Reviens librement sur chaque étape.

Du point à la matrice
Une projection dans le planAu0-2,09uUn seul nombre sur l’axe orienté-4-20+2+4-2,09Coordonnée négative : avant 0Une projection dans le planAu0-2,09uUn seul nombre sur l’axe orienté-4-20+2+4-2,09Coordonnée négative : avant 0

Projection dans le plan : -2,09u → Coordonnée : -2,09.

∥u∥=1\|u\|=1
Norme du vecteur
1
Produit scalaire du point sélectionné
-2,09

Un scalaire est un seul nombre. Son signe indique de quel côté de zéro se trouve la projection, selon le sens de u.

1 / 5

Nous pouvons maintenant écrire notre objectif : trouver un vecteur unitaire uu qui maximise la variance de XuXu.

6. La covariance résume les variations

Pour trouver cette direction, nous allons utiliser la matrice de covariance.

La variance décrit les variations d’une variable. La covariance décrit comment deux variables varient ensemble autour de leurs moyennes.

Si les valeurs élevées de l’une vont généralement avec les valeurs élevées de l’autre, leur covariance est positive. Si elles vont plutôt avec les valeurs faibles de l’autre, elle est négative.

Pour deux variables centrées :

Cov⁡(x1,x2)=1n∑i=1nxi1xi2. \operatorname{Cov}(x_1,x_2)=\frac1n\sum_{i=1}^n x_{i1}x_{i2}.

Une covariance nulle indique l’absence de covariance linéaire ; elle ne garantit pas que les variables sont indépendantes.

En deux dimensions, nous réunissons ces mesures dans une matrice :

Σ=[Var⁡(x1)Cov⁡(x1,x2)Cov⁡(x1,x2)Var⁡(x2)]. \Sigma= \begin{bmatrix} \operatorname{Var}(x_1)&\operatorname{Cov}(x_1,x_2)\\ \operatorname{Cov}(x_1,x_2)&\operatorname{Var}(x_2) \end{bmatrix}.

La diagonale contient les variances de chaque variable. Les autres cases contiennent leurs covariances. Les deux cases hors diagonale sont identiques : l’ordre des variables ne change pas leur covariance.

Compare les trois nuages. Que deviennent les cases hors diagonale lorsque la pente du nuage change de signe ?

EXPÉRIENCE 06 / LINIA

Lire la covariance

Les variances restent égales à 1. Seule la variation conjointe change.

Lire la covariance

Matrice de covariance Σ

Variation conjointe

Avec notre matrice de données centrées, cette matrice s’écrit :

Σ=1nX⊤X. \Sigma=\frac1n X^\top X.

Et c’est elle qui permet de calculer la variance dans n’importe quelle direction :

Var⁡(Xu)=u⊤Σu. \boxed{\operatorname{Var}(Xu)=u^\top\Sigma u.}

Cette expression compacte est la version mathématique de notre axe rotatif : nous choisissons une direction uu, et nous obtenons la variance des données projetées dessus.

Pour aller plus loin — Retrouver cette formule

Les colonnes de XX sont centrées. Leur combinaison linéaire z=Xuz=Xu est donc centrée elle aussi : zˉ=0\bar z=0.

Sa variance vaut :

Var⁡(z)=1n∑izi2=1nz⊤z. \operatorname{Var}(z)=\frac1n\sum_i z_i^2=\frac1n z^\top z.

En remplaçant zz par XuXu :

Var⁡(Xu)=1n(Xu)⊤(Xu)=1nu⊤X⊤Xu=u⊤(1nX⊤X)u=u⊤Σu. \begin{aligned} \operatorname{Var}(Xu) &=\frac1n(Xu)^\top(Xu)\\ &=\frac1n u^\top X^\top Xu\\ &=u^\top\left(\frac1nX^\top X\right)u\\ &=u^\top\Sigma u. \end{aligned}
EXPÉRIENCE 07 / LINIA

Relier la formule à la figure

Chaque ligne décrit la même variance, calculée sur les mêmes données.

Relier la formule à la figure
Var⁡(z)=1n∑izi2\operatorname{Var}(z)=\frac1n\sum_i z_i^2
Calcul direct des projections
3,29
Calcul matriciel
3,29
1 / 5

Une convention sur le dénominateur

Nous utilisons ici 1/n1/n pour mesurer la variance de notre ensemble de points. On rencontre aussi 1/(n−1)1/(n-1), notamment pour estimer une covariance de population à partir d’un échantillon.

Pour n>1n>1, passer d’une convention à l’autre multiplie toute la matrice par une constante positive. Les directions principales restent identiques, tout comme les proportions de variance expliquée. Les valeurs propres changent d’échelle. Il faut simplement garder la même convention dans tous les calculs comparés.

7. Pourquoi des vecteurs propres

Notre problème est maintenant :

max⁡∥u∥=1u⊤Σu. \max_{\|u\|=1}u^\top\Sigma u.

La lettre uu représente la direction unitaire que nous choisissons pour projeter le nuage. La matrice de covariance Σ\Sigma résume, elle, les variations de ce nuage.

Nous pouvons appliquer cette matrice au vecteur uu : le produit Σu\Sigma u, qui se lit « Sigma fois u », donne un nouveau vecteur. Pour une direction quelconque, ce vecteur change généralement de direction.

Tourne la direction choisie jusqu’à ce que son image reste sur la même droite.

EXPÉRIENCE 08 / LINIA

Reconnaître une direction propre

La matrice agit sur un vecteur. Cette transformation est distincte de la projection PCA.

Reconnaître une direction propre

u est la direction choisie pour projeter le nuage. Ici, on lui applique la matrice de covariance Σ du même nuage. Σu est le vecteur obtenu : il se lit « Sigma fois u », pas « somme de u ».

→ Direction choisie · u→ Après transformation par la covariance · Σu
Σuu0
Écart de direction
28,40°
Longueur de u
1
Longueur de Σu
3,43

Les deux flèches ne sont pas alignées. Tourne la direction orange pour que son image bleue reste sur la même droite.

Voir la matrice utilisée
Σ=[2.841.711.711.46]\Sigma=\begin{bmatrix}2.84&1.71\\1.71&1.46\end{bmatrix}

La matrice reste fixe quand tu tournes u. Ses coefficients sont calculés sur le nuage de départ.

Lorsque les deux flèches s’alignent, la transformation conserve la direction et change seulement la longueur. Nous venons de reconnaître une direction propre.

La covariance étant une matrice symétrique, elle possède une base de vecteurs propres orthonormés.

Pour un vecteur propre uu et sa valeur propre λ\lambda :

Σu=λu. \Sigma u=\lambda u.

Si uu est unitaire, la variance dans cette direction devient :

u⊤Σu=u⊤(λu)=λ. u^\top\Sigma u=u^\top(\lambda u)=\lambda.

La valeur propre est donc la variance portée par cette direction propre.

La direction associée à la plus grande valeur propre est celle qui nous intéresse : elle maximise la variance projetée. Voilà d’où vient PC1.

Pour aller plus loin — Pourquoi la plus grande valeur propre donne le maximum

Notons v1,…,vdv_1,\ldots,v_d une base orthonormée de vecteurs propres, avec les valeurs propres triées :

λ1≥λ2≥⋯≥λd≥0. \lambda_1\geq\lambda_2\geq\cdots\geq\lambda_d\geq0.

Toute direction unitaire peut s’écrire :

u=∑jajvj,∑jaj2=1. u=\sum_j a_jv_j,\qquad\sum_j a_j^2=1.

En utilisant l’orthogonalité des vecteurs propres :

u⊤Σu=∑jaj2λj≤λ1∑jaj2=λ1. u^\top\Sigma u=\sum_j a_j^2\lambda_j\leq\lambda_1\sum_j a_j^2=\lambda_1.

La variance ne peut donc pas dépasser λ1\lambda_1. Elle atteint cette valeur pour u=v1u=v_1.

Si la plus grande valeur propre est répétée, plusieurs directions maximisent la variance. Il n’existe alors pas de PC1 unique. Sur un nuage parfaitement isotrope en 2D, toutes les directions sont équivalentes.

Autre démonstration — Avec les multiplicateurs de Lagrange

Nous cherchons à maximiser u⊤Σuu^\top\Sigma u, sous la contrainte u⊤u=1u^\top u=1. Posons :

L(u,λ)=u⊤Σu−λ(u⊤u−1). \mathcal L(u,\lambda)=u^\top\Sigma u-\lambda(u^\top u-1).

Comme Σ\Sigma est symétrique :

∇uL=2Σu−2λu. \nabla_u\mathcal L=2\Sigma u-2\lambda u.

À un point stationnaire :

Σu=λu. \Sigma u=\lambda u.

Les candidats sont donc des vecteurs propres. Cette condition seule ne distingue pas le maximum des autres points stationnaires. Le raisonnement précédent montre pourquoi la plus grande valeur propre fournit le maximum global.

8. Construire PC2, puis compléter le repère

Nous avons trouvé une première direction. Pour en obtenir une deuxième, PCA cherche la direction de variance maximale parmi celles qui sont perpendiculaires à la première.

En deux dimensions, la droite perpendiculaire est déjà déterminée. Mais en trois dimensions, les directions perpendiculaires à PC1 remplissent un plan entier. Nous pouvons faire tourner un axe dans ce plan tout en restant perpendiculaires à PC1.

PC1 reste fixe. Pour chaque direction candidate, nous projetons les points et mesurons leur variance, comme au début de l’article. La direction qui maximise cette variance sous la contrainte d’orthogonalité devient PC2.

Fais tourner la direction orange dans le plan, puis cherche la dispersion maximale.

EXPÉRIENCE 09 / LINIA

Construire PC2 autour de PC1

PC1 reste fixe. Fais tourner une direction dans le plan perpendiculaire pour trouver la plus grande variance restante.

Construire PC2 autour de PC1

PC1 est déjà trouvée : elle conserve 80,0 % de la variance. Choisis maintenant une direction dans le plan perpendiculaire. PC1 et le nuage restent fixes.

Variance sur cette direction
0,80
Variance supplémentaire
8,0 %
Avec PC1
88,0 %

La direction orange reste toujours perpendiculaire à PC1. Cherche l’orientation qui disperse le plus les projections : c’est elle qui donnera PC2.

Dans ce nuage, PC1 conserve 80 % de la variance totale. PC2 en apporte 15 % supplémentaires : ensemble, elles en conservent 95 %. Les 5 % restants correspondent à la troisième direction, perpendiculaire aux deux premières.

En dimension supérieure, nous continuons de la même façon : chaque nouvelle direction maximise la variance parmi celles qui sont perpendiculaires aux directions déjà retenues. Les vecteurs propres suivants, triés par valeur propre décroissante, fournissent ces directions.

Nous obtenons un nouveau repère : PC1, PC2, PC3, et ainsi de suite. Les coordonnées sur ces axes ont des covariances nulles entre elles. Cela ne suffit pas à garantir leur indépendance statistique.

À ce stade, si nous conservons tous les axes, nous n’avons encore supprimé aucune dimension. Nous avons seulement changé de repère.

La réduction intervient lorsque nous gardons seulement les premiers axes.

Réunissons les kk directions retenues dans une matrice WW, de taille d×kd\times k :

W=[u1u2⋯uk]. W=\begin{bmatrix}u_1&u_2&\cdots&u_k\end{bmatrix}.

Les nouvelles coordonnées sont :

Z=XW. \boxed{Z=XW.}

Chaque observation possède maintenant kk coordonnées au lieu de dd.

Pour reconstruire les données centrées à partir de ZZ :

X^=ZW⊤. \hat X=ZW^\top.

Puis nous rajoutons la moyenne pour retrouver le repère original. Si nous avons supprimé des directions où les données variaient, la reconstruction reste approximative.

9. Combien de composantes garder

Chaque valeur propre indique la variance portée par sa composante. La somme des valeurs propres est la variance totale, c’est-à-dire la somme des variances des variables d’origine.

La proportion de variance expliquée par la composante ii est :

λi∑j=1dλj. \frac{\lambda_i}{\sum_{j=1}^{d}\lambda_j}.

Pour les kk premières composantes, nous additionnons leurs valeurs propres :

rk=∑i=1kλi∑j=1dλj. \boxed{r_k=\frac{\sum_{i=1}^{k}\lambda_i}{\sum_{j=1}^{d}\lambda_j}.}

Prenons un exemple où les trois valeurs propres sont 8, 1,5 et 0,5. La variance totale vaut 10.

Composantes conservéesVariance expliquée
PC180 %
PC1 et PC295 %
PC1, PC2 et PC3100 %

Conserver deux composantes préserve ici 95 % de la variance. Les 5 % restants correspondent à la variance perdue, et donc à l’erreur moyenne de reconstruction rapportée à la dispersion totale.

Cela ne signifie pas « 95 % de toute l’information utile ». Un signal décisif pour une tâche peut se trouver dans une direction de faible variance.

Choisis un nombre de composantes. Compare la variance conservée et la reconstruction.

EXPÉRIENCE 10 / LINIA

Choisir les composantes

95 % est un seuil illustratif. Il ne mesure pas toute l’information utile.

Choisir les composantes
Conservée · 100,0 %Perdue · 0,0 %
Variance expliquée
100,0 %
Erreur moyenne au carré
0,00

Le nombre de composantes dépend de l’usage : visualisation, compression, préparation d’un modèle. Un seuil de variance expliquée peut aider à choisir, mais la qualité sur la tâche finale doit aussi être évaluée.

10. Les unités peuvent changer le résultat

Imaginons deux variables décrivant des objets : leur longueur en mètres et leur masse en kilogrammes.

Si nous remplaçons les mètres par des millimètres, les objets restent les mêmes. Pourtant, les nombres de la première colonne sont multipliés par 1 000 et sa variance par un million.

PCA prend ces nombres au sérieux. Sa première direction peut donc changer simplement parce que nous avons changé d’unité.

Modifie l’échelle d’une variable. Observe le déplacement de PC1, puis active la standardisation.

EXPÉRIENCE 11 / LINIA

Changer les unités

Le zoom reste uniforme sur les deux axes. Les unités standardisées sont sans dimension.

Changer les unités
Variance x₁
2,84
Variance x₂
1,46
Direction PC1
(0,83 ; 0,56)

Unités originales : une graduation représente 2,00 sur les deux axes.

La standardisation consiste à retirer la moyenne et à diviser par l’écart-type de chaque variable :

xij′=xij−μjsj. x'_{ij}=\frac{x_{ij}-\mu_j}{s_j}.

Les variables non constantes ont alors une variance de 1, avec une convention cohérente pour calculer sjs_j. PCA travaille sur leurs variations relatives plutôt que sur les amplitudes dans leurs unités initiales.

Mais standardiser n’est pas automatiquement la bonne décision. Si les différences de variance ont un sens pour ton problème, tu peux vouloir les conserver. Et donner le même poids initial à chaque variable peut renforcer une variable surtout composée de bruit.

Centrer et standardiser sont deux opérations différentes : centrer retire la moyenne ; standardiser ajuste aussi l’échelle.

11. Ce que PCA peut laisser de côté

Une valeur extrême peut tirer les axes

La variance utilise des écarts au carré. Un point très éloigné peut donc peser lourd dans le calcul et faire pivoter les directions principales.

Éloigne le point surligné. Observe la manière dont PC1 réagit.

EXPÉRIENCE 12 / LINIA

Déplacer une valeur extrême

Le cercle menthe est déplaçable. Les sliders offrent la même manipulation au clavier.

Déplacer une valeur extrême
Moyenne
(0,00 ; 0,00)
Variance expliquée par PC1
93,0 %

Axe menthe : avec ce point. Axe gris pointillé : sans ce point, passant par sa propre moyenne.

Cette observation ne signifie pas que ce point doit être supprimé. Il peut être une erreur de mesure, ou une observation rare mais importante. PCA ne peut pas trancher à notre place.

Une structure courbe ne devient pas droite par rotation

Regarde maintenant des points répartis sur un anneau. Leur position suit une structure circulaire, mais une projection sur une droite superpose des régions différentes de l’anneau.

PCA peut toujours calculer des directions principales. Elle ne déroule pas la courbe : elle décrit les données dans un sous-espace linéaire.

Passe du nuage allongé à l’anneau. Compare les points qui se retrouvent superposés après projection.

EXPÉRIENCE 13 / LINIA

La limite linéaire

La réduction de 2D vers 1D peut superposer des régions éloignées de l’anneau.

La limite linéaire
Variance conservée
93,0 %
λ₁ / λ₂
4,00 / 0,30

PC1 suit la longueur du nuage. Conserver les deux composantes restituerait tous les points.

Des méthodes non linéaires peuvent chercher à préserver d’autres propriétés, par exemple des voisinages. Elles changent aussi de critère : elles ne sont pas simplement « PCA, mais meilleure ».

La variance dominante peut masquer un signal utile

Enfin, imaginons deux catégories de points. À l’horizontale, elles présentent de grandes variations et se mélangent. À la verticale, elles varient peu, mais elles sont séparées.

PC1 peut privilégier l’horizontale. Si nous conservons uniquement cette composante, la séparation entre les catégories disparaît.

EXPÉRIENCE 14 / LINIA

Variance et utilité

Les couleurs et les formes indiquent les catégories ; elles ne participent pas au calcul PCA.

Variance et utilité

Disques bleus et anneaux orange se superposent sur PC1. PC2 sépare les catégories, malgré sa faible variance.

PCA est une méthode non supervisée : elle ne sait pas quelle catégorie nous voulons prédire. Elle maximise la variance, indépendamment de cet objectif.

12. Retrouver PCA en quelques lignes de NumPy

Nous pouvons maintenant traduire le raisonnement en code : centrer les données, calculer la covariance, trouver ses vecteurs propres, les trier et projeter les observations.

L’exemple suivant suppose une matrice numérique finie XrawX_{\mathrm{raw}}, avec au moins deux observations et une variance totale non nulle. Il réalise une PCA centrée, sans standardisation.

import numpy as np

def pca(X_raw, k):
    X_raw = np.asarray(X_raw, dtype=float)
    n, d = X_raw.shape
    if n < 2 or not 1 <= k <= d:
        raise ValueError("Il faut n >= 2 et 1 <= k <= d.")
    if not np.isfinite(X_raw).all():
        raise ValueError("Les données doivent être finies.")

    mean = X_raw.mean(axis=0)
    X = X_raw - mean
    covariance = (X.T @ X) / n

    # eigh est adapté aux matrices symétriques.
    eigenvalues, eigenvectors = np.linalg.eigh(covariance)
    order = np.argsort(eigenvalues)[::-1]
    eigenvalues = np.maximum(eigenvalues[order], 0.0)
    eigenvectors = eigenvectors[:, order]

    total = eigenvalues.sum()
    if total == 0:
        raise ValueError("La variance totale est nulle.")

    W = eigenvectors[:, :k]
    Z = X @ W
    reconstruction = Z @ W.T + mean
    explained_ratio = eigenvalues[:k] / total
    return Z, W, explained_ratio, reconstruction

La fonction renvoie les coordonnées réduites, les directions retenues, leurs proportions de variance expliquée et la reconstruction dans le repère original.

Dans des implémentations pratiques, on peut aussi calculer PCA directement avec une décomposition en valeurs singulières de la matrice centrée, la SVD, sans former explicitement la covariance. Le raisonnement géométrique reste le même.

Une dernière particularité : uu et −u-u décrivent la même droite. Deux implémentations peuvent donc donner des coordonnées de signes opposés sans se contredire. Les reconstructions et la variance expliquée restent identiques.

13. Ce que nous avons construit

Nous sommes partis d’une droite que nous pouvions faire tourner dans un nuage de points.

Pour choisir son orientation, nous avons mesuré la variance des projections. Puis nous avons vu que maximiser cette variance minimisait aussi l’erreur de reconstruction au carré.

Le centrage nous a permis de travailler autour de l’origine. La covariance a résumé les variations du nuage. Ses vecteurs propres nous ont donné les directions principales, et ses valeurs propres la variance portée par chacune.

En conservant seulement les premières directions, nous avons obtenu une représentation de dimension réduite.

PCA cherche le sous-espace linéaire de dimension kk qui conserve le maximum de variance des données centrées.

Cette définition dit à la fois sa force et sa limite. PCA fournit une approximation géométrique précise. Pour savoir si cette approximation sert notre problème, nous devons aussi regarder les unités, les valeurs extrêmes et le signal que nous voulons conserver.

Reviens au premier nuage. Essaie de prédire la direction de PC1, puis vérifie en affichant l’axe optimal.

EXPÉRIENCE 15 / LINIA

Vérifier son intuition

Choisis une direction, puis compare sa variance à la meilleure variance possible.

Vérifier son intuition