Niezbilansowane klasy - jak zminimalizować fałszywe negatywy?

11

Mam zestaw danych, który ma atrybut klasy binarnej. Istnieje 623 przypadki z klasą +1 (rak dodatni) i 101 671 przypadków z klasą -1 (rak ujemny).

Wypróbowałem różne algorytmy (Naive Bayes, Random Forest, AODE, C4.5) i wszystkie mają niedopuszczalne współczynniki fałszywie ujemnych. Losowy las ma najwyższą ogólną dokładność prognozowania (99,5%) i najniższy współczynnik fałszywych wyników ujemnych, ale wciąż nie trafia w 79% klas dodatnich (tj. Nie wykrywa 79% nowotworów złośliwych).

Jakieś pomysły, jak mogę poprawić tę sytuację?

Dzięki!

użytkownik798275
źródło
Możesz rzucić okiem na to pytanie, na które otrzymałem ciekawe odpowiedzi na ten problem. Z pozdrowieniami
Michael Hooreman,

Odpowiedzi:

9

Brak równowagi klasowej jest bardzo częstym problemem. Możesz albo przeskalować klasę dodatnią (lub cofnąć próbkę ujemną), albo dodać wagi klas.

Inną rzeczą do zapamiętania w tym przypadku jest to, że dokładność nie jest tutaj bardzo użyteczną miarą. Możesz rozważyć wynik AUC lub F1 .

Zmiana progu decyzyjnego może wydawać się atrakcyjna, ale oczywiście doprowadzi (w tym przypadku najprawdopodobniej drastycznie) wzrost fałszywych wyników pozytywnych (choć być może FP nie są tak złe jak FN w przypadku diagnozy medycznej, jeśli testy nie są zbyt drogie).

Bardziej szczegółowa analiza opcji w przypadku nierównowagi klas znajduje się tutaj .

jamesmf
źródło
3

Mimo że w rzeczywistości odpowiedź brzmi zawsze truelub false, możesz ustawić atrybuty swojej klasy nie etykiety, ale liczby zmiennoprzecinkowe, tj. 1,0 i 0,0 (lub 100 i 0). Oznacza to, że można sformułować, że jest to problem regresji , a nie problem klasyfikacji.

Wtedy przewidywanym wynikiem będą również liczby w tym spektrum, tzn. Prawdopodobieństwa, a nie etykiety. Obecna implementacja jest zasadniczo równoważna modelowi regresji z progiem 0,5.

Z takim wyjściem Ty lub Twój klient możecie zdefiniować próg, który jest akceptowalny (np. 0,3). Oczywiście będzie więcej fałszywych wyników pozytywnych, ale dla niektórych aplikacji, takich jak wykrywanie raka, jest to optymalne.

Nadpróbkowanie (pozytywy) lub podpróbkowanie (negatywy) są również sposobami na naprawienie tego, ale należy to zrobić z rozwagą, może poświęcić dokładność i nadal poświęca kontrolę, aby przesunąć próg po utworzeniu danych i szkoleniu.

Adam Bittlingmayer
źródło
0

Wspomniano już o niewystarczającym i nadmiernym próbkowaniu jako technice, ale pomyślałem, że wskazałbym na często używany wariant:

SMOTE : Technika nadpróbkowania mniejszości syntetycznej

Zostało to przedstawione w tym artykule w 2002 roku . Oto fragment streszczenia:

Ten artykuł pokazuje, że połączenie naszej metody nadmiernego próbkowania klasy mniejszości (nienormalnej) i niedopróbowania klasy większościowej (normalnej) może osiągnąć lepszą wydajność klasyfikatora (w przestrzeni ROC) niż tylko niepełne próbkowanie klasy większościowej.


Można go używać łatwo w Pythonie, używając ten imbalanced-learnpakiet , który jest zawarty w contrib modułu scikit-learn i musi być zainstalowane oddzielnie.

unbalanced-learn to pakiet Pythona oferujący szereg technik ponownego próbkowania, powszechnie stosowanych w zestawach danych, wykazujących silny brak równowagi między klasami.

Pakiet ten obejmuje metody łączenia nadmiernego / niedostatecznego próbkowania, a także zestaw narzędzi do generowania partii danych, które mogą wpływać do Keras / Tensorflow.

n1k31t4
źródło