Bonjour ! Dans la leçon précédente, nous avons développé une compréhension intuitive de l'Analyse en Composantes Principales (ACP, ou PCA en anglais). Nous avons vu qu'elle vise à réduire la dimensionnalité des données en trouvant de nouveaux axes, les composantes principales, qui maximisent la variance et préservent ainsi le plus d'information possible.
Aujourd'hui, nous allons passer de la théorie à la pratique. L'objectif est de mettre en œuvre la PCA à l'aide de la bibliothèque Scikit-learn, un outil que vous commencez à bien connaître. Plus important encore, nous nous concentrerons sur l'analyse de la variance expliquée pour prendre une décision cruciale : combien de composantes principales faut-il conserver ? Cette compétence est fondamentale pour utiliser la PCA efficacement dans des projets de machine learning.
1. La mise en œuvre de la PCA avec Scikit-learn
L'application de la PCA en Scikit-learn suit le même schéma que les autres transformateurs que nous avons vus, comme StandardScaler. Le processus est simple et se décompose en quelques étapes claires.
Principal Component Analysis (PCA) with Scikit-Learn
Cet article de KDnuggets offre un excellent guide pratique. Nous allons suivre sa structure pour notre première implémentation.
Commencez par lire les étapes 1 et 2. L'article utilise le jeu de données "wine" qui comporte 13 caractéristiques. Notez bien l'étape cruciale du prétraitement : l'utilisation de StandardScaler. Comme nous l'avons vu, la PCA est sensible à l'échelle des variables, il est donc impératif de les standardiser. Ensuite, lisez l'étape 3, qui montre comment instancier et utiliser l'objet PCA de sklearn.decomposition. Vous remarquerez la simplicité de l'API : on crée un objet PCA en spécifiant le nombre de composantes souhaitées (n_components), puis on applique .fit_transform() aux données standardisées.
Le code pour appliquer la PCA se résume essentiellement à ceci :
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
# Supposons que 'X' est notre jeu de données (features)
# 1. Standardiser les données
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 2. Appliquer la PCA
# Ici, nous décidons de réduire nos données à 2 dimensions
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
# X_pca contient maintenant nos données transformées, avec seulement 2 colonnes !
print(X_pca.shape)
Comme vous pouvez le voir, Scikit-learn masque toute la complexité mathématique (calcul de la matrice de covariance, décomposition en vecteurs/valeurs propres) que nous avons abordée conceptuellement dans la leçon précédente.
2. Analyser la variance expliquée
Réduire le nombre de dimensions est utile, mais cela a un coût : une perte d'information. La question est : quelle quantité d'information avons-nous conservée ? C'est là qu'intervient l'analyse de la variance expliquée.
Après avoir ajusté (fit) un objet PCA, nous pouvons accéder à un attribut très important : explained_variance_ratio_. Cet attribut nous donne le pourcentage de la variance totale capturé par chaque composante principale, classé par ordre d'importance.
Principal Component Analysis (PCA) with Scikit-Learn
Revenons à l'article de KDnuggets pour voir comment accéder à cette information.
Lisez la section Étape 4. Concentrez-vous sur l'attribut explained_variance_ratio_. L'auteur montre que pour les trois premières composantes, on peut simplement additionner leurs ratios pour savoir que, dans cet exemple, elles capturent ensemble environ 66,5 % de la variance totale.
Le explained_variance_ratio_ est un tableau NumPy. Par exemple, si pca.explained_variance_ratio_ retourne [0.45, 0.19, 0.09, ...], cela signifie :
- PC1 capture 45 % de la variance totale.
- PC2 capture 19 % de la variance totale.
- PC3 capture 9 % de la variance totale.
- ... et ainsi de suite.
Visualiser la variance expliquée : le "Scree Plot"
Une manière courante de visualiser ces ratios est d'utiliser un scree plot. Il s'agit simplement d'un diagramme en barres montrant la variance expliquée par chaque composante. On y ajoute souvent une ligne qui représente la variance cumulative.

