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, ou 3. 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ée X et les labels y pour obtenir les versions sous-échantillonnées X_resampled et y_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.