Équilibrage des classes avec ADASYN

ADASYN (Adaptive Synthetic Sampling) est une méthode de sur-échantillonnage qui génère des exemples synthétiques dans la classe minoritaire en fonction de la densité des exemples voisins. Contrairement à SMOTE, ADASYN se concentre sur les instances de la classe minoritaire qui sont mal classées ou difficiles à prédire, en créant plus d’exemples synthétiques près de ces points. Cela permet de mieux équilibrer les classes tout en améliorant les performances du modèle sur les instances difficiles.

Fonctions :

  • ADASYN ()

    ADASYN (Adaptive Synthetic Sampling) est une méthode de sur-échantillonnage qui génère des exemples synthétiques pour la classe minoritaire. Contrairement à SMOTE, qui génère des points synthétiques de manière uniforme dans l'espace des caractéristiques, ADASYN se concentre sur les échantillons de la classe minoritaire qui sont les plus difficiles à classifier (c'est-à-dire ceux qui se trouvent dans des régions de faible densité). Cela permet de générer plus de points autour des exemples difficiles et moins autour des exemples faciles. Le processus est adaptatif : il génère plus de nouveaux exemples pour les instances de la classe minoritaire qui sont les plus proches des instances de la classe majoritaire.

    Importation :

    from imblearn.over_sampling import ADASYN

    Attributs :

    
    Paramètre Description
    sampling_strategy Détermine la stratégie d'échantillonnage. 'auto' pour augmenter la classe minoritaire jusqu'à la taille de la classe majoritaire.
    n_neighbors Nombre de voisins pour générer des exemples synthétiques, par défaut 5.
    random_state Permet de contrôler la reproductibilité de l'échantillonnage, par défaut None.
    m_neighbors Nombre de voisins à utiliser pour calculer les plus proches voisins dans la classe minoritaire, par défaut 10.
    threshold_to_majority Seuil pour déterminer la quantité d'échantillons à générer pour chaque échantillon difficile.

    Exemple de code :

    from imblearn.over_sampling import ADASYN
    from sklearn.datasets import make_classification
    from collections import Counter
    
    # Création d'un jeu de données déséquilibré
    X, y = make_classification(n_classes=2, class_sep=2,
                               weights=[0.9, 0.1], n_informative=3,
                               n_redundant=1, flip_y=0,
                               n_features=5, n_clusters_per_class=1,
                               n_samples=200, random_state=42)
    
    print(f"Répartition avant ADASYN : {Counter(y)}")
    
    # Application de ADASYN (suréchantillonnage)
    adasyn = ADASYN()
    X_res, y_res = adasyn.fit_resample(X, y)
    
    print(f"Répartition après ADASYN : {Counter(y_res)}")
    Résultat du code

    Explication du code :

    • Import des modules : Le code importe ADASYN pour le suréchantillonnage depuis imblearn.over_sampling, make_classification pour générer un jeu de données synthétique, et Counter pour compter la répartition des classes.
    • Création d’un jeu de données déséquilibré : make_classification() génère un dataset avec deux classes où la classe minoritaire représente seulement 10 % des exemples (weights=[0.9, 0.1]).
    • Affichage de la répartition initiale : Counter(y) affiche le nombre d’exemples dans chaque classe avant le suréchantillonnage.
    • Application de ADASYN : Une instance de ADASYN est créée. La méthode fit_resample() génère de nouveaux exemples synthétiques de la classe minoritaire en se concentrant sur les régions difficiles à classifier, afin d’équilibrer les classes.
    • Affichage de la nouvelle répartition : Counter(y_res) affiche la répartition des classes après le suréchantillonnage, montrant que les classes sont désormais équilibrées.