Rosnąca liczba funkcji powoduje spadek dokładności, ale wzrost wstępnego / wycofania

15

Jestem nowy w uczeniu maszynowym. W tej chwili używam klasyfikatora Naive Bayes (NB) do klasyfikowania małych tekstów w 3 klasach jako pozytywne, negatywne lub neutralne, używając NLTK i python.

Po przeprowadzeniu niektórych testów z zestawem danych złożonym z 300 000 instancji (16 924 pozytywów 7 477 negatywów i 275 599 neutralnych) stwierdziłem, że kiedy zwiększam liczbę funkcji, dokładność spada, ale precyzja / przywołanie dla klas dodatnich i ujemnych rośnie. czy jest to normalne zachowanie dla klasyfikatora NB? Czy możemy powiedzieć, że lepiej byłoby korzystać z większej liczby funkcji?

Niektóre dane:

Features: 50    
Accuracy: 0.88199
F_Measure Class Neutral 0.938299
F_Measure Class Positive 0.195742
F_Measure Class Negative 0.065596

Features: 500   
Accuracy: 0.822573
F_Measure Class Neutral 0.904684
F_Measure Class Positive 0.223353
F_Measure Class Negative 0.134942

Z góry dziękuję...

Edytuj 2011/11/26

Testowałem 3 różne strategie wyboru funkcji (MAXFREQ, FREQENT, MAXINFOGAIN) z klasyfikatorem Naive Bayes. Najpierw są dokładności i miary F1 na klasę:

wprowadź opis zdjęcia tutaj

Następnie wykreśliłem błąd pociągu i błąd testu z przyrostowym zestawem treningowym, gdy używam MAXINFOGAIN z funkcjami 100 najlepszych i 1000:

wprowadź opis zdjęcia tutaj

Wydaje mi się więc, że chociaż najwyższą dokładność osiąga się przy FREQENT, najlepszym klasyfikatorem jest ten, który używa MAXINFOGAIN, prawda ? Podczas korzystania ze 100 najlepszych funkcji mamy błąd (błąd testu jest zbliżony do błędu pociągu), a dodanie kolejnych przykładów szkolenia nie pomoże. Aby to poprawić, potrzebujemy więcej funkcji. Dzięki 1000 funkcjom stronniczość zmniejsza się, ale błąd rośnie ... Czy to w porządku? Czy powinienem dodać więcej funkcji? Naprawdę nie wiem, jak to interpretować ...

Dzięki jeszcze raz...

