O co chodzi z uczeniem maszynowym w praktyce?

11

Jestem nowicjuszem w uczeniu maszynowym (także niektóre statystyki), od dłuższego czasu uczę się wiedzy (algorytmy uczenia nadzorowanego / bez nadzoru, odpowiednie metody optymalizacji, regularyzacje, niektóre filozofie (takie jak kompromis odchylenie biasu?). Wiem, że bez prawdziwej praktyki nie uzyskałbym głębokiego zrozumienia tych rzeczy związanych z uczeniem maszynowym.

Zacznę więc od pewnego problemu z klasyfikacją rzeczywistych danych, na przykład odręcznej klasyfikacji cyfr (MNIST). Ku mojemu zaskoczeniu, bez uczenia się / inżynierii cech , dokładność osiąga 0,97 przy użyciu klasyfikatora losowego lasu z wartościami surowych pikseli jako danych wejściowych. Próbowałem także innych algorytmów uczenia się, takich jak SVM, LR z dostrajanymi parametrami.

Potem się zgubiłem, czy byłoby to zbyt łatwe, czy coś mi tu brakuje? Wystarczy pobrać algorytm uczenia się z zestawu narzędzi i dostroić niektóre parametry?

Gdyby w praktyce chodziło o uczenie maszynowe, straciłbym zainteresowanie tym zagadnieniem. Przez kilka dni myślałem i czytałem blogi i doszedłem do kilku wniosków:

  1. Najważniejszą częścią uczenia maszynowego w praktyce jest inżynieria funkcji , to znaczy biorąc pod uwagę dane, znaleźć lepszą reprezentację funkcji.

  2. Ważny jest również to, który algorytm uczenia się ma być użyty, także dostrajanie parametrów, ale ostateczny wybór dotyczy bardziej eksperymentów.

Nie jestem pewien, czy rozumiem to poprawnie, mając nadzieję, że każdy może mnie poprawić i dać mi sugestie dotyczące uczenia maszynowego w praktyce.

loganecols
źródło
1
Nie sądzę, bym mógł odpowiedzieć na twoje pytanie w całości, ale chciałbym cię uspokoić, że istnieje wiele problemów, w których algorytmy / narzędzia są niezadowalające oprócz niskiej jakości funkcji (z mojego doświadczenia wynika, że ​​nauki społeczne są powszechne w obu sytuacjach). Nie sądzę, żeby to była twoja jedyna troska, ale wydaje ci się, że odczuwasz dyskomfort z powodu łatwości swoich projektów.
1
@Mathew, tak, zgubiłem się nie wiedząc od czego zacząć, kiedy mam do czynienia z jednym prawdziwym problemem, czy powinienem analizować dane, aby poznać naturę, aby móc wyodrębnić przydatne funkcje lub po prostu wybrać algorytm uczenia się i uruchomić?
awokado
Nie
wsiadłbym

Odpowiedzi:

12

Uczenie maszynowe (ML) w praktyce zależy od tego, jaki jest cel robienia ML. W niektórych sytuacjach wystarczające może być solidne wstępne przetwarzanie i stosowanie zestawu gotowych metod ML. Jednak nawet w takich sytuacjach ważne jest, aby zrozumieć, jak działają te metody, aby móc rozwiązywać problemy, gdy coś pójdzie nie tak. Jednak ML w praktyce może być czymś więcej, a MNIST jest dobrym przykładem tego.

Zwodniczo łatwo jest uzyskać „dobrą” wydajność zestawu danych MNIST. Na przykład, zgodnie z witryną Yann Le Cun na temat wydajności MNIST , K najbliższych sąsiadów (K-NN) z metryką odległości euklidesowej (L2) również ma wskaźnik błędu 3%, taki sam jak twój domyślny losowy las. L2 K-NN jest tak prosty, jak tylko algorytm ML. Z drugiej strony najlepszy Yann, Yoshua, Leon i Patrick, pierwszy rzut oka na ten zestaw danych, LeNet-4, ma poziom błędu 0,7%, 0,7% to mniej niż jedna czwarta z 3%, więc jeśli włożysz ten system do ćwiczyć czytanie odręcznych cyfr, naiwny algorytm wymaga czterech razy więcej wysiłku człowieka, aby naprawić swoje błędy.

Splotowa sieć neuronowa, z której korzystali Yann i koledzy, jest dopasowana do zadania, ale nie nazwałbym tego „inżynierią cech”, tyle że starałbym się zrozumieć dane i zakodować to zrozumienie w algorytmie uczenia się.

Jakie są lekcje:

  1. Łatwo jest osiągnąć naiwny poziom wydajności przy użyciu metody „od razu po wyjęciu z pudełka” i dobrego przetwarzania wstępnego. Powinieneś zawsze to robić, abyś wiedział, gdzie jest punkt odniesienia i czy ten poziom wydajności jest wystarczająco dobry dla twoich wymagań. Uważaj jednak, często gotowe do użycia metody ML są „kruche”, tj. Zaskakująco wrażliwe na przetwarzanie wstępne. Po przeszkoleniu wszystkich gotowych metod prawie zawsze dobrym pomysłem jest ich spakowanie.
  2. Trudne problemy wymagają wiedzy specyficznej dla domeny lub znacznie większej ilości danych lub obu tych rozwiązań. Inżynieria funkcji oznacza wykorzystanie wiedzy specyficznej dla domeny, aby pomóc algorytmowi ML. Jeśli jednak masz wystarczającą ilość danych, algorytm (lub podejście), które mogą wykorzystać te dane, aby nauczyć się złożonych funkcji, oraz ekspert stosujący ten algorytm, możesz czasem zrezygnować z tej wiedzy (np . Wyzwanie Kaggle Merck ). Czasami eksperci od domen mylą się co do dobrych funkcji; więc więcej danych i wiedzy ML jest zawsze pomocne.
  3. Weź pod uwagę poziom błędu, a nie dokładność. Metody ML z dokładnością 99% powodują połowę błędów, co robi jeden z dokładnością 98%; czasami jest to ważne.
qdjm
źródło
2
+1, wielkie dzięki. Gdy czytam twoją odpowiedź, jeśli nie mam wiedzy na temat konkretnej dziedziny, aby wykonać inżynierię funkcji, powinienem skoncentrować się na wynalezieniu dobrych metod uczenia funkcji przy użyciu danych i wypróbować różne algorytmy uczenia się.
awokado
@loganecolss Możesz także przeczytać, co zrobili inni ludzie na podobnych danych, lub porozmawiać z ekspertem w dziedzinie.
qdjm
7

Myślę, że przykłady, które można znaleźć na blogu lub stronach internetowych, to przykłady, w których wiadomo, że popularne metody działają dobrze (nawet jeśli można je oczywiście ulepszyć).

Moja specjalizacja to inżynieria funkcji i mogę powiedzieć, że często standardowe algorytmy w ogóle nie działają dobrze. (Nie mam żadnej wiedzy na ten temat, ale często pracuję z ludźmi, którzy ją posiadają).

Oto prawdziwy problem, w którym pracowałem przez 6 miesięcy: Biorąc pod uwagę macierz X ze 100 próbkami i 10000 zmiennymi reprezentującymi wartość genetyczną pacjentów i wydajność y wielkości 100 x 1, która reprezentuje gęstość kości.

Czy możesz mi powiedzieć, które geny wpływają na gęstość kości?

Teraz pracuję nad innym problemem. Mam zbiór danych dotyczących produkcji przemysłowej z 2000 próbkami i 12000 zmiennymi. Mój szef chciałby wyodrębnić z tego zestawu danych nie więcej niż 30 zmiennych w sposób nienadzorowany.
Wypróbowałem kilka algorytmów, ale nie mogę wybrać mniej niż 600 zmiennych, ponieważ są one bardzo bardzo skorelowane między nimi. (Nadal nad tym pracuję ...)

Inną ważną kwestią do rozważenia jest wydajność różnych algorytmów. W wielu sytuacjach nie można czekać 20 minut na wynik. Na przykład musisz wiedzieć, kiedy używać NIPALS, a kiedy SVD do obliczania PCA.

Mam nadzieję, że to da ci wyobrażenie o problemach, które są powszechne w ml.

Donbeo
źródło
Dzięki za radę, wydaje się nie zbliżać problemy tak, ciekawe. n<<p
awokado