Który klasyfikator uczenia maszynowego wybrać ogólnie? [Zamknięte]


207

Załóżmy, że pracuję nad jakimś problemem klasyfikacji. (Wykrywanie oszustw i spamowanie w komentarzach to dwa problemy, nad którymi obecnie pracuję, ale ogólnie jestem ciekaw jakiegokolwiek zadania klasyfikacyjnego).

Skąd mam wiedzieć, którego klasyfikatora powinienem użyć?

  1. Drzewo decyzyjne
  2. SVM
  3. Bayesian
  4. Sieć neuronowa
  5. Najbliżsi sąsiedzi K.
  6. Q-learning
  7. Algorytm genetyczny
  8. Procesy decyzyjne Markowa
  9. Konwolucyjne sieci neuronowe
  10. Regresja liniowa lub regresja logistyczna
  11. Wzmocnienie, pakowanie, zabijanie
  12. Losowe wspinanie pod górę lub symulowane wyżarzanie
  13. ...

W jakich przypadkach jeden z nich jest „naturalnym” pierwszym wyborem i jakie są zasady wyboru tego pierwszego?

Przykłady rodzaju odpowiedzi, których szukam (z książki Wprowadzenie do wyszukiwania informacji Manninga i in. ):

za. Jeśli twoje dane są oznaczone, ale masz ich tylko ograniczoną ilość, powinieneś użyć klasyfikatora o wysokim odchyleniu (na przykład Naive Bayes) .

Zgaduję, że dzieje się tak, ponieważ klasyfikator o wyższym odchyleniu będzie miał mniejszą wariancję, co jest dobre z powodu małej ilości danych.

b. Jeśli masz mnóstwo danych, klasyfikator nie ma tak wielkiego znaczenia, więc prawdopodobnie powinieneś po prostu wybrać klasyfikator o dobrej skalowalności.

  1. Jakie są inne wytyczne? Nawet odpowiedzi typu „jeśli będziesz musiał wyjaśnić swój model pewnej osobie wyższej kadry kierowniczej, to może powinieneś użyć drzewa decyzyjnego, ponieważ reguły decyzyjne są dość przejrzyste” są dobre. Jednak mniej dbam o kwestie związane z implementacją / biblioteką.

  2. Ponadto, w przypadku nieco osobnego pytania, oprócz standardowych klasyfikatorów bayesowskich, czy istnieją „standardowe najnowocześniejsze” metody wykrywania spamu w komentarzach (w przeciwieństwie do spamu e-mail)?


7
W odpowiedzi na Twoje „najlepsze miejsce do zadawania tego pytania” możesz również spróbować stats.stackexchange.com
jxramos,

Odpowiedzi:


94

wprowadź opis zdjęcia tutaj

Przede wszystkim musisz zidentyfikować swój problem. To zależy od tego, jakie masz dane i jakie jest twoje pożądane zadanie.

Jeśli jesteś Predicting Category:

  • Ty masz Labeled Data
    • Musisz postępować zgodnie Classification Approachz algorytmami
  • Nie masz Labeled Data
    • Musisz iść Clustering Approach

Jeśli jesteś Predicting Quantity:

  • Musisz iść Regression Approach

Inaczej

  • Możesz iść Dimensionality Reduction Approach

W każdym z wyżej wymienionych podejść istnieją różne algorytmy. Wybór konkretnego algorytmu zależy od wielkości zestawu danych.

Źródło: http://scikit-learn.org/stable/tutorial/machine_learning_map/


60

Może być potrzebny wybór modelu za pomocą walidacji krzyżowej .

Krzyżowa walidacja

To, co robisz, polega na podzieleniu zestawu danych na k nie nakładających się podzbiorów (fałdach), wytrenowaniu modelu przy użyciu fałdów k-1 i przewidywaniu jego wydajności na podstawie pominiętego fałdu. Robisz to dla każdej możliwej kombinacji foldów (najpierw pozostaw 1. fold out, następnie 2nd, ..., następnie kth i trenuj z pozostałymi foldami). Po zakończeniu szacujesz średnią wydajność wszystkich fałd (być może także wariancję / standardowe odchylenie wydajności).

Sposób wyboru parametru k zależy od czasu, jaki masz. Zwykle wartości dla k wynoszą 3, 5, 10 lub nawet N, gdzie N jest rozmiarem twoich danych (jest to to samo, co krzyżowa walidacja bez pomijania ). Wolę 5 lub 10.

Wybór modelu

Załóżmy, że masz 5 metod (ANN, SVM, KNN itp.) I 10 kombinacji parametrów dla każdej metody (w zależności od metody). Musisz po prostu przeprowadzić weryfikację krzyżową dla każdej kombinacji metod i parametrów (5 * 10 = 50) i wybrać najlepszy model, metodę i parametry. Następnie ponownie trenujesz z najlepszą metodą i parametrami dla wszystkich danych i masz ostateczny model.

