Mam niezrównoważony zestaw danych w zadaniu klasyfikacji binarnej, w którym liczba dodatnia vs. liczba ujemna wynosi 0,3% w porównaniu z 99,7%. Różnica między pozytywami a negatywami jest ogromna. Kiedy trenuję CNN ze strukturą stosowaną w problemie MNIST, wynik testu pokazuje wysoką fałszywą ujemną częstość. Ponadto krzywa błędu treningu szybko spada w kilku epokach na początku, ale pozostaje taka sama w kolejnych epokach.
Czy możesz mi doradzić, jak rozwiązać ten problem? Dzięki!
Dlaczego chcesz tutaj używać CNN? Czy rozważałeś inne modele, które faktycznie obsługują niezrównoważone dane?
Na przykład odkryłem, że następujące dwie techniki działały dla mnie naprawdę dobrze:
Random Forests w / SMOTE Boosting : Użyj hybrydy,
SMOTE
która podkreśla klasę większości i przesadza próbę klasy mniejszości o regulowane wartości procentowe. Wybierz te wartości procentowe w zależności od rozkładu zmiennej odpowiedzi w zestawie treningowym. Wprowadź te dane do swojego modelu RF. Zawsze sprawdzaj krzyżowo / wykonuj wyszukiwanie siatki, aby znaleźć najlepsze ustawienia parametrów dla swoich RF.XGBoost z optymalizacją hiperparametrową : Ponownie sprawdź poprawność lub przeprowadź wyszukiwanie pasmowe, aby znaleźć najlepsze ustawienia parametrów dla modelu. Dodatkowo
xgboost
umożliwia równoważenie dodatnich i ujemnych wag klas za pomocąscale_pos_weight
. Zobacz dokumentację parametru dla pełnej listy.Powinienem również dodać, że zestaw danych, nad którym pracowałem, miał ten sam procent pochylenia i byłem w stanie uzyskać wynik czułości 0,941 i swoistość 0,71 z
xgboost
, co oznacza, że model dość dokładnie przewiduje prawdziwe pozytywy i to wróży dobrze dla mnie.(Przepraszam, nie mogę zostawić komentarza, za mało reputacji i naprawdę chciałem wiedzieć, dlaczego wybrałeś CNN)
źródło
Niezrównoważony zestaw danych jest powszechnym problemem we wszystkich obszarach i nie dotyczy w szczególności wizji komputerowej i problemów rozwiązywanych przez sieci neuronowe o konwergencji (CNN).
Aby rozwiązać ten problem, powinieneś spróbować zrównoważyć swój zestaw danych, albo przez nadmierne próbkowanie klas mniejszości lub przez niepełne próbkowanie klas większości (lub obu). Prawdopodobnie dobrym wyborem byłby algorytm SMOTE (Synthetic Minority Over-sampling Technique), jak wspomniano powyżej. Tutaj możesz znaleźć porównanie różnych algorytmów nadmiernego próbkowania. Jeśli jesteś użytkownikiem Pythona, niezbalansowane uczenie się to przyjemna biblioteka, która implementuje wiele przydatnych technik równoważenia zestawów danych.
Z drugiej strony, jeśli próbujesz sklasyfikować obrazy, dobrym sposobem na zwiększenie rozmiaru zestawu danych jest jego powiększenie (tj. Poprzez stworzenie rozsądnych syntetycznych przykładów, np. Podobnych obrazów, ale obróconych / przesuniętych nieco w stosunku do oryginalnych). Czasami może okazać się przydatne zwiększenie klas mniejszościowych w celu osiągnięcia lepszej równowagi. Klasa Keras ImageDataGenerator jest dobrym narzędziem do tego celu.
źródło