FichesCarte › Partie 04 · Matrice = action › chaîne 04

PCA : diagonaliser la covariance

Que cherche la PCA, pourquoi c'est un problème de valeurs propres, et pourquoi elle rend un résultat faux sans lever d'erreur si on ne centre pas, si on ne standardise pas, ou si on l'ajuste sur le test. Le geste tient en une ligne — maximiser aCa sous ‖a‖ = 1, donc prendre le vecteur propre dominant — et tout le reste est de la plomberie de préparation. Fil rouge : trois points alignés, (1, 2), (2, 3), (3, 4), qui tiennent sur une seule dimension.

Ce que cette chaîne suppose acquis
  • 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. xCx = Σλ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 XX = VΣ²V (p04-03, pas 5). Former XX é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à aCa 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.
Hypothèses posées
H1La structure intéressante est linéaire et se lit dans la variance. Deux hypothèses, fortes toutes les deux, et aucune n'est vérifiable depuis les données seules. Le pas 9 les reprend comme limites. H2X est n × p, une ligne par observation, et C = XcXc/(n − 1) est calculée sur les données centrées Xc. Toute la chaîne suppose ce centrage ; le pas 5 montre ce qui arrive quand il manque. H3Les λ sont rangés décroissants, λ1λ2 ≥ … ≥ 0. Une covariance est semi-définie positive, donc aucun λ n'est négatif — mais un λ nul est possible, et c'est exactement le fil rouge.

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).

X (n × p)  ⟶  Z (n × k)  ,  k < p  ,  Z = XcVk

« 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. »

Application — le fil rouge

Trois points, deux colonnes : (1, 2), (2, 3), (3, 4). Moyenne (2 ; 3), donc centrés :

Xc = (−1 ; −1)(0 ; 0)(1 ; 1)

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 ax. Sur le nuage centré, la variance de ce scalaire ne dépend que de C :

Var(ax) = aCa  ,  ‖a‖ = 1  ,  C = XcXc/(n − 1)

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 aCa, donc chercher la direction de variance maximale c'est maximiser une forme quadratique sur la sphère unité. »

Application — C = [[1, 1], [1, 4]]

La covariance du pas 2 de p04-03. On lit aCa pour quatre directions :

direction aangleaCa
(1 ; 0)1
(1 ; 1)/√245°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.

Figure 1 — tourner la direction, lire la variance

Tourne le curseur d'angle et regarde la tuile Var(ax) : 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

aCa = Σi λi ai²  ,  Σi ai² = 1

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. »

Application — les axes de C = [[1, 1], [1, 4]]

Trace 5, déterminant 3, donc λ² − 5λ + 3 = 0 :

λ = (5 ± √13)/2  ⇒  λ1 = 4,303  ·  λ2 = 0,697
axedirectionanglevariance 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).

Σλi = tr C  ·  part(i) = λi/tr C  ·  erreur(k) = Σi > k λi

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. »

Application — trois spectres
nuageλpart de PC1k à 90 %
C = [[1, 1], [1, 4]]4,303 · 0,69786,1 %2
fil rouge2 · 0100 %1
5D synthétique4,2 · 2,6 · 1,4 · 0,6 · 0,246,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.

Figure 4 — scree plot : choisir k

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 :

Σi xixi = Σi (xiμ)(xiμ) + n μμ

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. »

Application — le fil rouge, non centré

XX/2 sur les points bruts (1, 2), (2, 3), (3, 4) :

7101014,5  ⇒  λ = 21,43 et 0,070
première directionangle
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.

Figure 2 — centrer, ou pointer vers le centre

É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 XX, 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.

Var(c x) = c² Var(x)  ⇒  standardiser = diagonaliser la corrélation, pas la covariance

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. »

Application — quatre points, deux unités

x1 ∈ {1, 2, 3, 4} et x2 ∈ {100, 300, 200, 400}, corrélation 0,8.

C = 1,667133,3133,316 666,7
λ1 · λ2PC1part de PC1
brut16 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.

Figure 3 — l'unité fabrique la composante

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.

μ, σ, V ← train  ·  Ztest = ((Xtestμ) ⊘ σ) Vk

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. »

Application — le même point, deux transformations

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.

Xc = UΣV  ⇒  C = XcXc/(n − 1) = VΣ²V/(n − 1)

Composantes = colonnes de V · λi = σi²/(n − 1) · scores = UΣ. Former XcXc é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 XcXc 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. »

Application — le fil rouge par la SVD

XcXc = [[2, 2], [2, 2]], valeurs propres 4 et 0, donc

σ = 2 et 0  ⇒  λ = σ²/(n − 1) = 4/2 = 2 et 0 ✓
objetvaleur
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. »

4 limites
  • 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é

À retenir
  1. PCA = directions de variance maximale ; Var(ax) = aCa sous ‖a‖ = 1.
  2. 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.
  3. Centrer, sinon on diagonalise C + nμμ et la direction pointe vers le centre du nuage.
  4. Standardiser si les unités diffèrent (c'est diagonaliser la corrélation) ; sinon la variance fabrique la composante. Choix à justifier, pas défaut.
  5. fit sur le train, transform sur le test — moyenne, écart-type et V compris, et à l'intérieur de chaque pli.
  6. 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.
« La PCA maximise la variance projetée, qui est une forme quadratique de la covariance ; son maximum sur la sphère unité est le vecteur propre dominant, et les suivants sont orthogonaux. Elle est fausse sans erreur si on ne centre pas, parce que la covariance est définie autour de la moyenne ; si on ne standardise pas des unités hétérogènes, parce que la variance porte les unités au carré ; et si on l'ajuste sur le test, parce que c'est une fuite. On la calcule par SVD des données centrées. »

Chaîne verbalisée — une prise, à voix haute

6 maillons · clique pour révéler après avoir dit
  1. Que maximise la PCA, et sous quelle forme ?
    Var(ax) = aCa, sous ‖a‖ = 1 — une forme quadratique sur la sphère unité.
  2. Pourquoi la solution est-elle un vecteur propre ?
    Dans la base propre, aCa = Σλiai² avec Σai² = 1 : une moyenne pondérée des λ, maximale quand tout le poids va sur λmax.
  3. 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.
  4. 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.
  5. PCA et SVD : quel lien, et pourquoi préférer la SVD ?
    Xc = UΣV, composantes = V, λ = σ²/(n − 1), scores = UΣ. Former XcXc élève κ au carré.
  6. 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.