Sous-échantillonnage avec NearMiss
Le sous-échantillonnage avec NearMiss est une technique qui consiste à réduire le nombre d’exemples de la classe majoritaire en sélectionnant les instances les plus proches des exemples de la classe minoritaire. Cela permet d’équilibrer les classes tout en conservant les exemples les plus informatifs de la classe majoritaire pour l’apprentissage du modèle.
Fonctions :
-
NearMiss()
NearMiss est une technique de sous-échantillonnage utilisée pour équilibrer les classes en réduisant la taille de la classe majoritaire. Contrairement à un sous-échantillonnage aléatoire, NearMiss sélectionne les échantillons de la classe majoritaire en fonction de leur proximité avec les échantillons de la classe minoritaire. Il existe plusieurs versions de NearMiss qui diffèrent dans la manière dont les échantillons sont sélectionnés : Version 1 : Choisit les échantillons de la classe majoritaire les plus proches des échantillons de la classe minoritaire (en termes de distance). Version 2 : Choisit les échantillons de la classe majoritaire qui ont le plus petit nombre de voisins parmi les échantillons de la classe minoritaire. Version 3 : Une combinaison des deux premières versions.
Importation :
from imblearn.under_sampling import NearMiss
Attributs :
Paramètre Description sampling_strategy
Stratégie de sous-échantillonnage. 'auto'
pour réduire la classe majoritaire à la taille de la classe minoritaire.version
Version de l'algorithme NearMiss à utiliser : 1
,2
, ou3
. Par défaut,1
.n_neighbors
Nombre de voisins à utiliser pour la recherche de proximité. Par défaut, 3
.random_state
Contrôle la reproductibilité de l'échantillonnage. Par défaut, None
.Exemple de code :
from imblearn.under_sampling import NearMiss # Initialisation de NearMiss near_miss = NearMiss() # Appliquer NearMiss pour sous-échantillonner la classe majoritaire X_resampled, y_resampled = near_miss.fit_resample(X, y) # Afficher la distribution des classes avant et après print("Distribution des classes avant NearMiss :") print(y.value_counts()) print("Distribution des classes après NearMiss :") print(pd.Series(y_resampled).value_counts())
Explication du code :
- Importation : NearMiss est importé depuis
imblearn.under_sampling
pour être utilisé dans le processus de sous-échantillonnage. - Initialisation de NearMiss : Un objet
near_miss
est créé. Par défaut, il utilise la version 1 de l'algorithme et réduit la classe majoritaire à la taille de la classe minoritaire. - Application de NearMiss : La méthode
fit_resample(X, y)
applique le sous-échantillonnage en ajustant les échantillons d'entréeX
et les labelsy
pour obtenir les versions sous-échantillonnéesX_resampled
ety_resampled
. - Affichage de la distribution des classes : Avant et après l'application de NearMiss, la distribution des classes est imprimée pour observer les changements.
Remarques
- NearMiss est particulièrement utile lorsque vous souhaitez réduire la taille de la classe majoritaire sans introduire de redondance, comme dans le cas du sur-échantillonnage.
- Cette technique peut parfois entraîner une perte d'information importante, car elle supprime des échantillons de la classe majoritaire.
- Il est conseillé de tester différentes versions de NearMiss (1, 2 ou 3) pour trouver celle qui fonctionne le mieux avec vos données et votre modèle.
- Importation : NearMiss est importé depuis