Jest jeszcze kilka rzeczy do powiedzenia. Jeśli na przykład użyjesz wielu metod i kombinacji parametrów dla każdej z nich, bardzo prawdopodobne jest, że się dopasujesz. W takich przypadkach musisz użyć zagnieżdżonej weryfikacji krzyżowej .

Zagnieżdżona weryfikacja krzyżowa

W zagnieżdżonej walidacji krzyżowej przeprowadza się walidację krzyżową na algorytmie wyboru modelu.

Ponownie najpierw podzielisz swoje dane na k fałd. Po każdym kroku wybierasz k-1 jako dane treningowe, a pozostałe jako dane testowe. Następnie uruchamiasz wybór modelu (procedurę wyjaśnioną powyżej) dla każdej możliwej kombinacji tych k fałd. Po zakończeniu będziesz mieć k modeli, po jednym dla każdej kombinacji fałd. Następnie testujesz każdy model z pozostałymi danymi testowymi i wybierasz najlepszy. Ponownie, po ostatnim modelu trenujesz nowy z tą samą metodą i parametrami na wszystkich posiadanych danych. To twój ostateczny model.

Oczywiście istnieje wiele odmian tych metod i innych rzeczy, o których nie wspomniałem. Jeśli potrzebujesz więcej informacji na ich temat, poszukaj publikacji na te tematy.


5
Tak, wiem o walidacji krzyżowej - zastanawiałem się więcej o a priori powodach wyboru określonego klasyfikatora (a potem mogłem użyć walidacji krzyżowej, aby dostroić niektóre parametry lub wybrać między mniejszym zestawem klasyfikatorów). W każdym razie dzięki!
LM.

45

Książka „ OpenCV ” ma dwie świetne strony na tej stronie 462-463 . Przeszukanie podglądu Amazon słowa „dyskryminujące” (prawdopodobnie także książek Google) pozwoli ci zobaczyć te strony. Te dwie strony to największy klejnot, jaki znalazłem w tej książce.

W skrócie:

  • Przyspieszenie - często skuteczne, gdy dostępna jest duża ilość danych treningowych .

  • Losowe drzewa - często bardzo skuteczne i mogą również wykonywać regresję .

  • Najbliżsi sąsiedzi K - najprostsza rzecz, którą możesz zrobić, często skuteczna, ale powolna i wymagająca dużej ilości pamięci .

  • Sieci neuronowe - Powolny w trenowaniu, ale bardzo szybki w działaniu , wciąż optymalny pod względem rozpoznawania liter .

  • SVM - jeden z najlepszych z ograniczonymi danymi , ale przegrywający z przyspieszaniem lub losowymi drzewami tylko wtedy, gdy dostępne są duże zestawy danych.


39

Do rozważenia przy wyborze algorytmu należy zaliczyć:

  1. Czy musisz trenować stopniowo (w przeciwieństwie do treningu partiami)?

    Jeśli musisz często aktualizować klasyfikator o nowe dane (lub masz mnóstwo danych), prawdopodobnie będziesz chciał używać Bayesian. Sieci neuronowe i SVM muszą pracować nad danymi treningowymi za jednym razem.

  2. Czy dane składa się z kategorycznym tylko, czy numeryczna tylko, czy oba ?

    Myślę, że Bayesian najlepiej działa z danymi kategorialnymi / dwumianowymi. Drzewa decyzyjne nie mogą przewidzieć wartości liczbowych.

  3. Czy ty lub twoi odbiorcy powinniście zrozumieć, jak działa klasyfikator?

    Używaj drzew bayesowskich lub decyzyjnych, ponieważ można je łatwo wyjaśnić większości ludzi. Sieci neuronowe i SVM to „czarne skrzynki” w tym sensie, że tak naprawdę nie można zobaczyć, jak klasyfikują dane.

  4. Jakiej prędkości klasyfikacji potrzebujesz?

    Maszyny SVM są szybkie, jeśli chodzi o klasyfikację, ponieważ muszą jedynie określić, po której stronie „linii” znajdują się Twoje dane. Drzewa decyzyjne mogą być powolne, szczególnie gdy są złożone (np. Wiele gałęzi).

  5. Złożoność .

    Sieci neuronowe i SVM mogą obsługiwać złożoną klasyfikację nieliniową.


2
Ten rozdział książki może dostarczyć więcej informacji na temat złożoności nlp.stanford.edu/IR-book/html/htmledition/…
supermus

31

Jak często twierdzi profesor Andrew Ng: zawsze zaczynaj od implementacji szorstkiego, brudnego algorytmu, a następnie iteracyjnie go udoskonalaj .

Do klasyfikacji, Naive Bayes jest dobrym początkiem, ponieważ ma dobre wyniki, jest wysoce skalowalny i może dostosować się do prawie każdego rodzaju zadania klasyfikacyjnego. Również 1NN (K-Nearest Neighbors z tylko 1 sąsiadem) jest bezproblemowym algorytmem najlepszego dopasowania (ponieważ dane będą modelem, a zatem nie musisz dbać o dopasowanie wymiarów granicy decyzji), jedyne Problemem jest koszt obliczeń (kwadratowy, ponieważ musisz obliczyć macierz odległości, więc może nie być dobrze dopasowany do danych wielowymiarowych).

