Odkryłem, że He i Garcia (2009) są pomocnym przeglądem nauki w niezrównoważonych problemach klasowych. Oto kilka zdecydowanie niewyczerpujących kwestii do rozważenia:
Podejścia oparte na danych:
Można powtórzyć próbkę klasy większościowej lub przesłuchać klasę mniejszości. (Breiman zwrócił uwagę, że formalnie jest to równoważne z przypisaniem nierównomiernych kosztów błędnej klasyfikacji). Może to powodować problemy: niepełne próbkowanie może spowodować, że uczeń nie dostrzeże aspektów klasy większościowej; nadpróbkowanie zwiększa ryzyko nadmiernego dopasowania.
Istnieją metody „świadomego niepełnego próbkowania”, które zmniejszają te problemy. Jednym z nich jest EasyEnsemble , który niezależnie próbkuje kilka podzbiorów z klasy większości i tworzy wiele klasyfikatorów, łącząc każdy podzbiór ze wszystkimi danymi klasy mniejszości.
SMOTE (Synthetic Minority Oversampling Technique) lub SMOTEBoost, (łącząc SMOTE z boostingiem) tworzą syntetyczne wystąpienia klasy mniejszości, tworząc najbliższych sąsiadów w przestrzeni obiektów. SMOTE jest zaimplementowany w R w pakiecie DMwR (który towarzyszy książce Luisa Torgo „Data Mining with R, learning with case studies” CRC Press 2016 ).
Podejścia do modelowania
Zastosuj wagi specyficzne dla klasy w swojej funkcji straty (większe wagi w przypadkach mniejszości).
W przypadku podejść opartych na drzewach można użyć odległości Hellingera jako funkcji zanieczyszczenia węzłów, jak zalecono w Cieslak i in. „Drzewa decyzyjne odległości Hellingera są solidne i niewrażliwe na pochylenie” ( tutaj kod Weka ).
Użyj klasyfikatora jednej klasy , ucząc się (w zależności od modelu) gęstości prawdopodobieństwa lub granicy dla jednej klasy i traktując drugą klasę jako wartości odstające.
Oczywiście nie używaj dokładności jako miernika do budowy modelu. Kappa Cohena jest rozsądną alternatywą.
Podejścia do oceny modelu
Jeśli Twój model zwraca przewidywane prawdopodobieństwa lub inne wyniki, wybierz wartość odcięcia decyzji, która powoduje odpowiedni kompromis w zakresie błędów (przy użyciu zestawu danych niezależnego od szkolenia i testowania). W pakiecie R pakiet OptimalCutpoints implementuje szereg algorytmów, w tym wrażliwych na koszty, do decydowania o wartości granicznej.
Rozumiem, że jest to aktywny obszar badań w społeczności uczącej się maszynowo i nie ma świetnych odpowiedzi, a raczej duża i rosnąca liczba potencjalnych rozwiązań. Prawdopodobnie uzyskasz lepsze odpowiedzi, jeśli określisz określone algorytmy, które rozważasz.
Jeśli używasz modelu parametrycznego (regresja logistyczna), powinno to być mniejszy problem i możesz po prostu zmienić próg w zależności od funkcji straty (koszt fałszywych negatywów do fałszywie dodatnich)
Jeśli używasz algorytmów uczenia maszynowego, może to być trudniejsze. Max Kuhn podejmuje uczciwą próbę podsumowania problemu w rozdziale 16 „Stosowanego modelowania predykcyjnego”. Ale trudny temat do podsumowania. Jeśli nie chcesz kupować książki, kod R jest dostępny w pakiecie AppliedPredictiveModeling dla tego rozdziału i może być wystarczający w zależności od Twojej znajomości języka R i zastosowanych algorytmów.
Dyskusje dotyczą zwykle algorytmów niepełnego próbkowania / nadpróbkowania +/- wrażliwych na koszty. Możliwe są również warianty takie jak Jous-Boost.
Przykład tego rodzaju dyskusji: Chen i wsp. „Wykorzystanie losowego lasu do nauki niezrównoważonych danych” http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf
źródło
Możesz zapoznać się z implementacją scikit-learn. zwróć uwagę na argument class_ weight, który może mieć wartości słownika wag klas lub „auto”:
klasa sklearn.svm.SVC (C = 1.0, jądro = 'rbf', stopień = 3, gamma = 0,0, coef0 = 0,0, kurczenie się = prawda, prawdopodobieństwo = fałsz, tol = 0,001, rozmiar pamięci podręcznej = 200, waga_klasy = brak, szczegółowe = False, max_iter = -1, random_state = Brak)
Możesz grać z wartością argumentu class_weight, którym może być słownik wag klasy lub „auto”. W trybie „automatycznym” algorytm uczenia automatycznie przypisuje wagi do każdej klasy na podstawie liczby próbek w każdej z nich.
scikit-learn ma kilka innych algorytmów klasyfikacji, z których niektóre akceptują wagi klas.
źródło