Niska dokładność klasyfikacji, co dalej?

16

Jestem więc nowicjuszem w dziedzinie ML i staram się dokonać klasyfikacji. Moim celem jest przewidzieć wynik wydarzenia sportowego. Zebrałem trochę danych historycznych i teraz próbuję wyszkolić klasyfikatora. Dostałem około 1200 próbek, z czego 0,2 oddzieliłem do celów testowych, inne poddałem wyszukiwaniu sieci (w tym walidacji krzyżowej) z różnymi klasyfikatorami. Do tej pory wypróbowałem SVM z jądrem liniowym, rbf i wielomianowym oraz Random Forests. Niestety nie mogę uzyskać dokładności znacznie większej niż 0,5 (to samo, co losowy wybór klasy). Czy to oznacza, że ​​po prostu nie mogę przewidzieć wyniku tak złożonego wydarzenia? Czy mogę uzyskać dokładność co najmniej 0,7-0,8? Jeśli to wykonalne, to w co powinienem spojrzeć dalej?

  • Uzyskaj więcej danych? (Mogę powiększyć zestaw danych do 5 razy)
  • Wypróbować różne klasyfikatory? (Regresja logistyczna, kNN itp.)
  • Ponownie ocenić mój zestaw funkcji? Czy są jakieś narzędzia ML do analizy, które funkcje mają sens, a które nie? Może powinienem zmniejszyć zestaw funkcji (obecnie mam 12 funkcji)?
fspirit
źródło
Jaka jest twoja dokładność treningu? A ile masz próbek w każdej klasie?
Leo
1
Co to za sport i co uważacie za „prawidłową” klasyfikację? Jeśli po prostu próbujesz przewidzieć wynik wygranej / przegranej w praktycznie każdym dużym sporcie, prawie nie do pomyślenia jest, aby nawet najprostszy klasyfikator nie przewidział lepiej niż 0,5. Jeśli, powiedzmy, próbujesz przewidzieć wygraną / przegraną w stosunku do spreadu lub jakiegoś innego upośledzonego wyniku, wtedy znacznie lepiej niż 0,5 może być trudne.
kardynał
@Leo Dokładność treningu wynosi około 0,5. Klasy są równomiernie rozmieszczone, mam klasy 0 i 1.
fspirit
@ kardynał Tak, staram się przewidzieć wynik wygrana / przegrana, bez handicapów. Czy możliwe jest osiągnięcie, powiedzmy, dokładności 0,8 na zestawie testowym?
fspirit
1
@fspirit: Z jednej strony zależy to od sportu i nierówności w umiejętnościach między uczestnikami. Już sama wiedza, kto bierze udział w każdym konkursie, może być silnym predyktorem. Tutaj i tutaj jest kilka powiązanych postów.
kardynał

Odpowiedzi:

17

Przede wszystkim, jeśli twój klasyfikator nie robi nic lepszego niż przypadkowy wybór, istnieje ryzyko, że po prostu nie ma związku między cechami a klasą. Dobrym pytaniem, jakie należy sobie zadać w takiej sytuacji, jest to, czy pogoda lub ekspert domeny może wnioskować o klasie (z dokładnością większą niż losowy klasyfikator) na podstawie danych cech. Jeśli nie, to uzyskanie większej liczby wierszy danych lub zmiana klasyfikatora nie pomoże. Musisz uzyskać więcej danych przy użyciu różnych funkcji.

Z drugiej strony, jeśli uważasz, że informacje potrzebne do wnioskowania o klasie znajdują się już na etykietach, powinieneś sprawdzić, czy twój klasyfikator cierpi z powodu wysokiego błędu lub dużej wariancji.

Aby to zrobić, wykreśl błąd sprawdzania poprawności i błąd zestawu treningowego, jako funkcję przykładów treningowych.

Jeśli linie wydają się zbieżne do tej samej wartości i są bliskie na końcu, twój klasyfikator ma duże odchylenie i dodanie większej ilości danych nie pomoże. Dobrym pomysłem w tym przypadku jest albo zmiana klasyfikatora na taki, który ma większą wariancję, albo po prostu obniżenie parametru regularyzacji bieżącego.

Z drugiej strony, jeśli linie są dość daleko od siebie i masz niski błąd zestawu treningowego, ale wysoki błąd walidacji, to twój klasyfikator ma zbyt dużą wariancję. W takim przypadku bardzo prawdopodobne jest uzyskanie większej ilości danych. Jeśli po uzyskaniu większej ilości danych wariancja nadal będzie zbyt wysoka, możesz zwiększyć parametr regularyzacji.

To są ogólne zasady, których chciałbym użyć, gdy napotkam taki problem.

Twoje zdrowie.

sjm.majewski
źródło
Czy chodziło Ci o błąd zestawu sprawdzania poprawności i błąd zestawu sprawdzania? W przeciwnym razie jestem zdezorientowany. Nie znam nawet błędu zestawu pociągów, ponieważ używam błędu zestawu sprawdzania poprawności do wyboru modelu i sprawdzają wybrany model na zestawie testowym.
fspirit
Nie, mam na myśli błąd ustawiania treningu w miejscu, w którym jest napisany. Błąd szkolenia to liczba błędnie sklasyfikowanych przykładów w zestawie treningowym podzielona przez rozmiar zestawu treningowego. Podobnie błąd zestawu testowego to liczba błędnie sklasyfikowanych przykładów w zestawie testowym podzielona przez rozmiar zestawu szkoleniowego. Możesz także sprawdzić Coursera Machine Machine Class, ( class.coursera.org/ml-2012-002/lecture/index ), zwłaszcza filmy wideo z „ Poradami dotyczącymi stosowania uczenia maszynowego”. Te porady są odpowiednie dla twojej sytuacji.
sjm.majewski
Wziąłem udział w kursie, gdy został on uruchomiony po raz pierwszy. Jeśli chodzi o błąd zestawu treningowego, teraz go też
wypisuję
5