kanzen_master
źródło
1
To zależy od tego, co masz na myśli przez „najlepszy klasyfikator”. Jeśli Twoim zadaniem jest zbudowanie klasyfikatora z ogólnie dobrą dokładnością, wybrałbym CZĘSTO. Z drugiej strony, jeśli, podobnie jak w przypadku większości rzadkich zadań klasyfikacji klas, chcesz lepiej sklasyfikować rzadką klasę (może to być klasa „negatywna” lub „pozytywna”), wybrałbym MAXINFOGAIN. Myślę, że twoja interpretacja krzywych uczenia się jest poprawna: ze 100 cechami masz uprzedzenia i możesz je dodać, z 1000 masz wariancję i możesz je usunąć. Być może możesz wypróbować kompromis między 100 a 1000 funkcji, aby uzyskać lepsze wyniki.
Simone
Dzięki za pomoc, Simone! Zrozumiałem wszystko oprócz ostatniej części ... Czy możesz mi powiedzieć, jak widzisz dużą wariancję z funkcjami 1000? Ponieważ różnica między błędami testu i pociągu nie wydaje się być aż tak duża, nadal wydaje mi się to stronnicze ...
kanzen_master 26.11.11
Podałem kilka przykładów w mojej odpowiedzi. Gdy krzywe nie są tak blisko, problem jest klasyfikowany jako o dużej zmienności . W twoim przypadku, może powiedziałem ci, ponieważ przy mniejszej liczbie funkcji uzyskujesz lepszą wydajność, a więc przy 1000 funkcji prawdopodobnie będzie to problem dużej zmienności. Zamiast sporządzać wykresy wyników algorytmów wyboru funkcji z pomiarami obliczonymi na zestawie treningowym, spróbuj podzielić dane na trening (2/3 z nich) i sprawdzić poprawność, a następnie dokonaj wyboru funkcji na zestawie treningowym i oceń go na zestawie testowym . Maksymalnie powinieneś znaleźć się na środku fabuły.
Simone
Dziękuję za odpowiedź. Trzeci przykład twojego zaktualizowanego postu (dobre wyniki, trening, krzywe błędów testowych nie są ani zbyt blisko, ani zbyt daleko) wygląda jak krzywa uczenia się, którą wykreśliłem przy użyciu 1000 funkcji, więc pomyślałem, że użycie około 1000 funkcji byłoby „dobrym wynikiem”. Jednak w tym przypadku błąd jest wyższy, co nie jest dobre. Ale patrząc tylko na odległość między krzywymi, nie widzę dużej wariancji z 1000 cechami ... (Nawiasem mówiąc, już dzielę dane na 2/3 jako zestaw treningowy, 1/3 jako zestaw testowy, wykonywanie funkcji wybór na zestawie szkoleniowym i ocena na zestawie testowym ...)
kanzen_master
1
DOBRZE. Jestem całkiem nowy w uczeniu się krzywych, a twoje przykłady były naprawdę interesujące i pozwoliły mi zdobyć wgląd w nie. Tak więc, dzięki D T. Tak, w obu przypadkach może występować stronniczość. Według mnie masz bardzo wypaczony zestaw danych i zamiast testowania dokładności ważne jest, aby spojrzeć na pomiar F. Patrząc na swoje działki, wydaje się, że im więcej funkcji masz, tym lepiej; w rzeczywistości poprawia się miara F. Słyszałem, że w klasyfikacji tekstu, jeśli cechy są częstotliwością słów w tekście, często używa się wielu funkcji; btw. Nie jestem do tego przyzwyczajony i nie mogę powiedzieć nic więcej.
Simone

Odpowiedzi:

18

Dokładność a miara F.

Przede wszystkim, kiedy używasz metryki, powinieneś wiedzieć, jak ją zagrać. Dokładność mierzy stosunek poprawnie sklasyfikowanych wystąpień we wszystkich klasach. Oznacza to, że jeśli jedna klasa występuje częściej niż inna, wówczas dokładność wynikowa jest wyraźnie zdominowana przez dokładność klasy dominującej. W twoim przypadku, jeśli zbuduje się Model M, który po prostu przewiduje „neutralny” dla każdej instancji, wynikowa dokładność będzie

zadodo=nmiutrzal(nmiutrzal+posjatjavmi+nmisolzatjavmi)=0,9188

Dobrze, ale bezużytecznie.

Tak więc dodanie funkcji wyraźnie poprawiło siłę NB do różnicowania klas, ale przewidując „pozytywne” i „negatywne”, jedna z nich źle klasyfikuje neutralne, a zatem dokładność spada (z grubsza mówiąc). To zachowanie jest niezależne od NB.

Mniej więcej funkcje?

Zasadniczo nie jest lepiej korzystać z większej liczby funkcji, ale używać odpowiednich funkcji. Im więcej funkcji, tym lepiej, o ile algorytm wyboru cech ma więcej możliwości znalezienia optymalnego podzbioru (proponuję zbadanie: wybór cech z crossvalidated ). Jeśli chodzi o NB, szybkim i solidnym (ale mniej niż optymalnym) podejściem jest wykorzystanie InformationGain (Ratio) do sortowania funkcji w malejącej kolejności i wybierania najwyższego k.

Ponownie ta rada (oprócz InformationGain) jest niezależna od algorytmu klasyfikacji.

EDYCJA 27.11.11

