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ę:
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:
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...
źródło
Odpowiedzi:
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
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:
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 ...
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ć.
źródło
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ć
źródło