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 SMOTEAttributs :
Paramètre Type Description Valeur par défaut sampling_strategystr, int ou dict Stratégie de sur-échantillonnage. Peut être 'auto'pour équilibrer les classes ou un nombre pour spécifier un ratio.autorandom_stateint, optionnel Contrôle la reproductibilité de l'échantillonnage aléatoire. Nonek_neighborsint Le nombre de voisins pour la génération des nouveaux échantillons. 5n_jobsint, optionnel Le nombre de jobs parallèles à utiliser pour l'échantillonnage. NoneExemple 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
SMOTEdepuisimblearn.over_samplingpour l’oversampling,make_classificationdesklearn.datasetspour générer un jeu de données synthétique, etCounterdecollectionspour 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
SMOTEest créée avec unrandom_statepour 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