Kolejnym dobrym algorytmem początkowym są Lasy Losowe (złożone z drzew decyzyjnych), jest on wysoce skalowalny do dowolnej liczby wymiarów i ogólnie ma całkiem akceptowalne wyniki. Wreszcie, istnieją algorytmy genetyczne , które można skalować w znakomity sposób do dowolnego wymiaru i dowolnych danych przy minimalnej wiedzy o samych danych, przy czym najbardziej minimalną i najprostszą implementacją jest mikrobiologiczny algorytm genetyczny (tylko jedna linia kodu C! Inman Harvey w 1996), a jednym z najbardziej złożonych jest CMA-ES i MOGA / e-MOEA.

I pamiętaj, że często nie możesz naprawdę wiedzieć, co będzie działać najlepiej na twoich danych, zanim naprawdę wypróbujesz algorytmy.

Na marginesie, jeśli chcesz, aby struktura teoretyczna przetestowała twoją hipotezę i algorytmy wydajności teoretycznej dla danego problemu, możesz użyć struktury uczenia się PAC (prawdopodobnie w przybliżeniu poprawnej) (uwaga: jest bardzo abstrakcyjna i złożona!), Ale Podsumowując, sedno uczenia się PAC mówi, że powinieneś używać mniej złożonego, ale wystarczająco złożonego (złożoność jest maksymalną wymiarowością, którą algo może zmieścić) algorytmu, który może dopasować twoje dane. Innymi słowy, użyj brzytwy Ockhama.


11

Sam Roweis zwykł mawiać , że powinieneś wypróbować naiwne Bayesa, regresję logistyczną, k-najbliższego sąsiada i liniową dyskryminację Fishera.


8

Podejrzewam, że zawsze najpierw uruchamiasz podstawowe klasyfikatory, aby uzyskać pewien sens swoich danych. Najczęściej (przynajmniej z mojego doświadczenia) były wystarczająco dobre.

Jeśli więc nadzorujesz dane, wytrenuj klasyfikator Naive Bayes. Jeśli masz dane bez nadzoru, możesz wypróbować k-średnich.

Innym zasobem jest jeden z filmów z wykładu z serii filmów Stanford Machine Learning , które oglądałem jakiś czas temu. Wydaje mi się, że w wideo 4 lub 5 wykładowca omawia niektóre ogólnie przyjęte konwencje podczas szkolenia klasyfikatorów, zalet / kompromisów itp.


1
Twierdzenie „No Lunch” stwierdza, że ​​nie ma jednego modelu, który najlepiej działałby na każdy problem. Założenia doskonałego modelu dla jednego problemu mogą nie uwzględniać innego problemu, dlatego w uczeniu maszynowym powszechne jest wypróbowanie wielu modeli i znalezienie takiego, który najlepiej pasuje do konkretnego problemu.
msarafzadeh

5

Zawsze należy brać pod uwagę kompromis wnioskowania a przewidywania .

Jeśli chcesz zrozumieć złożoną relację występującą w twoich danych, powinieneś zastosować bogaty algorytm wnioskowania (np. Regresja liniowa lub lasso). Z drugiej strony, jeśli interesuje Cię tylko wynik, możesz zastosować wysoko wymiarowe i bardziej złożone (ale mniej interpretowalne) algorytmy, takie jak sieci neuronowe.


3

Wybór algorytmu zależy od scenariusza oraz rodzaju i wielkości zestawu danych. Istnieje wiele innych czynników.

Jest to krótki ściągawka do podstawowego uczenia maszynowego.

Tutaj możesz zweryfikować swój scenariusz za pomocą prostego ściągawki


-2

Przede wszystkim zależy to od rodzaju problemu, z którym masz do czynienia, czy jest to klasyfikacja czy regresja. Następnie mądrze wybierz swój model. Zależy to od konkretnego modelu, jeden konkretny model przewyższa inne modele. Załóżmy, że pracujesz nad wine_dataset z biblioteki sklearn i najpierw próbowałeś trenować dane za pomocą svm jądra z liniową i uzyskasz pewną dokładność, a potem myślisz, że to nie jest satysfakcjonujące, więc próbowałeś trenować swoje dane za pomocą DecisionTreeClassifier () a następnie próbowałeś z RandomForestClassifier (). Po tym, która dokładność będzie lepsza lub możesz powiedzieć, że pasuje do twoich danych, możesz dojść do wniosku. Jest tak mała różnica składniowa, którą można znaleźć, zmieniając model testowania. Tak więc najlepiej i dobrze rozumiem problem.


1
Pytanie OP (oryginalne plakaty) brzmiało: skąd mam wiedzieć, którego klasyfikatora powinienem użyć? Co stwierdza, że ​​szukają algorytmu klasyfikacji . Przed udzieleniem odpowiedzi prosimy o dokładne przeczytanie pytania.
Vetrivel PS
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.