Było wiele zamieszania w odniesieniu do stronniczości i wariancji, aby wybrać odpowiednią liczbę funkcji. Dlatego polecam przeczytać pierwsze strony tego samouczka: Kompromis odchylenie-odchylenie . Kluczową istotą jest:

  • High Bias oznacza, że ​​model jest mniej niż optymalny, tj. Błąd testu jest wysoki (niedopasowany, jak to ujęła Simone)
  • Wysoka wariancja oznacza, że ​​model jest bardzo wrażliwy na próbkę użytą do zbudowania modelu . Oznacza to, że błąd w dużym stopniu zależy od zastosowanego zestawu treningowego, a zatem wariancja błędu (oceniana w różnych fałdach walidacji krzyżowej) będzie się bardzo różnić. (przeregulowanie)

Wykreślone krzywe uczenia rzeczywiście wskazują błąd systematyczny, ponieważ wykreślono błąd. Jednak nie widać wariancji, ponieważ przedział ufności błędu w ogóle nie jest wykreślany.

Przykład: wykonując 3-krotną walidację krzyżową 6 razy (tak, zalecane jest powtórzenie z innym podziałem danych, Kohavi sugeruje 6 powtórzeń), otrzymasz 18 wartości. Oczekiwałbym teraz, że ...

  • Przy niewielkiej liczbie funkcji średni błąd (odchylenie) będzie niższy, jednak wariancja błędu (z 18 wartości) będzie wyższa.
  • przy dużej liczbie funkcji średni błąd (odchylenie) będzie wyższy, ale wariancja błędu (18 wartości) niższa.

Takie zachowanie błędu / stronniczości jest dokładnie tym, co widzimy na twoich działkach. Nie możemy wypowiedzieć się na temat wariancji. To, że krzywe są blisko siebie, może wskazywać, że zestaw testowy jest wystarczająco duży, aby pokazać te same cechy, co zestaw treningowy, a zatem, że zmierzony błąd może być wiarygodny, ale jest to (przynajmniej o ile rozumiem it) niewystarczające, aby wypowiedzieć się na temat wariancji (błędu!).

Dodając coraz więcej przykładów szkoleń (utrzymując stały rozmiar zestawu testów), oczekiwałbym, że wariancja obu podejść (mała i duża liczba funkcji) zmniejszy się.

Och, i nie zapomnij obliczyć informacji o wyborze funkcji przy użyciu tylko danych z próbki treningowej! Można pokusić się o wykorzystanie pełnych danych do wyboru funkcji, a następnie przeprowadzić partycjonowanie danych i zastosować walidację krzyżową, ale doprowadzi to do przeregulowania. Nie wiem, co zrobiłeś, to tylko ostrzeżenie, którego nigdy nie należy zapominać.

steffen
źródło
1
Dziękuję bardzo za odpowiedź, bardzo jasne wyjaśnienie. Używam maksymalnego przyrostu informacji jako strategii wyboru funkcji i testuję przy użyciu 5-krotnej weryfikacji krzyżowej. Wydaje mi się, że aby dowiedzieć się, które najlepsze cechy k należy podjąć, muszę iteracyjnie przetestować algorytm, zwiększając liczbę funkcji za każdym razem i biorąc wartość k, która daje najwyższą wartość f_score. Wydaje mi się jednak, że „górna k” może się zmienić w zależności od zestawu danych ... prawda?
kanzen_master
1
Poprawny. Ale jeśli nowy zestaw danych jest podobny do starego (te same funkcje z tymi samymi dystrybucjami), k pozostaje bez zmian. Możesz dodać algorytm genetyczny, aby szybciej przeszukiwać przestrzeń możliwych rozwiązań lub (jeszcze lepiej) użyć algorytmu genetycznego, aby znaleźć optymalny podzbiór funkcji niezależny od InformationGain ... tak wiele sposobów.
steffen
1
Zgodnie z wykładami Stanforda, jeśli widzisz dobrze oddzielone krzywe treningowe i testowe zmieniające liczbę przykładów treningów, to tak naprawdę oznacza to, że istnieje wariancja. Oczywiście lepszym podejściem byłoby oszacowanie przedziałów ufności.
Simone
1
@DT 1. Nie znam wykładu, dlatego nie mogę połączyć wyjaśnienia Andrewga z moim, przepraszam. 2. Nie. Mała liczba cech => przeregulowanie => niska stronniczość, duża wariancja. Duża liczba funkcji => niedopasowanie => duże odchylenie, niska wariancja. Naprawdę proponuję wykreślić wariancję błędu fałdów cv dla różnej liczby funkcji i przykładów treningowych.
steffen
2
1. steffen, wykład jest dostępny tutaj: ml-class.org/course/video/preview_list (Część X, sekcja „Krzywe uczenia się”) 2. Rozumiem. Myślałem, że gdy wiele funkcji poznanych podczas treningu => model się skomplikuje i przerwie zestaw treningowy => Wariancja ...
kanzen_master 27.11.11
5

