J'ai un ensemble de données déséquilibré dans une tâche de classification binaire, où le montant positif contre le montant négatif est de 0,3% contre 99,7%. L'écart entre les positifs et les négatifs est énorme. Lorsque je forme un CNN avec la structure utilisée dans le problème MNIST, le résultat du test montre un taux de faux négatifs élevé. De plus, la courbe d'erreur d'apprentissage diminue rapidement au cours de quelques époques au début, mais reste la même valeur aux époques suivantes.
Pourriez-vous s'il vous plaît me conseiller un moyen de traiter ce problème? Merci!
Pourquoi voulez-vous utiliser les CNN ici? Avez-vous envisagé d'autres modèles qui gèrent réellement des données déséquilibrées?
Par exemple, j'ai trouvé que les deux techniques suivantes ont très bien fonctionné pour moi:
Forêts aléatoires avec amplification SMOTE : utilisez un hybride
SMOTE
qui sous-échantillonne la classe majoritaire et suréchantillonne la classe minoritaire par des pourcentages ajustables. Sélectionnez ces pourcentages en fonction de la distribution de votre variable de réponse dans l'ensemble de formation. Alimentez ces données dans votre modèle RF. Toujours valider / effectuer une recherche sur la grille pour trouver les meilleurs réglages de paramètres pour vos RF.XGBoost avec optimisation d'hyper-paramètre : Encore une fois, effectuez une validation croisée ou effectuez une recherche de ceintures pour trouver les meilleurs réglages de paramètres pour le modèle. En outre,
xgboost
vous permet d'équilibrer les pondérations de classe positives et négatives à l'aidescale_pos_weight
. Voir la documentation des paramètres pour une liste complète.Je dois également ajouter que l'ensemble de données sur lequel je travaillais avait le même pourcentage de biais et j'ai pu obtenir un score de sensibilité de 0,941 et une spécificité de 0,71 avec
xgboost
, ce qui signifie que le modèle prédit les vrais positifs assez précisément et que cela augure bien pour moi.(Désolé, je ne peux pas laisser de commentaire, pas assez de réputation et je voulais vraiment savoir pourquoi vous avez choisi les CNN)
la source
Un ensemble de données déséquilibré est un problème commun dans tous les domaines et ne concerne pas spécifiquement la vision par ordinateur et les problèmes traités par les réseaux neuronaux convolutionnels (CNN).
Pour résoudre ce problème, vous devez essayer d'équilibrer votre ensemble de données, soit en suréchantillonnant les classes minoritaires, soit en sous-échantillonnant les classes majoritaires (ou les deux). Sans doute, un bon choix serait l'algorithme SMOTE (Technique de suréchantillonnage des minorités synthétiques), comme mentionné ci-dessus. Ici , vous trouverez une comparaison des différents algorithmes de suréchantillonnage. Si vous êtes un utilisateur Python, imbalanced-learn est une belle bibliothèque qui implémente de nombreuses techniques utiles pour équilibrer les jeux de données.
D'un autre côté, si vous essayez de classer des images, une bonne façon d'augmenter la taille de votre jeu de données est de l' augmenter (c'est-à-dire en créant des exemples synthétiques raisonnables, par exemple des images similaires, mais en les faisant pivoter / déplacer légèrement par rapport aux images originales). Vous pourriez parfois trouver utile d'augmenter les classes minoritaires pour atteindre un meilleur équilibre. La classe Keras ImageDataGenerator est un bon outil à cet effet.
la source