- Théorème spectral. Si C = C⊤, alors C = QΛQ⊤ avec Q orthogonale et Λ réelle (p04-03, pas 2). Toute covariance est symétrique : ses axes propres sont donc orthogonaux, gratuitement.
- Forme quadratique dans la base propre. x⊤Cx = Σλiai² où ai = ⟨qi, x⟩ (p04-03, pas 3). C'est le pas 3 de cette chaîne, tout entier.
- SVD. Toute matrice X s'écrit UΣV⊤, et X⊤X = VΣ²V⊤ (p04-03, pas 5). Former X⊤X élève le conditionnement au carré (p04-03, pas 7).
- Variance, covariance. Var(X) = E[(X − μ)²] — définie autour de la moyenne — et Var(aX + bY) = a²Var(X) + b²Var(Y) + 2ab Cov(X, Y) (p00-02, pas 5). C'est déjà a⊤Ca en dimension 2.
- Une variance porte les unités au carré. Var(aX) = a²Var(X) (p00-02, pas 4) : passer des mètres aux centimètres multiplie une variance par 10 000. Le pas 6 vit là-dessus.
La chaîne
Le décor : p colonnes corrélées
p features corrélées ; on veut k < p directions qui gardent l'essentiel. Rien dans les données ne dit ce qu'est « l'essentiel » : c'est nous qui le décrétons, et la PCA décrète que c'est la variance (H1).
« On veut remplacer p colonnes corrélées par k colonnes, donc il faut un critère qui dise ce qu'on garde, donc on pose que l'essentiel est la variance — une décision, pas un théorème. »
Trois points, deux colonnes : (1, 2), (2, 3), (3, 4). Moyenne (2 ; 3), donc centrés :
Les trois points sont sur une droite. Deux colonnes, mais une seule dimension d'information : k = 1 suffit, sans rien perdre. La chaîne va le retrouver comme une valeur propre nulle.
La variance projetée est une forme quadratique tronc
Projeter x sur une direction unitaire a donne le scalaire a⊤x. Sur le nuage centré, la variance de ce scalaire ne dépend que de C :
La contrainte ‖a‖ = 1 n'est pas décorative : sans elle on gonfle la variance en allongeant a, et le maximum est infini.
« La projection est linéaire, donc sa variance est a⊤Ca, donc chercher la direction de variance maximale c'est maximiser une forme quadratique sur la sphère unité. »
La covariance du pas 2 de p04-03. On lit a⊤Ca pour quatre directions :
| direction a | angle | a⊤Ca |
|---|---|---|
| (1 ; 0) | 0° | 1 |
| (1 ; 1)/√2 | 45° | 3,5 |
| (0 ; 1) | 90° | 4 |
| (0,290 ; 0,957) | 73,2° | 4,303 |
La direction de l'axe x2 donne 4, mais une direction penchée de 73,2° fait mieux : 4,303. Le pas 3 dit pourquoi celle-là, et pourquoi on ne fera pas mieux.
Tourne le curseur d'angle et regarde la tuile Var(a⊤x) : elle passe par un maximum exactement quand la droite rouge tombe sur la droite tiretée PC1, et par un minimum sur PC2. Les traits fins rouges sont les projections des points sur a : leur dispersion est la variance lue. Le carré pointillé donne l'unité. Passe au nuage plat : la deuxième valeur propre vaut 0, le nuage s'effondre sur une droite, et il existe une direction où tous les points se projettent au même endroit — variance nulle.
Le maximum est un vecteur propre tronc
Écris a dans la base propre de C : ai = ⟨qi, a⟩, avec Σai² = ‖a‖² = 1. Alors
C'est une moyenne pondérée des λ : elle est maximale quand tout le poids part sur le plus grand. PC1 = q1, variance portée = λ1 ; PC2 = q2, le meilleur de ce qui reste orthogonal, et ainsi de suite. L'orthogonalité est offerte par le spectral, pas imposée à la main.
« Dans la base propre la forme quadratique est une moyenne pondérée des λ, donc le maximum sous norme unité est atteint sur la plus grande valeur propre, donc la première composante est le vecteur propre dominant. »
Trace 5, déterminant 3, donc λ² − 5λ + 3 = 0 :
| axe | direction | angle | variance portée |
|---|---|---|---|
| PC1 | (0,290 ; 0,957) | 73,2° | 4,303 |
| PC2 | (−0,957 ; 0,290) | 163,2° | 0,697 |
Contrôles gratuits : 4,303 + 0,697 = 5 = trace ✓ · 4,303 × 0,697 = 3 = det ✓ · PC1 · PC2 = 0 ✓.
Fil rouge. C = [[1, 1], [1, 1]] : trace 2, det 0, donc λ = 2 et 0. PC1 = (1 ; 1)/√2, PC2 = (1 ; −1)/√2 et personne ne bouge dans cette seconde direction.
Ce que disent les λ : part expliquée et erreur de troncature
La trace de C est la somme des variances des colonnes, donc la variance totale ; chaque λ en est la part portée par son axe. Tronquer aux k premières composantes puis revenir dans l'espace de départ coûte exactement ce qu'on a laissé (SVD tronquée, p04-03, pas 8).
Choisir k : le coude du scree plot, ou un seuil de cumul (90 %). Aucun des deux n'est un critère statistique — ce sont des conventions.
« La trace est la variance totale, donc chaque λ est la part de variance portée par son axe, donc tronquer aux k premiers coûte exactement la somme des λ laissés derrière. »
| nuage | λ | part de PC1 | k à 90 % |
|---|---|---|---|
| C = [[1, 1], [1, 4]] | 4,303 · 0,697 | 86,1 % | 2 |
| fil rouge | 2 · 0 | 100 % | 1 |
| 5D synthétique | 4,2 · 2,6 · 1,4 · 0,6 · 0,2 | 46,7 % | 3 |
Fil rouge, erreur de reconstruction. k = 1 : on projette (−1 ; −1) sur (1 ; 1)/√2, coordonnée −√2, on revient : (−1 ; −1). Exactement le point de départ. Erreur = λ2 = 0.
Le 5D coupe à k = 3 (cumul 91,1 %) alors que son coude est à k = 2 (75,6 %) : les deux règles ne donnent pas le même k, et aucune n'a raison contre l'autre.
Barres : la part λi/tr C de chaque axe. Ligne bleue : le cumul. Ligne tiretée : le seuil 90 %. Déplace k et lis les deux tuiles du bas : la variance gardée monte, l'erreur de reconstruction Σi > k λi descend, et elle tombe à zéro dès k = 1 sur le fil rouge — un axe suffit parce que le second λ est nul. Compare le 5D (coude à 2, seuil à 3) : deux règles, deux réponses.
Piège 1 : centrer casse
Sans centrage on ne diagonalise plus C mais la matrice des moments autour de 0, et l'écart entre les deux est une matrice de rang 1 qui pointe vers la moyenne :
Plus le nuage est loin de l'origine, plus nμμ⊤ écrase la dispersion : la première direction bascule vers le centre du nuage. Aucune exception n'est levée, le code tourne, le résultat est faux.
« La covariance est définie autour de la moyenne, donc sans centrer on diagonalise cette covariance plus nμμ⊤, donc la première direction pointe vers le centre du nuage et non le long de sa dispersion. »
X⊤X/2 sur les points bruts (1, 2), (2, 3), (3, 4) :
| première direction | angle | |
|---|---|---|
| centré (vrai) | (0,707 ; 0,707) | 45,0° |
| non centré | (0,570 ; 0,822) | 55,3° |
| direction de μ = (2 ; 3) | (0,555 ; 0,832) | 56,3° |
Les trois points sont exactement sur la droite à 45° : c'est la seule bonne réponse. Non centrée, la PCA rend 55,3° — à 1° près la direction de la moyenne. Elle a mesuré où est le nuage, pas comment il s'étale.
Éloigne le nuage de l'origine avec le curseur : la droite bleue (axe de C, calculée sur les données centrées) garde son angle de 73,2° quoi qu'il arrive, tandis que la droite rouge (axe de X⊤X, sans centrage) se couche vers la direction du décalage. Clique centrer les données : le nuage revient à l'origine, μ = 0, le terme nμμ⊤ disparaît et les deux droites se confondent — l'écart d'angle tombe à 0 et le curseur n'a plus aucun effet sur elles. C'est ça, l'invariance qu'on achète en centrant.
Piège 2 : les unités casse
Une variance porte les unités au carré (p00-02, pas 4) : multiplier une colonne par 100 multiplie sa variance par 10 000. Une feature en centaines domine donc une feature en unités sans être plus informative.
Standardiser quand les unités diffèrent. Ne pas standardiser quand elles sont comparables et que les écarts de variance sont l'information — pixels, log-retours. C'est un choix à justifier, jamais un réglage par défaut.
« La variance porte les unités au carré, donc changer d'unité multiplie une variance par le carré du facteur, donc la composante dominante suit l'unité et non l'information — sauf à diagonaliser la corrélation. »
x1 ∈ {1, 2, 3, 4} et x2 ∈ {100, 300, 200, 400}, corrélation 0,8.
| λ1 · λ2 | PC1 | part de PC1 | |
|---|---|---|---|
| brut | 16 667,7 · 0,600 | (0,008 ; 1,000) | 99,996 % |
| standardisé | 1,8 · 0,2 | (0,707 ; 0,707) | 90 % |
Brut, PC1 est l'axe x2 à 0,46° près et x1 n'existe plus. Standardisé, la matrice diagonalisée est [[1 ; 0,8], [0,8 ; 1]] : λ = 1 ± 0,8, et PC1 retombe sur la diagonale. Les deux réponses sont exactes — elles répondent à deux questions différentes.
Le même nuage de 60 points, dont on change l'unité de x2 — les données ne changent pas, seule l'échelle de lecture change. Les deux axes sont à la même échelle de pixels : dès ×10 le nuage est une aiguille et PC1 (trait rouge) se couche sur x2. Le preset ×100 reproduit les chiffres de l'application au chiffre près. Clique standardiser : λ = 1,8 et 0,2 et PC1 revient sur la diagonale, quelle que soit la position du curseur — c'est le sens de l'opération.
Piège 3 : ajuster sur le train seulement casse
Moyenne, écart-type et directions sont des quantités estimées, au même titre que des coefficients. Elles s'estiment sur le train ; le test est seulement transformé avec elles.
Ajuster sur la réunion train + test, c'est laisser le test entrer dans le modèle : le score mesuré devient optimiste. Dans une validation croisée, tout le pipeline — centrage, standardisation, PCA — se réajuste à l'intérieur de chaque pli (p06-02).
« La moyenne, l'écart-type et les directions sont estimés sur des données, donc les estimer sur le test fait entrer le test dans le modèle, donc le score mesuré est optimiste — c'est une fuite, pas un détail d'implémentation. »
Train = (1, 100), (2, 300), (3, 200) ; test = (4, 400). Sur le train : μ = (2 ; 200), σ = (1 ; 100).
| statistiques ajustées sur… | μ | σ | image de (4, 400) |
|---|---|---|---|
| le train seul | (2 ; 200) | (1 ; 100) | (2,00 ; 2,00) |
| train + test (fuite) | (2,5 ; 250) | (1,29 ; 129,1) | (1,16 ; 1,16) |
Le point de test est un extrême : ajusté correctement il tombe à 2 écarts-types, avec la fuite il n'est plus qu'à 1,16. Le modèle a vu le test lui rétrécir sa propre queue de distribution — et le score de test en hérite.
L'axe bouge aussi : PC1 vaut 89,71° ajustée sur le train seul, 89,54° ajustée sur tout. Petit écart, mais du test dedans : la fuite n'a pas besoin d'être grosse pour invalider un score.
PCA = SVD des données centrées tronc
On ne forme pas C pour la diagonaliser : on décompose Xc directement.
Composantes = colonnes de V · λi = σi²/(n − 1) · scores = UΣ. Former Xc⊤Xc élèverait le conditionnement au carré et perdrait deux fois plus de chiffres (p04-03, pas 7) : ici la matrice est celle qu'on veut décomposer, le motif est donc le même.
« Xc se factorise en UΣV⊤, donc Xc⊤Xc vaut VΣ²V⊤, donc les composantes sont les colonnes de V et les λ valent σ²/(n − 1), donc on lit la PCA sur la SVD sans jamais former la covariance. »
Xc⊤Xc = [[2, 2], [2, 2]], valeurs propres 4 et 0, donc
| objet | valeur |
|---|---|
| V (composantes) | (0,707 ; 0,707) et (0,707 ; −0,707) |
| scores UΣ sur PC1 | −1,414 · 0 · 1,414 |
| u1 = Xcv1/σ1 | (−0,707 ; 0 ; 0,707) |
Les mêmes λ qu'au pas 3, obtenus sans écrire C. Et σ2 = 0 dit directement le rang : une seule direction porte le nuage.
Où ça casse casse
Les trois pièges précédents sont des fautes de préparation, réparables. Ce qui suit est dans la méthode elle-même : les deux hypothèses H1 — linéarité et variance — ne sont pas toujours vraies, et rien dans la sortie ne le signale.
« La PCA ne voit que des ellipses et ne classe que par variance, donc une structure courbe ou une direction utile mais peu dispersée lui sont invisibles, donc son silence n'est jamais une preuve qu'il n'y avait rien. »
- Structure non linéaire. Un cercle, un S, une spirale : la covariance ne décrit que des ellipses, donc PCA renvoie deux axes de variance égale et ne dit rien de la courbe. Kernel PCA, UMAP.
- Variance ≠ information. La plus grande variance peut être du bruit de capteur ou une variable parasite ; et la PCA ne regarde jamais y, donc elle peut jeter précisément la direction qui prédit. Pour réduire en vue de prédire : PLS.
- Outliers. La covariance est quadratique en l'écart : un seul point aberrant loin du nuage fabrique à lui seul une direction de grande variance et tire PC1 vers lui. Même mécanisme que la moyenne contre la médiane.
- Interprétation. Une composante est un mélange de toutes les features, avec des signes arbitraires (q et −q sont le même axe). « PC1 = la taille » est une lecture après coup, jamais un fait produit par la méthode.
Résumé
- PCA = directions de variance maximale ; Var(a⊤x) = a⊤Ca sous ‖a‖ = 1.
- Maximiser une forme quadratique sur la sphère ⇒ vecteur propre dominant ; λi = variance portée, λi/tr C = part expliquée, Σi > k λi = erreur de troncature.
- Centrer, sinon on diagonalise C + nμμ⊤ et la direction pointe vers le centre du nuage.
- Standardiser si les unités diffèrent (c'est diagonaliser la corrélation) ; sinon la variance fabrique la composante. Choix à justifier, pas défaut.
- fit sur le train, transform sur le test — moyenne, écart-type et V compris, et à l'intérieur de chaque pli.
- Calcul : SVD des données centrées, composantes = V, λ = σ²/(n − 1) ; ne pas former C. Silencieuse sur le non-linéaire, sur y et sur les outliers.
Chaîne verbalisée — une prise, à voix haute
- Que maximise la PCA, et sous quelle forme ?Var(a⊤x) = a⊤Ca, sous ‖a‖ = 1 — une forme quadratique sur la sphère unité.
- Pourquoi la solution est-elle un vecteur propre ?Dans la base propre, a⊤Ca = Σλiai² avec Σai² = 1 : une moyenne pondérée des λ, maximale quand tout le poids va sur λmax.
- Que se passe-t-il si on ne centre pas ?On diagonalise C + nμμ⊤ : la première direction pointe vers le centre du nuage. Sur le fil rouge, 55,3° au lieu de 45° — la direction de μ, pas celle de la droite.
- Quand standardiser, quand ne pas le faire ?Unités hétérogènes : oui — c'est diagonaliser la corrélation. Unités comparables où les écarts de variance sont l'information (pixels) : non.
- PCA et SVD : quel lien, et pourquoi préférer la SVD ?Xc = UΣV⊤, composantes = V, λ = σ²/(n − 1), scores = UΣ. Former Xc⊤Xc élève κ au carré.
- Que fait-on du jeu de test ?On le transforme avec la moyenne, l'écart-type et le V du train — jamais on ne les réestime dessus, et tout le pipeline se réajuste dans chaque pli de CV.
Ponts et cartes
ml::pca (ce que maximise la PCA, part de variance expliquée, choix de k, PCA ≠ sélection de features) · algebre::spectral (QΛQ⊤, forme quadratique dans la base propre) · ml::standardisation (quand standardiser, fit sur le train, corrélation vs covariance).
Une carte qui résiste après cette chaîne est une carte à refondre, pas une section à relire.