Jak poradzić sobie z problemem klasyfikacji binarnej, gdy instancje w klasie negatywnej są bardzo podobne? [duplikować]

Dec 01 2020

Powiedzmy, że chce się wykryć, czy zdjęcie o ustalonym rozmiarze zawiera kota, czy nie. Ale jako zbiór danych masz 10000 zdjęć kotów i 30000 zdjęć, które nie zawierają kota, ale są do siebie bardzo podobne. Na przykład, załóżmy, że 30 000 obrazów w klasie „nie kot” zawiera tylko zdjęcia jednego lub dwóch rodzajów pająków.

Trenując CNN przekonasz się, że osiągasz wysoki wynik na zestawie testowym (tutaj wysoki wynik = prawie w pełni ukośna macierz pomieszania), ale kiedy chcesz używać CNN w prawdziwym świecie, okaże się, że prawie wszystko jest klasyfikowane jako Kot.

Dlaczego sieć źle generalizuje w tym przypadku? Nawet jeśli zbiór danych nie reprezentuje tego rodzaju danych, CNN zobaczyłoby to w prawdziwym świecie, czy nie powinno być łatwo CNN powiedzieć „Widziałem 10000 przykładów kotów, więc wszystko, co nie wygląda jak kot nie jest kotem ”?

Jak można sobie poradzić z tym problemem (poza gromadzeniem większej ilości danych)?

Odpowiedzi

etiennedm Dec 01 2020 at 21:30

CNN w tym przypadku nie dowiaduje się, czym jest kot, ale raczej, co odróżnia obraz z kotem od obrazu bez kota.
Jeśli wszystkie twoje obrazy „bez kota” zawierają pająka, CNN może również zbiegać się tylko po wykryciu pająka (ów): obrazy z pająkiem należą do „bez kota”, a inne do „kota” . To wyjaśnia, dlaczego masz tak dobrą matrycę zamieszania podczas testowania danych i tak słabą wydajność w świecie rzeczywistym.

Masz kilka możliwości uniknięcia takiej sytuacji:

  • dodaj inne obrazy do swojej etykiety „no-cat”, jak powiedziałeś (na przykład używając publicznych zbiorów danych)
  • wypróbuj jednoklasowe podejścia do klasyfikacji . Jeśli znasz sieci neuronowe, możesz zagłębić się w błąd rekonstrukcji autoenkoderów (zobacz ten post: Jak używać zestawu danych z tylko jedną kategorią danych lub ten przewodnik po sklearn )

Mam nadzieję, że to pomoże