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!
classification
random-forest
decision-trees
unbalanced-classes
użytkownik798275
źródło
źródło
Odpowiedzi:
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 .
źródło
Mimo że w rzeczywistości odpowiedź brzmi zawsze
true
lubfalse
, 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.
źródło
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:
Można go używać łatwo w Pythonie, używając ten
imbalanced-learn
pakiet , który jest zawarty w contrib modułu scikit-learn i musi być zainstalowane oddzielnie.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.
źródło