ACP & Réduction de Dimensionnalité
“Trouver les directions de variance maximale — compresser l'information sans la perdre”
ACP de zéro : décomposition propre de la matrice de covariance, variance expliquée, choix de k, blanchiment et comparaison t-SNE/UMAP.
Prérequis
Concepts Couverts
∑Formules Clés
Décomposition Propre de Covariance
La matrice de covariance se décompose en vecteurs propres V et valeurs propres Λ
Projection ACP
Projeter les données centrées sur les k premiers vecteurs propres — représentation k-dimensionnelle
Variance Expliquée
Fraction de la variance totale capturée par la composante principale k
Reconstruction ACP
Reconstruire l'approximation de x depuis le code z de faible dimension — mesure la perte d'information
▶Simulation Interactive
La Malédiction de la Dimensionnalité
Avec 1000 caractéristiques, chaque paire de points est presque équidistante (phénomène de « concentration de la mesure »). Les algorithmes basés sur la distance s'effondrent. Visualiser des données haute dimension est impossible. L'entraînement est lent et les modèles sur-apprennent. L'ACP résout cela en trouvant un sous-espace de faible dimension capturant la plupart de la variance — supprimant le bruit, décorrélant les caractéristiques et permettant la visualisation. Une image de 10 000 pixels peut souvent être compressée en 50 composantes ACP avec moins de 5% d'erreur de reconstruction.
Le célèbre résultat de l'« espace des visages » : les images de visages humains vivent dans un sous-espace ~50-dimensionnel dans un espace de 50 000 pixels. L'ACP trouve ce sous-espace.
La Vue Géométrique
Imaginez un nuage de points qui ressemble à une ellipse étirée. L'ACP trouve le plus long axe de l'ellipse (CP1 — direction de variance maximale), puis le prochain axe perpendiculaire le plus long (CP2), et ainsi de suite. En projetant sur les premiers composantes principales, on garde les dimensions les plus « étalées » et on rejette les dimensions serrées (qui sont typiquement du bruit). Les composantes principales sont les vecteurs propres de la matrice de covariance des données, ordonnés par leurs valeurs propres (= variance dans chaque direction).
Décomposition Propre de la Matrice de Covariance
Centrer les données : X̃ = X - μ. Calculer la matrice de covariance p×p Σ = (1/n)X̃ᵀX̃. Décomposer en valeurs propres : Σ = VΛVᵀ où V est orthonormale et Λ est diagonale avec valeurs propres λ₁≥λ₂≥…≥λₚ. Le premier vecteur propre v₁ est la direction de variance maximale. En pratique, scikit-learn utilise la SVD directement sur X̃ (plus stable numériquement que calculer Σ explicitement).
Choisir le Nombre de Composantes
Tracer le ratio de variance expliquée cumulée. La courbe monte rapidement au début puis s'aplatit. Choisir k là où on atteint 90–95% de variance cumulée — c'est le « coude ». Alternativement, utiliser l'ACP comme prétraitement pour un modèle en aval : ajuster k comme hyperparamètre avec validation croisée. Pour la visualisation, toujours utiliser k=2 ou k=3 indépendamment de la variance expliquée.
Calculer explained_variance_ratio_ pour chaque composante
Tracer la somme cumulée — trouver k où cumsum ≥ 0,95
Pour le blanchiment (décorrélation + variance unitaire) : définir whiten=True
Pour les grands ensembles de données : utiliser IncrementalPCA (mini-batch) ou TruncatedSVD (sparse)
Ne jamais appliquer l'ACP avant la division train/test — ajuster uniquement sur les données d'entraînement
Algorithme ACP
Centrer les données : X̃ = X - mean(X, axis=0)
Calculer la SVD : X̃ = UΣVᵀ (équivalent : décomposer X̃ᵀX̃ en valeurs propres)
Trier les vecteurs propres par valeurs propres décroissantes
Sélectionner les k premiers vecteurs propres : V_k = V[:, :k]
Projeter : Z = X̃ @ V_k → représentation k-dimensionnelle
Reconstruire : X̂ = Z @ V_k.T + mean → mesurer l'erreur de reconstruction
ACP avec scikit-learn
from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split import numpy as np import matplotlib.pyplot as plt class="tok-comment"># ── Données dclass="tok-str">'exemple ────────────────────────────────────────────────── X_brut, y = make_classification(n_samples=class="tok-num">400, n_features=class="tok-num">20, n_informative=class="tok-num">8, random_state=class="tok-num">42) X_train, X_test, _, _ = train_test_split(X_brut, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) class="tok-comment"># ── Ajuster l'ACP ────────────────────────────────────────────────── normaliseur = StandardScaler() X_normalise = normaliseur.fit_transform(X_train) class="tok-comment"># ACP complète dclass="tok-str">'abord pour inspecter la variance acp_complete = PCA().fit(X_normalise) var_cumulee = np.cumsum(acp_complete.explained_variance_ratio_) k = np.argmax(var_cumulee >= class="tok-num">0.95) + class="tok-num">1 print(f"{k} composantes expliquent ≥class="tok-num">95% de la variance") class="tok-comment"># ACP finale avec k choisi acp = PCA(n_components=k, random_state=class="tok-num">42) X_acp = acp.fit_transform(X_normalise) class="tok-comment"># ajuster sur train uniquement X_test_acp = acp.transform(normaliseur.transform(X_test)) class="tok-comment"># ── Erreur de reconstruction ─────────────────────────────────────── X_reconstruit = acp.inverse_transform(X_acp) erreur_rec = np.mean((X_normalise - X_reconstruit)**class="tok-num">2) print(f"MSE de reconstruction : {erreur_rec:.4f}") class="tok-comment"># ── Visualisation 2D ─────────────────────────────────────────────── acp2 = PCA(n_components=class="tok-num">2) X_2d = acp2.fit_transform(X_normalise) plt.scatter(X_2d[:,class="tok-num">0], X_2d[:,class="tok-num">1], c=y, cmap='viridis', alpha=class="tok-num">0.7) plt.xlabel(fclass="tok-str">"CP1 ({acp2.explained_variance_ratio_[class="tok-num">0]:.class="tok-num">1%})") plt.ylabel(fclass="tok-str">"CP2 ({acp2.explained_variance_ratio_[class="tok-num">1]:.class="tok-num">1%})")
Pièges de l'ACP
L'ACP est une méthode linéaire — elle ne peut pas capturer des variétés non linéaires. Utiliser t-SNE ou UMAP pour la réduction de dimension non linéaire lors de la visualisation de structures complexes. Aussi : l'ACP maximise la variance, pas la discrimination — pour la classification, l'Analyse Discriminante Linéaire (ADL) donne souvent une meilleure séparation car elle maximise la variance inter-classes vs intra-classes. Enfin : les composantes principales sont souvent ininterprétables. Si vous avez besoin de caractéristiques interprétables, préférer l'ACP Sparse ou la sélection de caractéristiques.
Ne jamais ajuster l'ACP sur l'ensemble de données complet — ajuster sur les données d'entraînement uniquement et appliquer la même transformation aux données de test. Ajuster sur l'ensemble complet fait fuiter les statistiques de test dans l'entraînement.
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.