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:
- Co mogę zrobić, aby poprawić liczbę pozytywnych trafień?
- Jak ustalić, czy w takim przypadku istnieje prześwit? (Próbowałem knuć itp.)
- 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)
- 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ń?
- 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]]
Ponieważ dane są bardzo wypaczone, w takim przypadku możemy również spróbować szkolenia modelu po nadmiernym próbkowaniu danych.
źródło