Binarny model klasyfikacji dla niezrównoważonych danych

14

Mam zestaw danych o następujących specyfikacjach:

  • Zestaw danych szkoleniowych z 193 176 próbkami z 2821 pozytywami
  • Przetestuj zestaw danych z 82 887 próbkami z 673 pozytywami
  • Istnieje 10 funkcji.

Chcę przeprowadzić klasyfikację binarną (0 lub 1). Problem, przed którym stoję, polega na tym, że dane są bardzo niezrównoważone. Po normalizacji i skalowaniu danych wraz z inżynierią funkcji i użyciem kilku różnych algorytmów są to najlepsze wyniki, jakie mogłem osiągnąć:

mean square error : 0.00804710026904
Confusion matrix : [[82214   667]
                   [    0     6]]

tj. tylko 6 poprawnych trafień pozytywnych. Jest to regresja logistyczna. Oto różne rzeczy, które próbowałem z tym:

  • Różne algorytmy, takie jak RandomForest, DecisionTree, SVM
  • Zmiana wartości parametrów w celu wywołania funkcji
  • Część inżynierii funkcji oparta na intuicji, obejmująca funkcje złożone

Teraz moje pytania to:

  1. Co mogę zrobić, aby poprawić liczbę pozytywnych trafień?
  2. Jak ustalić, czy w takim przypadku istnieje prześwit? (Próbowałem knuć itp.)
  3. W którym momencie można stwierdzić, czy to może być najlepsze dopasowanie, jakie mogę mieć? (co wydaje się smutne, biorąc pod uwagę tylko 6 trafień z 673)
  4. Czy istnieje sposób, aby zwiększyć ważenie pozytywnych wystąpień próbki, aby rozpoznawanie wzorca poprawiło się, prowadząc do większej liczby trafień?
  5. Które wykresy graficzne mogą pomóc w wykryciu wartości odstających lub intuicji na temat tego, który wzór najlepiej pasuje?

Korzystam z biblioteki scikit-learn z Pythonem, a wszystkie implementacje są funkcjami bibliotecznymi.

edytować:

Oto wyniki z kilkoma innymi algorytmami:

Losowy klasyfikator leśny (n_estimators = 100)

[[82211   667]
[    3     6]]

Drzewa decyzyjne:

[[78611   635]
[ 3603    38]]
tejaskhot
źródło

Odpowiedzi:

11
  1. Skoro zajmujesz się klasyfikacją binarną, czy próbowałeś dostosować próg klasyfikacji? Ponieważ twój algorytm wydaje się raczej niewrażliwy, spróbuję go obniżyć i sprawdzić, czy jest poprawa.

  2. Zawsze możesz użyć krzywych uczenia się lub wykresu jednego parametru modelu w porównaniu do błędu treningu i walidacji, aby ustalić, czy Twój model jest zbyt dopasowany. Wygląda na to, że w twoim przypadku jest to niedopasowane, ale to tylko intuicja.

  3. Ostatecznie zależy to od zestawu danych i różnych wypróbowanych modeli. W tym momencie i bez dalszych testów nie ma jednoznacznej odpowiedzi.

  4. Nie twierdząc, że jesteś ekspertem w tej dziedzinie, możesz zastosować wiele różnych technik (wskazówka: pierwszy link w Google ), ale moim zdaniem najpierw upewnij się, że dokładnie wybierasz funkcję kosztów, aby reprezentowała to, co naprawdę szukasz.

  5. Nie jesteś pewien, co rozumiesz przez wzorzec intuicji, czy możesz to rozwinąć?

Przy okazji, jakie były twoje wyniki z różnymi algorytmami, które wypróbowałeś? Czy były inne?

insys
źródło
1
Dostosowanie progu regresji logistycznej załatwiło sprawę. Dzięki za listę źródeł.
tejaskhot
Czy ktoś może wkleić fragment kodu dostosowujący próg regresji logistycznej?
Blenz
0

Ponieważ dane są bardzo wypaczone, w takim przypadku możemy również spróbować szkolenia modelu po nadmiernym próbkowaniu danych.

SMOTE i ADASYN to niektóre z technik, których możemy użyć do nadmiernego próbkowania danych.

vipin bansal
źródło