Nierównowaga klas w nadzorowanym uczeniu maszynowym


47

Jest to ogólnie pytanie, które nie jest specyficzne dla żadnej metody ani zestawu danych. Jak radzimy sobie z problemem nierównowagi klas w uczeniu maszynowym nadzorowanym, w którym liczba 0 wynosi około 90%, a liczba 1 wynosi około 10% w zbiorze danych. Jak optymalnie szkolimy klasyfikatora.

Jednym ze sposobów, które stosuję, jest próbkowanie w celu zrównoważenia zestawu danych, a następnie szkolenie klasyfikatora i powtórzenie tego dla wielu próbek.

Wydaje mi się, że jest to przypadkowe. Czy istnieją ramy pozwalające podejść do tego rodzaju problemów?

Odpowiedzi:


45

Istnieje wiele ram i podejść. To jest powtarzający się problem.

Przykłady:

  • Undersampling . Wybierz podpróbkę zestawów zer, tak aby jej rozmiar pasował do zestawu zer. Istnieje oczywista utrata informacji, chyba że użyjesz bardziej złożonego frameworka (na przykład podzieliłbym pierwszy zestaw na 9 mniejszych, wzajemnie wykluczających się podzbiorów, wytrenowałam model na każdym z nich i zestawił modele).
  • Nadpróbkowanie . Produkuj sztuczne, aż proporcja wyniesie 50% / 50%. Mój poprzedni pracodawca korzystał z tego domyślnie. Jest do tego wiele ram (myślę, że SMOTE jest najpopularniejszy, ale wolę prostsze sztuczki, takie jak Noisy PCA ).
  • Uczenie się jednej klasy . Załóżmy, że twoje dane mają kilka prawdziwych punktów (te) i wiele losowych szumów, które nie istnieją fizycznie, wyciekły do ​​zbioru danych (wszystko, co nie jest jednym, to szum). Użyj algorytmu do denudacji danych zamiast algorytmu klasyfikacji.
  • Szkolenie wrażliwe na koszty . Użyj asymetrycznej funkcji kosztu, aby sztucznie zrównoważyć proces szkolenia.

Niektóre podświetlone recenzje, w kolejności rosnącej złożoności technicznej \ poziomu szczegółowości:

A tak przy okazji, 90% / 10% nie jest niezrównoważone. Zestawy danych dotyczących oszustw związanych z transakcjami kartowymi są często podzielone 99,97% / 0,03%. To jest niezrównoważone.


Zauważyłem, że cytowany przez nas Noisy PCA może być postrzegany jako Oversampling, Regulararyzacja lub Jitter, w zależności od szczegółów implementacji.
Lucas Gallindo

Dzięki Lucas za zasoby. Bardzo mi pomaga, mam szczególny problem, w którym wszystkie moje próbki są oznaczone jako „1”. Jednak w rzeczywistości próbki te mają minimalne zanieczyszczenie, tzn. Istnieją zapisy, które w rzeczywistości powinny mieć wartość „0”, ale są oznaczone jako „1”. Uważam, że ten problem należy do jednej klasy klasyfikacji. Czy moje rozumowanie jest prawidłowe? Czy istnieje wspólna struktura używana do ich identyfikacji, początkowo próbowałem grupować, ale to nie działa.
NG_21,

1
Wszystkie te algorytmy wymagają niektórych danych oznaczonych jako zero, a niektóre jako 100% centainty co do poprawności etykiety (lub czegoś bardzo zbliżonego do 100%). Masz je wszystkie, ale wiesz, że niewielki procent tych danych jest błędnie oznakowany, inna sytuacja. Bez wiedzy na temat dziedziny aplikacji zaatakowałbym ją za pomocą Wykrywania Anomalii, a następnie oznaczyłbym anomalie jako zero. Następnie wypróbuj algorytm klasyfikacji (być może uczenie się jednej klasy). Mając wiedzę na temat dziedziny aplikacji, szukałem pomocy u eksperta od domeny.
Lucas Gallindo

13

Zależy to w dużej mierze od metody uczenia się. Większość podejść ogólnego przeznaczenia ma jeden (lub kilka) sposobów radzenia sobie z tym. Powszechnym rozwiązaniem jest nałożenie wyższej kary za błędne klasyfikowanie na klasę mniejszości, zmuszając klasyfikatora do ich rozpoznania (SVM, regresja logistyczna, sieci neuronowe, ...).

Zmiana próbkowania to również możliwość, o której wspomniałeś. W takim przypadku nadpróbkowanie klasy mniejszościowej jest zwykle lepszym rozwiązaniem niż niedopróbowanie klasy większościowej.

Niektóre metody, takie jak losowe lasy, nie wymagają żadnych modyfikacji.


Dzięki. Czy możesz wskazać dowolny zasób, w którym wyjaśniono go kilkoma przykładami. Czy istnieje sposób na osiągnięcie tego w R / Python bez uciekania się do kodowania algorytmu od zera.
NG_21

1
Sprawdź pierwszą funkcję tego pakietu R: cran.r-project.org/web/packages/unbalanced/unbalanced.pdf
Lucas

7
Dlaczego Losowy las nie wymaga żadnych modyfikacji? Myślę, że nadal możesz przypisać wagę klasy
Mac

4

Często problemem nie jest częstotliwość, lecz bezwzględna liczba przypadków w klasie mniejszości. Jeśli nie masz wystarczającej zmienności w celu w porównaniu do zmienności funkcji, może to oznaczać, że algorytm nie może bardzo dokładnie klasyfikować rzeczy.

Jedną rzeczą jest to, że kara za błędną klasyfikację może być stosowana na etapie klasyfikacji, a nie na etapie szacowania parametrów, jeśli taka istnieje. Niektóre metody nie mają pojęcia parametru, po prostu generują absolutne etykiety klasy lub prawdopodobieństwa klasy.

Jeśli posiadasz estymator probabilistyczny, możesz podjąć decyzję w sprawie klasyfikacji na podstawie teoretycznych informacji lub kombinacji wartości biznesowej.


1

Dodaj dwie sztuczki: 1. użyj CDF, policz częstotliwość w danych treningowych lub użyj bardzo dużej walidacji (jeśli zestaw testowy się nie zmieni, ale zestaw walidacyjny musi mieć taki sam rozkład z zestawem treningowym), następnie posortuj swoje prognozy i uzyskaj pierwsze X% (zliczasz częstotliwość wcześniej) dla jednej klasy, a pozostałe to ważona próbka else / 2. model będzie miał tendencję do ważonej klasy próbki, możesz użyć wariancji próbki v. np. waga = 1/2 (1- (vmax - vi) / vmax)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.