Как справиться с проблемой двоичной классификации, когда экземпляры в отрицательном классе очень похожи? [дубликат]

Dec 01 2020

Допустим, кто-то хочет определить, есть ли на картинке фиксированного размера кота. Но в качестве набора данных у вас есть 10000 изображений кошек и 30000 изображений, которые не содержат кошек, но очень похожи друг на друга. Например, предположим, что 30000 изображений в классе «не кошка» содержат только изображения одного или двух видов пауков.

При обучении CNN вы обнаружите, что получаете высокий балл на тестовом наборе (здесь высокий балл = почти полностью диагональная матрица путаницы), но когда вы хотите использовать CNN в реальном мире, вы обнаружите, что почти все классифицируется как кошка.

Почему в этом случае сеть плохо обобщается? Даже если набор данных не представляет собой тип данных, CNN увидит в реальном мире, разве CNN не будет легко сказать: «Я видел 10000 примеров кошек, поэтому все, что не похоже на кошка не кошка »?

Как можно решить эту проблему (помимо сбора дополнительных данных)?

Ответы

etiennedm Dec 01 2020 at 21:30

CNN в этом случае узнает не о том, что такое кошка, а скорее о том, что отличает изображение с кошкой от изображения без кошки.
Если все ваши изображения «без кошек» содержат паука (ов), CNN также может сойтись, только обнаружив паука (ов): изображения с пауком (ами) принадлежат «не-кошке», а другие - «кошке» . Это объясняет, почему у вас такая хорошая матрица путаницы с данными тестирования и такая низкая производительность в реальном мире.

У вас есть несколько способов избежать такой ситуации:

  • добавьте другие изображения в ярлык "без кошек", как вы сказали (например, используя общедоступные наборы данных)
  • попробуйте подходы одноклассной классификации . Если вы знакомы с нейронными сетями, вы могли бы покопаться в ошибке реконструкции автоэнкодеров (см. Этот пост: Как использовать набор данных только с одной категорией данных или это руководство по sklearn )

Надеюсь, это поможет