Jak poradzić sobie z problemem klasyfikacji binarnej, gdy instancje w klasie negatywnej są bardzo podobne? [duplikować]
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
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