Comment traiter un problème de classification binaire, où les instances de la classe négative sont très similaires? [dupliquer]

Dec 01 2020

Disons que l'on veut détecter, si une image de taille fixe contient un chat ou non. Mais en tant que jeu de données, vous avez 10000 images de chats et 30000 images qui ne contiennent pas de chat, mais qui sont très similaires les unes aux autres. Par exemple, supposons que les 30000 images de la classe "not cat" ne contiennent que des images d'un ou deux types d'araignées.

Lors de la formation d'un CNN, vous constaterez que vous obtenez un score élevé sur l'ensemble de test (ici score élevé = matrice de confusion presque entièrement diagonale), mais lorsque vous souhaitez utiliser le CNN dans le monde réel, vous constatez que presque tout est classé comme un chat.

Pourquoi le réseau se généralise-t-il mal dans ce cas? Même si l'ensemble de données ne représente pas le type de données, le CNN verrait dans le monde réel, ne devrait-il pas être facile pour le CNN de dire "J'ai vu 10000 exemples de chats, donc tout ce qui ne ressemble pas à un chat n'est pas un chat "?

Comment traiter ce problème (en plus de collecter plus de données)?

Réponses

etiennedm Dec 01 2020 at 21:30

Le CNN dans ce cas n'apprend pas ce qu'est un chat mais plutôt ce qui différencie une image avec un chat d'une image sans chat.
Si toutes vos images "no-cat" contiennent des araignées, le CNN pourrait également converger uniquement en détectant les araignées (s): les images avec des araignées appartiennent à "no-cat" et les autres appartiennent à "cat" . Cela explique pourquoi vous avez une si bonne matrice de confusion sur les données de test et des performances aussi médiocres dans le monde réel.

Vous avez quelques options pour éviter une telle situation:

  • ajoutez d'autres images à votre étiquette "no-cat" comme vous l'avez dit (en utilisant des ensembles de données publics par exemple)
  • essayez des approches de classification à classe unique . Si vous êtes familier avec les réseaux de neurones, vous pouvez creuser dans l' erreur de reconstruction des auto-encodeurs (voir cet article: Comment utiliser un ensemble de données avec une seule catégorie de données ou ce guide sklearn )

J'espère que ça aide