L'Analyse en Composantes Principales (ACP) est une technique statistique utilisée pour
réduire la dimensionnalité des données tout en conservant le plus d'informations possible. En
Python, nous pouvons réaliser une ACP avec la bibliothèque scikit-learn. Voici un guide
pour effectuer une ACP avec un exemple détaillé.
1. Installation des bibliothèques nécessaires
Si ce n'est pas déjà fait, installez les bibliothèques nécessaires (exécutez ces commandes dans
le terminal) :
bash
Copier le code
pip install numpy pandas scikit-learn matplotlib
2. Importation des bibliothèques
python
Copier le code
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
3. Chargement et Préparation des Données
Pour cet exemple, nous utiliserons un ensemble de données fictif ou un jeu de données
comme iris de scikit-learn. L'ACP nécessite de normaliser les données avant de les
appliquer.
python
Copier le code
from sklearn.datasets import load_iris
# Chargement des données iris
data = load_iris()
X = data.data # On ne prend que les caractéristiques
y = data.target # Les étiquettes de classe (facultatif pour ACP)
# Création d'un DataFrame pour faciliter l'interprétation
df = pd.DataFrame(X, columns=data.feature_names)
print(df.head())
4. Normalisation des Données
L'ACP est sensible aux échelles de chaque caractéristique, donc la normalisation est une étape
importante.
python
Copier le code
scaler = StandardScaler()
X_normalized = scaler.fit_transform(X)
5. Application de l'ACP
Nous allons appliquer l'ACP pour réduire les données à deux dimensions (2 composantes
principales).
python
Copier le code
# Instanciation de l'ACP
pca = PCA(n_components=2)
# Application de l'ACP sur les données normalisées
X_pca = pca.fit_transform(X_normalized)
# Création d'un DataFrame pour stocker les résultats de l'ACP
df_pca = pd.DataFrame(X_pca, columns=['Composante 1', 'Composante 2'])
df_pca['Classe'] = y
print(df_pca.head())
6. Interprétation des Composantes Principales
Pour voir quelle proportion de la variance totale est expliquée par chaque composante
principale :
python
Copier le code
print("Variance expliquée par chaque composante :",
pca.explained_variance_ratio_)
print("Variance totale expliquée par les deux premières composantes :",
sum(pca.explained_variance_ratio_))
7. Visualisation des Résultats
Nous pouvons maintenant tracer les données réduites à deux dimensions pour visualiser la
séparation des classes dans ce nouvel espace.
python
Copier le code
# Tracé du graphique
plt.figure(figsize=(8, 6))
plt.scatter(df_pca['Composante 1'], df_pca['Composante 2'], c=y,
cmap='viridis', edgecolor='k', s=50)
plt.xlabel('Composante 1')
plt.ylabel('Composante 2')
plt.title('ACP - Projection sur les deux premières composantes')
plt.colorbar(label='Classe')
plt.show()
8. Afficher les Composantes de l'ACP
Vous pouvez aussi observer les contributions des caractéristiques initiales à chaque
composante principale, ce qui aide à interpréter les résultats :
python
Copier le code
components = pd.DataFrame(pca.components_, columns=data.feature_names,
index=['Composante 1', 'Composante 2'])
print(components)
Résumé du Code Complet
python
Copier le code
import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
# Chargement des données
data = load_iris()
X = data.data
y = data.target
df = pd.DataFrame(X, columns=data.feature_names)
# Normalisation des données
scaler = StandardScaler()
X_normalized = scaler.fit_transform(X)
# Application de l'ACP
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_normalized)
# Création d'un DataFrame pour l'ACP
df_pca = pd.DataFrame(X_pca, columns=['Composante 1', 'Composante 2'])
df_pca['Classe'] = y
# Affichage de la variance expliquée
print("Variance expliquée par chaque composante :",
pca.explained_variance_ratio_)
print("Variance totale expliquée par les deux premières composantes :",
sum(pca.explained_variance_ratio_))
# Visualisation des résultats
plt.figure(figsize=(8, 6))
plt.scatter(df_pca['Composante 1'], df_pca['Composante 2'], c=y,
cmap='viridis', edgecolor='k', s=50)
plt.xlabel('Composante 1')
plt.ylabel('Composante 2')
plt.title('ACP - Projection sur les deux premières composantes')
plt.colorbar(label='Classe')
plt.show()
# Affichage des composantes
components = pd.DataFrame(pca.components_, columns=data.feature_names,
index=['Composante 1', 'Composante 2'])
print(components)
Interprétation des Résultats
• Variance expliquée : La somme des valeurs de pca.explained_variance_ratio_
montre la proportion de la variance totale expliquée par les deux premières
composantes principales.
• Visualisation : Le graphique montre les clusters formés dans le nouvel espace de
dimensions réduites. Si les classes sont bien séparées, cela signifie que les premières
composantes principales représentent bien les différences entre les classes.
• Composantes principales : Le tableau des composantes principales montre comment
chaque caractéristique initiale contribue à chaque nouvelle composante.
Ce processus aide à simplifier les données tout en conservant les informations essentielles,
utile pour la visualisation et l'analyse exploratoire.
4o