Sur-échantillonnage avec SMOTE
Le sur-échantillonnage avec SMOTE (Synthetic Minority Over-sampling Technique) génère des exemples synthétiques en interpolant entre les instances de la classe minoritaire, au lieu de simplement dupliquer les données. Cela permet de mieux équilibrer les classes et d’améliorer la performance des modèles de machine learning sur des ensembles de données déséquilibrés.
Fonctions :
-
SMOTE (Synthetic Minority Over-sampling Technique)
SMOTE (Synthetic Minority Over-sampling Technique) est une méthode avancée de sur-échantillonnage des classes minoritaires. Contrairement à RandomOverSampler, qui duplique simplement les exemples existants, SMOTE génère de nouvelles instances synthétiques en créant des points de données intermédiaires entre les exemples minoritaires existants. Cette technique est particulièrement utile pour éviter l'overfitting et générer des données plus représentatives pour les classes minoritaires.
Importation :
from imblearn.over_sampling import SMOTE
Attributs :
Paramètre Type Description Valeur par défaut sampling_strategy
str, int ou dict Stratégie de sur-échantillonnage. Peut être 'auto'
pour équilibrer les classes ou un nombre pour spécifier un ratio.auto
random_state
int, optionnel Contrôle la reproductibilité de l'échantillonnage aléatoire. None
k_neighbors
int Le nombre de voisins pour la génération des nouveaux échantillons. 5
n_jobs
int, optionnel Le nombre de jobs parallèles à utiliser pour l'échantillonnage. None
Exemple de code :
from collections import Counter from imblearn.over_sampling import SMOTE from sklearn.datasets import make_classification # Création d'un jeu de données déséquilibré X, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9], n_samples=1000, random_state=42) print("Répartition avant SMOTE :", Counter(y)) # Application de SMOTE pour équilibrer les classes smote = SMOTE(random_state=42) X_res, y_res = smote.fit_resample(X, y) print("Répartition après SMOTE :", Counter(y_res))
Explication du code :
- Import des bibliothèques : Le code importe
SMOTE
depuisimblearn.over_sampling
pour l’oversampling,make_classification
desklearn.datasets
pour générer un jeu de données synthétique, etCounter
decollections
pour compter la répartition des classes. - Création d’un jeu de données déséquilibré : La fonction
make_classification()
génère un jeu de données avec 2 classes, dont la classe minoritaire représente 10% des exemples (paramètreweights=[0.1, 0.9]
). Les données sont stockées dansX
(caractéristiques) ety
(labels). - Affichage de la répartition initiale :
Counter(y)
affiche le nombre d’exemples dans chaque classe avant application de SMOTE. - Application de SMOTE : Une instance de
SMOTE
est créée avec unrandom_state
pour garantir la reproductibilité. La méthodefit_resample()
génère des exemples synthétiques de la classe minoritaire, équilibrant ainsi le jeu de données. - Affichage de la nouvelle répartition :
Counter(y_res)
affiche la répartition des classes après application de SMOTE, montrant que les classes sont désormais équilibrées.
- Import des bibliothèques : Le code importe