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.
Le laboratoire de projection
Un point, une couleur : retrouve-le dans le nuage et sur la ligne. Les échelles restent fixes.
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 . Leur moyenne est :
La variance mesure la moyenne des écarts au carré autour de cette moyenne :
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.
Voir la variance
La variance est calculée sur les coordonnées projetées. Essaie de trouver son maximum.
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 ?
Projection et reconstruction
Les segments représentent les résidus. Leur longueur au carré est mesurée dans les unités du nuage.
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é et une direction unitaire , la reconstruction est :
La reconstruction et le résidu sont perpendiculaires. Le théorème de Pythagore donne :
En prenant la moyenne sur tous les points :
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 est une observation et le vecteur des moyennes :
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.
Retirer la moyenne
Déplacer tout le nuage change sa moyenne, mais pas ses directions principales.
À partir de maintenant, la lettre désignera la matrice des données centrées : une ligne par observation, une colonne par variable. Elle possède donc lignes et 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 . En deux dimensions, il possède deux coordonnées :
Nous lui imposons une longueur égale à 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 par 10 multiplierait les projections par 10 et leur variance par 100, sans améliorer le choix de direction.
Pour un point , la coordonnée sur l’axe est son produit scalaire avec :
Pour toutes les observations à la fois :
Une matrice de taille , multipliée par un vecteur à coordonnées, donne un vecteur à coordonnées : un nombre par observation.
Du point à la matrice
Les étapes relient la géométrie aux symboles. Reviens librement sur chaque étape.
Nous pouvons maintenant écrire notre objectif : trouver un vecteur unitaire qui maximise la variance de .
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 :
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 :
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 ?
Lire la covariance
Les variances restent égales à 1. Seule la variation conjointe change.
Avec notre matrice de données centrées, cette matrice s’écrit :
Et c’est elle qui permet de calculer la variance dans n’importe quelle direction :
Cette expression compacte est la version mathématique de notre axe rotatif : nous choisissons une direction , et nous obtenons la variance des données projetées dessus.
Pour aller plus loin — Retrouver cette formule
Les colonnes de sont centrées. Leur combinaison linéaire est donc centrée elle aussi : .
Sa variance vaut :
En remplaçant par :
Relier la formule à la figure
Chaque ligne décrit la même variance, calculée sur les mêmes données.
Une convention sur le dénominateur
Nous utilisons ici pour mesurer la variance de notre ensemble de points. On rencontre aussi , notamment pour estimer une covariance de population à partir d’un échantillon.
Pour , 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 :
La lettre représente la direction unitaire que nous choisissons pour projeter le nuage. La matrice de covariance résume, elle, les variations de ce nuage.
Nous pouvons appliquer cette matrice au vecteur : le produit , 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.
Reconnaître une direction propre
La matrice agit sur un vecteur. Cette transformation est distincte de la projection PCA.
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 et sa valeur propre :
Si est unitaire, la variance dans cette direction devient :
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 une base orthonormée de vecteurs propres, avec les valeurs propres triées :
Toute direction unitaire peut s’écrire :
En utilisant l’orthogonalité des vecteurs propres :
La variance ne peut donc pas dépasser . Elle atteint cette valeur pour .
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 , sous la contrainte . Posons :
Comme est symétrique :
À un point stationnaire :
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.
Construire PC2 autour de PC1
PC1 reste fixe. Fais tourner une direction dans le plan perpendiculaire pour trouver la plus grande variance restante.
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 directions retenues dans une matrice , de taille :
Les nouvelles coordonnées sont :
Chaque observation possède maintenant coordonnées au lieu de .
Pour reconstruire les données centrées à partir de :
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 est :
Pour les premières composantes, nous additionnons leurs valeurs propres :
Prenons un exemple où les trois valeurs propres sont 8, 1,5 et 0,5. La variance totale vaut 10.
| Composantes conservées | Variance expliquée |
|---|---|
| PC1 | 80 % |
| PC1 et PC2 | 95 % |
| PC1, PC2 et PC3 | 100 % |
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.
Choisir les composantes
95 % est un seuil illustratif. Il ne mesure pas toute l’information utile.
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.
Changer les unités
Le zoom reste uniforme sur les deux axes. Les unités standardisées sont sans dimension.
La standardisation consiste à retirer la moyenne et à diviser par l’écart-type de chaque variable :
Les variables non constantes ont alors une variance de 1, avec une convention cohérente pour calculer . 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.
Déplacer une valeur extrême
Le cercle menthe est déplaçable. Les sliders offrent la même manipulation au clavier.
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.
La limite linéaire
La réduction de 2D vers 1D peut superposer des régions éloignées de l’anneau.
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.
Variance et utilité
Les couleurs et les formes indiquent les catégories ; elles ne participent pas au calcul PCA.
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 , 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é : et 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 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.
Vérifier son intuition
Choisis une direction, puis compare sa variance à la meilleure variance possible.