Aby dowiedzieć się, czy warto skorzystać z większej liczby funkcji, nakreśliłbym krzywe uczenia się. Myślę, że zostało to jasno wyjaśnione w 10. części lekcji uczenia maszynowego Stanforda, zatytułowanej „Porady dotyczące stosowania uczenia maszynowego”, którą można znaleźć tutaj: http://www.ml-class.org/course/video/preview_list .

Kreśląc krzywe uczenia się, które możesz zrozumieć, jeśli twoim problemem jest albo wysoka stronniczość, albo duża wariancja. Tak długo, jak zwiększysz liczbę przykładów treningu, powinieneś wykreślić błąd szkolenia i testu (tj. 1-dokładność), ten ostatni jest błędem twojego klasyfikatora oszacowanym na innym zbiorze danych. Jeśli te krzywe są blisko siebie, masz problem z dużym odchyleniem i prawdopodobnie byłoby korzystne dodanie większej liczby funkcji. Z drugiej strony, jeśli twoje krzywe są dość rozdzielone, o ile zwiększasz liczbę przykładów treningu, masz problem z dużą wariancją. W takim przypadku należy zmniejszyć liczbę używanych funkcji.

Edytować

λ aby dostroić moc regularyzacji.

λ

Duża wariancja

λ

Wysoka stronniczość

λ=1

Dobry wynik

Simone
źródło
Świetny! Dziękuję Ci bardzo! Ponieważ obie odpowiedzi były bardzo pomocne, ale nie mogę oznaczyć obu jako odpowiedzi, zaznaczę pierwszą jako odpowiedź. Ale to zdecydowanie najlepszy sposób na sprawdzenie, tak myślę.
kanzen_master
Nawiasem mówiąc, próbuję wykreślić krzywą uczenia się klasyfikatora, który wykorzystuje 100 najlepszych funkcji z wynikiem Maksymalnego zysku informacji. Zwiększając rozmiar zestawu danych treningowych, chcę wykreślić błąd szkolenia i błąd testu. Jakie powinny być rozmiary początkowego zestawu danych pociągu (stopniowo zwiększanego) i zestawu danych testowych (statyczny dla wszystkich testów)?
Jeszcze
2
Podziel zestaw danych na zestaw szkoleniowy i testowy. Zacznij od bardzo niewielu rekordów treningowych, a następnie kontynuuj dodawanie rekordów. Dla każdej iteracji obliczyć błąd zestawu treningowego z rekordami użytymi do wyszkolenia klasyfikatora, a następnie obliczyć błąd zestawu testowego zawsze ze wszystkimi rekordami testowymi. Wiem, że jest to standardowa metoda stosowana w powszechnej praktyce. Byłoby interesujące zobaczyć twoje wyniki! Pozdrawiam, Simone.
Simone,
1
Simone, zaktualizowałem pierwszy post z pewnymi wynikami dokładności, miary F1 i krzywymi uczenia się, a moją interpretacją na dole, czy mógłbyś to sprawdzić? Dzięki ...
kanzen_master