Ce type de graphique est extrêmement utile. Il nous permet de répondre visuellement à des questions comme : "Combien de composantes me faut-il pour capturer 80 % de l'information totale ?"
A Visual Learner's Guide to Explain, Implement and ...
Cet article de Towards Data Science propose une excellente visualisation et explication du scree plot.
Lisez la section 3 de la partie "PCA Implementation". Elle montre comment créer ce graphique à l'aide de Matplotlib et comment interpréter le résultat. Dans leur exemple, PC1 seule explique 60% de la variance, et les 3 premières composantes combinées en expliquent 84%.
3. Comment choisir le bon nombre de composantes ?
Nous arrivons à la question clé. Le choix de n_components dépend de votre objectif.
Stratégie 1 : Pour la visualisation
Si votre but est de visualiser les données, comme nous l'avons fait dans les exemples de la leçon précédente, le choix est simple : vous choisirez n_components=2 pour un graphique 2D ou n_components=3 pour un graphique 3D.
Principal Component Analysis (PCA) using Python (Scikit-learn)
La vidéo de Michael Galarnyk illustre parfaitement cette approche avec le jeu de données Iris.
Regardez la section où il applique la PCA pour la projection en deux dimensions. Il fixe n_components=2, transforme les données, puis crée un graphique de dispersion. Le résultat montre que même en 2D, les différentes classes de fleurs sont encore bien séparées. Ensuite, portez une attention particulière à son explication de l'explained variance ratio. Il explique que puisque ses deux composantes capturent plus de 95% de la variance, la visualisation 2D est une représentation très fidèle des données d'origine. Il donne une règle empirique utile : si vous conservez moins de 85% de la variance, la visualisation risque de ne pas être très précise.
Stratégie 2 : Pour l'entraînement d'un modèle de ML
Lorsque vous utilisez la PCA comme étape de prétraitement pour un modèle de machine learning, l'objectif n'est pas la visualisation mais plutôt de réduire la complexité et le temps de calcul tout en perdant le moins de performance possible.
Dans ce cas, vous ne choisissez pas un nombre fixe de composantes. À la place, vous décidez d'un seuil de variance à conserver (par exemple, 95 %). Heureusement, Scikit-learn permet de le faire directement.
Machine Learning Tutorial Python - 19: Principal Component Analysis (PCA) with Python Code
La chaîne "codebasics" propose une astuce très pratique pour cela.
Regardez la section de cette vidéo. Au lieu de passer un entier à n_components (comme n_components=2), il passe un nombre à virgule flottante entre 0 et 1, par exemple n_components=0.95. Scikit-learn va alors automatiquement sélectionner le plus petit nombre de composantes nécessaires pour atteindre au moins 95 % de la variance expliquée totale.
Après avoir ajusté le modèle avec n_components=0.95, vous pouvez vérifier combien de composantes ont été choisies en accédant à l'attribut pca.n_components_.
Le graphique de variance cumulative est votre meilleur ami pour choisir ce seuil.

4. Le compromis : Dimensions vs. Performance
Pourquoi ne pas toujours garder 100 % de la variance ? Parce que cela reviendrait à ne pas faire de réduction de dimensionnalité ! Le but est de trouver un bon compromis.
Réduire les dimensions permet :
- D'accélérer l'entraînement des modèles.
- De réduire le risque de surapprentissage ("overfitting") dans certains cas.
- De diminuer les besoins en stockage et en calcul.
La contrepartie est une légère perte d'information, qui peut (ou non) affecter la performance du modèle.
Machine Learning Tutorial Python - 19: Principal Component Analysis (PCA) with Python Code
La vidéo de "codebasics" illustre ce compromis de manière très concrète.
Regardez la section où il compare la précision d'un modèle de régression logistique entraîné sur les données originales (64 caractéristiques) et sur les données réduites par PCA (29 caractéristiques, conservant 95% de la variance). La précision est quasiment identique ! C'est une énorme victoire : le modèle est plus simple, plus rapide, pour une performance équivalente. Ensuite, regardez ce qui se passe lorsqu'il force la PCA à 2 composantes. Les données sont maintenant extrêmement simples, mais la précision du modèle chute à 60 %. Cela montre qu'avec seulement 2 composantes, trop d'informations pertinentes ont été perdues.
Conclusion
Dans cette leçon, vous avez appris à appliquer la PCA en utilisant Scikit-learn et, surtout, à analyser ses résultats pour faire des choix éclairés.
Points clés à retenir :
- La PCA s'implémente en Scikit-learn avec
StandardScalersuivi desklearn.decomposition.PCA. - L'attribut
pca.explained_variance_ratio_est essentiel : il indique la proportion de variance capturée par chaque composante. - Les scree plots et les graphiques de variance cumulative sont les outils visuels pour décider du nombre de composantes à conserver.
- Le choix de
n_componentsdépend de l'objectif :- Un entier (ex:
2ou3) pour la visualisation. - Un nombre à virgule flottante (ex:
0.95) pour conserver un pourcentage de variance lors de la préparation des données pour un modèle.
- Un entier (ex:
- La PCA est un outil de compromis entre la simplification des données et la préservation de l'information, ce qui a un impact direct sur la vitesse d'entraînement et la performance du modèle.
Dans la prochaine et dernière leçon de ce module, nous allons assembler tout ce que nous avons appris sur le prétraitement et la modélisation. Nous allons apprendre à construire des pipelines en Scikit-learn, qui permettent d'enchaîner automatiquement des étapes comme la standardisation, la PCA et l'entraînement d'un modèle de manière propre et robuste.