Introduction
La réduction de dimension et l'extraction de caractéristiques sont des processus de prétraitement fondamentaux en apprentissage automatique. Ils permettent de simplifier les données haute dimension en préservant l'information essentielle, réduisant ainsi le bruit et la redondance pour améliorer l'efficacité des modèles.
Méthodes Principales de Réduction de Dimension
1. Analyse en Composantes Principales (ACP)
Principe : Identifier les axes orthogonaux de variance maximale dans les données pour une projection dans un espace réduit.
from sklearn.decomposition import PCA
# Initialiser l'ACP pour conserver 95% de la variance
reducteur = PCA(n_components=0.95)
# Appliquer la transformation aux données
donnees_compressees = reducteur.fit_transform(matrice_donnees)
# Afficher les ratios de variance expliquée par chaque composante
ratios_variance = reducteur.explained_variance_ratio_
print(f"Ratios de variance expliquée: {ratios_variance}")
2. Analyse Discriminante Linéaire (ADL)
Principe : Maximiser la séparation entre les classes tout en minimisant la variance intra-classse (méthode supervisée).
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as ADL
# Créer un modèle ADL avec deux composantes cibles
modeleur_adl = ADL(n_components=2)
# Transformer les données avec les étiquettes
donnees_adl = modeleur_adl.fit_transform(donnees, classes)
3. t-SNE (Embedding Stochastique de Voisinage)
Principe : Préserver les relations locales entre les points lors de la projection non linéaire en basse dimension.
from sklearn.manifold import TSNE
# Configurer l'algorithme t-SNE
tsne = TSNE(n_components=2, perplexity=30, random_state=42)
# Réaliser la transformation
projection_tsne = tsne.fit_transform(donnees)
4. Auto-encodeur
Principe : Utiliser un réseau de neurones pour apprendre une représentation compressée non linéaire des données.
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
# Définir l'architecture du réseau
entree = Input(shape=(dimension_initiale,))
couche_encodee = Dense(dim_reduction, activation='relu')(entree)
couche_decodee = Dense(dimension_initiale, activation='sigmoid')(couche_encodee)
# Construire le modèle complet et l'encodeur
autoencodeur = Model(entree, couche_decodee)
encodeur = Model(entree, couche_encodee)
# Entraîner le modèle
autoencodeur.compile(optimizer='adam', loss='mse')
autoencodeur.fit(donnees, donnees, epochs=50, batch_size=256)
# Extraire les caractéristiques réduites
features_compressed = encodeur.predict(donnees)
5. Analyse Factorielle
Principe : Modéliser les variables observées comme des combinaisons linéaires de facteurs latents non mesurés.
from sklearn.decomposition import FactorAnalysis
# Initialiser l'analyse factorielle
analyseur = FactorAnalysis(n_components=5, random_state=42)
# Transformer les données
donnees_factorisees = analyseur.fit_transform(donnees)
6. Analyse en Composantes Indépendantes (ACI)
Principe : Séparer les sources statistiquement indépendantes à partir de signaux mixtes.
from sklearn.decomposition import FastICA
# Configurer l'ACI
separateur = FastICA(n_components=3, random_state=42)
# Appliquer la transformation
donnees_independantes = separateur.fit_transform(donnees)
Conseils Pratiques et Stratégies
Prétraitement des Données
from sklearn.preprocessing import StandardScaler
# Normaliser les données pour les méthodes sensibles à l'échelle
normaliseur = StandardScaler()
donnees_normees = normaliseur.fit_transform(donnees_brutes)
Choix du Nombre de Dimensions
import numpy as np
import matplotlib.pyplot as plt
# Appliquer l'ACP pour analyser la variance
acp = PCA().fit(donnees_normees)
# Visualiser la variance cumulée
variance_cumulee = np.cumsum(acp.explained_variance_ratio_)
plt.plot(variance_cumulee)
plt.xlabel('Nombre de composantes')
plt.ylabel('Variance cumulée expliquée')
plt.axhline(y=0.95, color='r', linestyle='--')
plt.show()
Évaluation des Caractéristiques Extraintes
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# Appliquer un clustering sur les données réduites
clusteriseur = KMeans(n_clusters=3)
etiquettes_clusters = clusteriseur.fit_predict(donnees_compressees)
# Calculer le score de silhouette pour évaluer la qualité
qualite = silhouette_score(donnees_compressees, etiquettes_clusters)
print(f"Score de silhouette: {qualite:.3f}")
Résolution de Problèmes Courants
- Perte d'information excessive : Augmenter la dimension cible, opter pour des méthodes non linéaires, ou utiliser la sélection de variables.
- Déséquilibre des classes : Appliquer des techniques supervisées comme l'ADL, ou ajuster les poids des classes.
- Contraintes de calcul : Recourir à des algorithmes incrémentaux comme l'ACP incrémentale, ou des méthodes approximatives telles que Barnes-Hut pour t-SNE.
- Visualisation de données haute dimension : Utiliser t-SNE, UMAP, ou des outils de visualisation interactive avec des graphiques parallèles.