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 SMOTE

    Attributs :

    Paramètre Type Description Valeur par défaut
    sampling_strategy str, int ou dict Stratégie de sur-échantillonnage. Peut être 'auto' pour équilibrer les classes ou un nombre pour spécifier un ratio. auto
    random_state int, optionnel Contrôle la reproductibilité de l'échantillonnage aléatoire. None
    k_neighbors int Le nombre de voisins pour la génération des nouveaux échantillons. 5
    n_jobs int, optionnel Le nombre de jobs parallèles à utiliser pour l'échantillonnage. None

    Exemple de code :

    from imblearn.over_sampling import SMOTE
    
    # Initialisation de SMOTE
    smote = SMOTE()
    
    # Appliquer SMOTE pour générer des données synthétiques
    X_resampled, y_resampled = smote.fit_resample(X, y)
    
    # Afficher la distribution des classes avant et après
    print("Distribution des classes avant SMOTE :")
    print(y.value_counts())
    
    print("Distribution des classes après SMOTE :")
    print(pd.Series(y_resampled).value_counts())

    Explication du code :

    • Importation : SMOTE est importé depuis imblearn.over_sampling pour être utilisé dans le processus de sur-échantillonnage.
    • Initialisation de SMOTE : Un objet smote est créé. Il peut être configuré pour ajuster la stratégie de sur-échantillonnage selon les besoins (par défaut, la stratégie est 'auto', ce qui équilibre les classes).
    • Application de SMOTE : La méthode fit_resample(X, y) applique le sur-échantillonnage sur les données d'entrée X et les labels y, générant ainsi des versions sur-échantillonnés X_resampled et y_resampled.
    • Affichage de la distribution des classes : Avant et après l'application de SMOTE, la distribution des classes est imprimée pour observer les changements.

    🟢 Remarques

    • SMOTE peut être plus performant que le sur-échantillonnage aléatoire en générant des exemples synthétiques, ce qui évite la redondance et le sur-apprentissage.
    • Cette méthode nécessite un calcul supplémentaire pour générer les points de données synthétiques, ce qui peut augmenter le temps de traitement, en particulier avec de grands jeux de données.
    • SMOTE peut être sensible au nombre de voisins (k_neighbors) et il est important de tester différentes valeurs de ce paramètre pour obtenir les meilleurs résultats.