Sur-échantillonnage (Oversampling) des classes minoritaires avec RandomOverSampler de imblearn
Le sur-échantillonnage (oversampling) des classes minoritaires avec RandomOverSampler de la bibliothèque imblearn est une technique permettant de rééquilibrer un dataset en augmentant le nombre d’exemples dans la classe minoritaire. Cette méthode consiste à générer de nouvelles instances synthétiques de la classe minoritaire, généralement en répliquant aléatoirement les exemples existants.
Fonctions :
-
RandomOverSampler()
Le RandomOverSampler est utilisé pour effectuer un sur-échantillonnage des classes minoritaires dans un jeu de données déséquilibré. L'objectif est d'augmenter le nombre d'exemples dans la classe minoritaire en répliquant certains exemples existants, ce qui aide à équilibrer la distribution des classes et à améliorer la performance du modèle, notamment pour la classe minoritaire.
Importation :
from imblearn.over_sampling import RandomOverSampler
Attributs :
Paramètre Description sampling_strategy
Stratégie de sur-échantillonnage. Peut être 'auto'
pour équilibrer les classes, ou un nombre pour spécifier un ratio.random_state
Contrôle la reproductibilité de l'échantillonnage aléatoire. Par défaut, None
.replacement
Détermine si le sur-échantillonnage est effectué avec ou sans remplacement. Par défaut, False
.Exemple de code :
from collections import Counter from imblearn.over_sampling import RandomOverSampler import numpy as np # Jeu de données déséquilibré : X contient des exemples, y leurs étiquettes/classes X = np.array([[1], [2], [3], [4], [5], [6]]) y = np.array([0, 0, 0, 1, 1, 1]) # classes équilibrées pour l'exemple, modifions pour déséquilibre # Créons un déséquilibre volontaire y = np.array([0, 0, 0, 0, 1, 1]) # Classe 0 a 4 exemples, classe 1 a 2 exemples print(f"Répartition avant sur-échantillonnage : {Counter(y)}") # Initialisation du RandomOverSampler ros = RandomOverSampler(random_state=42) # Application du sur-échantillonnage X_resampled, y_resampled = ros.fit_resample(X, y) print(f"Répartition après sur-échantillonnage : {Counter(y_resampled)}") print(f"Données sur-échantillonnées : \n{X_resampled}") print(f"Labels sur-échantillonnés : \n{y_resampled}")
Explication du code :
- Importation des modules : Le code commence par importer
Counter
decollections
pour compter les occurrences,RandomOverSampler
deimblearn.over_sampling
pour effectuer le sur-échantillonnage, etnumpy
sous l’aliasnp
pour manipuler les tableaux de données. - Création du jeu de données :
X
est un tableau NumPy contenant des exemples avec une seule caractéristique, ety
est un tableau d’étiquettes correspondant à ces exemples. Ici,y
contient un déséquilibre volontaire avec 4 exemples de la classe 0 et 2 exemples de la classe 1. - Affichage de la répartition initiale :
Counter(y)
compte combien d’exemples il y a dans chaque classe avant le sur-échantillonnage. Le résultat est affiché pour montrer ce déséquilibre. - Initialisation du RandomOverSampler : On crée une instance de
RandomOverSampler
avec unrandom_state
fixé pour assurer la reproductibilité des résultats. - Application du sur-échantillonnage : La méthode
fit_resample()
est appelée sur l’objetros
, prenant en entréeX
ety
. Cette méthode génère un nouveau jeu de donnéesX_resampled
ety_resampled
où la classe minoritaire est augmentée par duplication aléatoire d’exemples. - Affichage du résultat : On utilise de nouveau
Counter
pour montrer la nouvelle répartition équilibrée des classes, puis on affiche les données et labels sur-échantillonnés pour visualiser les modifications.
- Importation des modules : Le code commence par importer