J'ai un ensemble de données qui a un attribut de classe binaire. Il y a 623 instances de classe +1 (cancer positif) et 101 671 instances de classe -1 (cancer négatif).
J'ai essayé divers algorithmes (Naive Bayes, Random Forest, AODE, C4.5) et tous ont des taux de faux négatifs inacceptables. Random Forest a la précision globale de prédiction la plus élevée (99,5%) et le taux de faux négatifs le plus bas, mais il manque encore 79% des classes positives (c'est-à-dire qu'il ne parvient pas à détecter 79% des tumeurs malignes).
Des idées pour améliorer cette situation?
Merci!
Réponses:
Le déséquilibre des classes est un problème très courant. Vous pouvez soit suréchantillonner la classe positive (ou sous-échantillonner la négative) ou ajouter des pondérations de classe.
Une autre chose à retenir dans ce cas est que la précision n'est pas une mesure très utile ici. Vous pourriez considérer le score AUC ou F1 .
La modification de votre seuil de décision peut sembler attrayante, mais entraînera évidemment (dans ce cas, de manière drastique) une augmentation des faux positifs (bien que les MF ne soient peut-être pas aussi mauvais que les FN dans le cas d'un diagnostic médical, si les tests ne sont pas trop chers).
Une analyse plus approfondie des options en cas de déséquilibre de classe est fournie ici .
la source
Même si la réponse est en réalité toujours
true
oufalse
, vous pouvez faire en sorte que vos attributs de classe ne soient pas des étiquettes mais des nombres à virgule flottante, c'est-à-dire 1.0 et 0.0 (ou 100 et 0). Autrement dit, vous pouvez encadrer qu'il s'agit d'un problème de régression , pas d'un problème de classification.Ensuite, la sortie prévue sera également des nombres sur ce spectre, c'est-à-dire des probabilités et non des étiquettes. Votre implémentation actuelle est essentiellement équivalente à un modèle de régression avec un seuil de 0,5.
Avec une telle sortie, vous ou votre client pouvez définir un seuil acceptable (par exemple 0,3). Bien sûr, il y aura alors plus de faux positifs, mais pour certaines applications, comme la détection du cancer, c'est optimal.
Le suréchantillonnage (les positifs) ou le sous-échantillonnage (les négatifs) sont également des moyens de résoudre ce problème, mais cela doit être fait de manière réfléchie, peut sacrifier la précision et sacrifie toujours le contrôle pour déplacer le seuil après la création des données et la formation.
la source
Le sous-échantillonnage et le suréchantillonnage en tant que technique ont déjà été mentionnés, mais je pensais pointer vers une variante couramment utilisée:
SMOTE : Technique de suréchantillonnage des minorités synthétiques
Il a été présenté dans cet article en 2002 . Voici un extrait du résumé:
Vous pouvez l'utiliser facilement en Python, en utilisant le
imbalanced-learn
package , qui est contenu dans le module contrib de Scikit-Learn et doit être installé séparément.Ce package comprend des méthodes pour combiner le sur- / sous-échantillonnage ainsi qu'un ensemble d'utilitaires pour générer des lots de données pouvant circuler dans Keras / Tensorflow.
la source