2013-02-25 7 views
20

Używam nauki scikit-learn w moim programie Python w celu przeprowadzenia niektórych operacji uczenia maszynowego. Problem polega na tym, że mój zbiór danych ma poważne problemy z brakiem równowagi.Brak równowagi w nauce scikit

Czy ktoś jest zaznajomiony z rozwiązaniem problemu braku równowagi w nauce scikit lub ogólnie w pytonie? W Javie jest mechanizm SMOTE. Czy jest coś równoległego w python?

+1

Możesz spróbować oversampling/undersampling, aby zrównoważyć zestaw danych. Oczywiście jest to ogólna metoda uczenia maszynowego, a nie specyficzna dla Pythona i nauki scikit. W rzeczywistości to pytanie może nie być tutaj tematem. Może lepiej pasuje do statystyk. Mają nawet znacznik [niezbalansowanych klas] (http://stats.stackexchange.com/questions/tagged/unbalanced-classes). – Junuxx

+0

Wiem, że temat jest stary, ale dodam tylko radę. W przypadku niezbilansowanych zestawów danych, oprócz oversampling/undersampling i używania parametru class_weight, można również obniżyć próg, aby klasyfikować swoje przypadki. Przewidzieć prawdopodobieństwa (zamiast klas) i spróbuj użyć progów mniejszych niż 0,5. Oczywiście nie zwiększy to wydajności klasyfikatora, jest tylko kompromisem między precyzją a wycofaniem. – Stergios

+0

Stergios, jak dokładnie można ustawić próg? Wszelkie odniesienia do kodu Pythona, który to robi? – KubiK888

Odpowiedz

4

SMOTE nie jest wbudowany w naukę scikit, ale istnieją jednak implementacje dostępne online.
Here, na przykład.

+1

Właśnie patrząc na kod, zawiera on 'TODO's. Czy ta implementacja jest poprawna? – inspectorG4dget

+1

Kod jest poprawny, właśnie testowałem. 'TODO' jest szczególnym przypadkiem i pomija coś takiego:' T = T [np.random.choice (zakres (len (T)), N)] '. Ale zachowaj linię 'N = 100'! –

24

W Scikit dowiesz się, że istnieją pewne techniki korekcji niewyważenia, które różnią się w zależności od tego, jakiego algorytmu uczenia się używasz.

Niektóre z nich, na przykład Svm lub logistic regression, mają parametr class_weight. Jeśli stworzysz SVC z tym zestawem parametrów na "auto", to obciąży on każdy przykład klasy proporcjonalnie do odwrotności jego częstotliwości.

Niestety, w tym celu nie ma narzędzia do preprocesora.

+0

Próbowałem używać wagi klasy = 'auto' w moich wyjątkowo niezrównoważonych danych, ale nie widziałem dużej różnicy w wydajności, czy to normalne? – KubiK888

+0

@ KubiK888 testujesz i sprawdzasz poprawność używając tego samego X? jakiego pomiaru używasz? –

+0

Nie, zestawy testowe i treningowe są całkowicie rozdzielone. – KubiK888

51

Jest nowy tutaj

https://github.com/scikit-learn-contrib/imbalanced-learn

Zawiera wiele algorytmów w następujących kategoriach, w tym SMOTE

  • Podpróbkowanie klasy (klas) większości.
  • Nadmierne pobieranie próbek z klasy mniejszości.
  • Łączenie nadmiaru i niedopróbkowania.
  • Twórz zbilansowane zestawy.
+3

Powinna to być teraz odpowiednia odpowiedź IMO – ChucK