Sugerowałbym cofnięcie się o krok i wykonanie eksploracyjnej analizy danych przed próbą klasyfikacji. Warto sprawdzić swoje cechy indywidualnie, aby sprawdzić, czy istnieje jakikolwiek związek z wynikiem zainteresowania - może to oznaczać, że posiadane funkcje nie mają żadnego związku z etykietami klas. Skąd wiesz, czy funkcje, które posiadasz, będą przydatne?

Możesz zacząć od testowania hipotez lub analizy korelacji w celu sprawdzenia zależności. Generowanie histogramów specyficznych dla klasy dla cech (tj. Wykreślanie histogramów danych dla każdej klasy, dla danej cechy na tej samej osi) może być również dobrym sposobem na wykazanie, czy cecha dobrze rozróżnia dwie klasy.

Należy jednak pamiętać, aby wyniki analizy eksploracyjnej nie wpływały na decyzje dotyczące klasyfikacji. Wybór funkcji do klasyfikacji na podstawie wcześniejszej analizy eksploracyjnej tych samych danych może prowadzić do przeszacowania i tendencyjnego oszacowania wydajności (patrz tutaj dyskusja ), ale analiza eksploracyjna przynajmniej da ci pojęcie, czy zadanie, które próbujesz wykonać, to w ogóle możliwy.

BGreene
źródło
Spróbuję narysować histogramy i zobaczyć, jak będą wyglądać.
fspirit
@BGreene - twój trzeci akapit jest dla mnie trudny. Jeśli analiza eksploracyjna wykazuje, że predyktor x1 jest wysoce skorelowany z wynikiem, czy nie udałoby mu się nie sprawdzić celu tej korelacji, gdyby nie użyć x1 jako przynajmniej predyktora kandydującego w modelu wielowymiarowym?
rolando2
@ rolando2 - Nie sugeruję, aby nie uwzględniać funkcji jako kandydata w ramach procedury wyboru funkcji, ale nie powinieneś wybierać funkcji na podstawie takiej analizy eksploracyjnej, ponieważ to się nadejdzie. Jednak w celu oceny uogólnionej wydajności modelu klasyfikatora wyboru cech należy dokonać w ramach procedury wyboru modelu (tj. W ramach każdej krotności walidacji krzyżowej).
Sugeruję,
3

Dobrze, że podzieliłeś swoje dane na dane treningowe i dane testowe.

Czy Twój błąd treningowy spadł podczas treningu? Jeśli nie, możesz mieć błąd w algorytmie treningowym. Oczekujesz, że błąd w zestawie testowym będzie większy niż błąd w zestawie treningowym, więc jeśli masz niedopuszczalnie wysoki błąd w zestawie treningowym, nie ma nadziei na sukces.

Pozbycie się funkcji może uniknąć niektórych rodzajów przeregulowania. Nie powinno to jednak poprawiać błędu w zestawie treningowym. Niski błąd w zestawie treningowym i wysoki błąd w zestawie testowym może wskazywać na to, że nadmiernie się trenujesz, używając zbyt elastycznego zestawu funkcji. Jednak bezpieczniej jest to sprawdzić poprzez weryfikację krzyżową niż w zestawie testowym. Po wybraniu zestawu funkcji na podstawie zestawu testowego nie jest on już ważny jako zestaw testowy.

Douglas Zare
źródło
Używam osobnego zestawu pociągu, walidacji i testów. Wybieram hiperparamy na podstawie błędu zestawu sprawdzania poprawności, a następnie stosuję wybrany model do zestawu testowego. Wątpię, czy w algorytmie szkoleniowym występuje błąd, ponieważ używam gotowej biblioteki lib.
fspirit
Musiałeś jakoś podłączyć tę bibliotekę do swoich danych. Zawsze sprawdzaj, czy trenujesz poprawnie. Jeśli otrzymujesz wskaźnik błędu szkolenia w wysokości50%oznacza to, że twoje funkcje są okropne, albo nie trenujesz prawidłowo.
Douglas Zare
W opcji „Funkcje są okropne” uwzględniam przypadek, w którym nie ma rozwiązania. Jednak bardzo w to wątpię. Nie znam sportu, w którym wiem, że nie ma sposobu, aby przekonać się, że jeden zawodnik jest faworytem nad drugim. Jest to nawet możliwe w nożyczkach papierowych.
Douglas Zare
1

Dlaczego nie zastosować zasady „najpierw spójrz na wykresy danych”. Jedną rzeczą, którą możesz zrobić, jest wykres rozrzutu 2 D dwóch klasowych gęstości warunkowych dla dwóch zmiennych towarzyszących. Jeśli spojrzysz na nie i nie zauważysz praktycznie żadnej separacji, która może wskazywać na brak przewidywalności, możesz to zrobić ze wszystkimi współzmiennymi. To daje kilka pomysłów na temat możliwości wykorzystania tych zmiennych towarzyszących do przewidywania. Jeśli widzisz nadzieję, że zmienne te mogą się trochę rozdzielić, zacznij myśleć o liniowych dyskryminatorach, kwadratowych dyskryminatorach, dyskryminacji jądra, regularyzacji, klasyfikacji drzew, SVM itp.

Michael R. Chernick
źródło
Przepraszam, czy funkcja kowariancji == jest dostępna?
fspirit