Który algorytm ML wybrać?
Jedną z kluczowych decyzji, które należy podjąć podczas rozwiązywania problemu związanego z nauką o danych, jest wybór algorytmu uczenia maszynowego.
Istnieją setki algorytmów uczenia maszynowego do wyboru, z których każdy ma swoje zalety i wady. Niektóre algorytmy mogą działać lepiej niż inne w przypadku określonych typów problemów lub określonych zestawów danych.
Twierdzenie „No Free Lunch” (NFL) stwierdza, że nie ma jednego algorytmu, który działa najlepiej dla każdego problemu, lub innymi słowy, wszystkie algorytmy mają taką samą wydajność, gdy ich wydajność jest uśredniona dla wszystkich możliwych problemów.
W tym artykule omówimy główne punkty, które należy wziąć pod uwagę przy wyborze modelu dla swojego problemu i jak porównać różne algorytmy uczenia maszynowego.
Kluczowe aspekty algorytmu
Poniższa lista zawiera 10 pytań, które możesz sobie zadać, rozważając konkretny algorytm uczenia maszynowego:
- Jakie rodzaje problemów algorytm może rozwiązać? Czy algorytm może rozwiązać tylko problemy z regresją lub klasyfikacją, czy może rozwiązać oba? Czy może obsłużyć problemy z wieloma klasami/wieloma etykietami lub tylko problemy z klasyfikacją binarną?
- Czy algorytm ma jakieś założenia dotyczące zbioru danych? Na przykład niektóre algorytmy zakładają, że dane są liniowo separowalne (np. perceptron lub liniowa SVM), podczas gdy inne zakładają, że dane mają rozkład normalny (np. Gaussian Mixture Models).
- Czy są jakieś gwarancje dotyczące wydajności algorytmu? Na przykład, jeśli algorytm próbuje rozwiązać problem optymalizacyjny (jak w regresji logistycznej lub sieciach neuronowych), czy gwarantuje znalezienie optymalnego rozwiązania globalnego, czy tylko optymalnego lokalnego?
- Ile danych jest potrzebnych do efektywnego uczenia modelu? Niektóre algorytmy, takie jak głębokie sieci neuronowe, są bardziej zorientowane na dane niż inne.
- Czy algorytm ma tendencję do nadmiernego dopasowania? Jeśli tak, czy algorytm zapewnia sposoby radzenia sobie z nadmiernym dopasowaniem?
- Jakie są wymagania dotyczące czasu działania i pamięci algorytmu, zarówno podczas uczenia, jak i czasu predykcji?
- Jakie etapy wstępnego przetwarzania danych są wymagane do przygotowania danych do algorytmu?
- Ile hiperparametrów ma algorytm? Algorytmy, które mają wiele hiperparametrów, wymagają więcej czasu na uczenie i dostrajanie.
- Czy wyniki algorytmu można łatwo zinterpretować? W wielu dziedzinach problemowych (takich jak diagnostyka medyczna) chcielibyśmy móc wyjaśnić przewidywania modelu w kategoriach ludzkich. Niektóre modele można łatwo zwizualizować (np. drzewa decyzyjne), podczas gdy inne zachowują się bardziej jak czarna skrzynka (np. sieci neuronowe).
- Czy algorytm obsługuje uczenie się online (przyrostowe), tzn. czy możemy go uczyć na dodatkowych próbkach bez odbudowy modelu od podstaw?
Weźmy na przykład dwa najpopularniejsze algorytmy: drzewa decyzyjne i sieci neuronowe i porównajmy je według powyższych kryteriów.
Drzewa decyzyjne
- Drzewa decyzyjne mogą obsługiwać zarówno problemy klasyfikacji, jak i regresji. Mogą również łatwo obsługiwać problemy z wieloma klasami i wieloma etykietami.
- Algorytmy drzew decyzyjnych nie mają żadnych konkretnych założeń dotyczących zbioru danych.
- Drzewo decyzyjne jest budowane przy użyciu zachłannego algorytmu, który nie gwarantuje znalezienia optymalnego drzewa (tj. drzewa, które minimalizuje liczbę testów wymaganych do poprawnego sklasyfikowania wszystkich próbek uczących). Jednak drzewo decyzyjne może osiągnąć 100% dokładność na zbiorze uczącym, jeśli będziemy rozszerzać jego węzły, aż wszystkie próbki w węzłach liści będą należeć do tej samej klasy. Takie drzewa zwykle nie są dobrymi predyktorami, ponieważ nadmiernie dopasowują się do szumu w zbiorze uczącym.
- Drzewa decyzyjne mogą dobrze działać nawet na małych lub średnich zbiorach danych.
- Drzewa decyzyjne można łatwo przesadzić. Możemy jednak zmniejszyć nadmierne dopasowanie, stosując przycinanie drzew. Możemy również użyć metod zespołowych, takich jak losowe lasy, które łączą wyniki wielu drzew decyzyjnych. Te metody są mniej podatne na przeuczenie.
- Czas na zbudowanie drzewa decyzyjnego to O ( n ² p ), gdzie n to liczba próbek uczących, a p to liczba cech. Czas predykcji w drzewach decyzyjnych zależy od wysokości drzewa, która jest zwykle logarytmiczna w n , ponieważ większość drzew decyzyjnych jest dość zrównoważona.
- Drzewa decyzyjne nie wymagają wstępnego przetwarzania danych. Mogą bezproblemowo obsługiwać różne typy funkcji, w tym cechy numeryczne i kategoryczne. Nie wymagają również normalizacji danych.
- Drzewa decyzyjne mają kilka kluczowych hiperparametrów, które należy dostroić, zwłaszcza w przypadku korzystania z przycinania, takich jak maksymalna głębokość drzewa i miara zanieczyszczenia, której należy użyć, aby zdecydować, jak podzielić węzły.
- Drzewa decyzyjne są łatwe do zrozumienia i interpretacji, a my możemy je łatwo wizualizować (chyba że drzewo jest bardzo duże).
- Drzewa decyzyjne nie mogą być łatwo modyfikowane w celu uwzględnienia nowych próbek uczących, ponieważ niewielkie zmiany w zbiorze danych mogą powodować duże zmiany w topologii drzewa.
- Sieci neuronowe to jeden z najbardziej ogólnych i elastycznych modeli uczenia maszynowego, jakie istnieją. Mogą rozwiązać prawie każdy rodzaj problemu, w tym klasyfikację, regresję, analizę szeregów czasowych, automatyczne generowanie treści itp.
- Sieci neuronowe nie mają założeń dotyczących zbioru danych, ale dane muszą zostać znormalizowane.
- Sieci neuronowe są uczone przy użyciu spadku gradientu, dlatego mogą znaleźć tylko lokalne rozwiązanie optymalne. Istnieją jednak różne techniki, których można użyć, aby uniknąć utknięcia w lokalnych minimach, takie jak pęd i adaptacyjne tempo uczenia się.
- Głębokie sieci neuronowe wymagają do uczenia dużej ilości danych rzędu milionów punktów próbkowania. Ogólnie rzecz biorąc, im większa sieć (im więcej ma warstw i neuronów), tym więcej danych potrzebujemy do jej wyszkolenia.
- Sieci, które są zbyt duże, mogą zapamiętać wszystkie próbki szkoleniowe i nie uogólniać dobrze. W przypadku wielu problemów można zacząć od małej sieci (np. tylko z jedną lub dwiema ukrytymi warstwami) i stopniowo zwiększać jej rozmiar, aż zacznie się przeuczać zbiór uczący.
- Czas uczenia sieci neuronowej zależy od wielu czynników (rozmiar sieci, liczba iteracji zejścia gradientu potrzebnych do jej wytrenowania itp.). Jednak czas przewidywania jest bardzo szybki, ponieważ wystarczy wykonać tylko jedno przejście przez sieć, aby uzyskać etykietę.
- Sieci neuronowe wymagają, aby wszystkie cechy były numeryczne i znormalizowane.
- Sieci neuronowe mają wiele hiperparametrów, które należy dostroić, takich jak liczba warstw, liczba neuronów w każdej warstwie, funkcja aktywacji, której należy użyć, szybkość uczenia się itp.
- Prognozy sieci neuronowych są trudne do interpretacji, ponieważ opierają się na obliczeniach dużej liczby neuronów, z których każdy ma tylko niewielki udział w ostatecznej prognozie.
- Sieci neuronowe można łatwo dostosować, aby uwzględnić dodatkowe próbki uczące, ponieważ wykorzystują one przyrostowy algorytm uczenia się (stochastyczny spadek gradientu).
W poniższej tabeli porównano czasy uczenia i przewidywania dla niektórych popularnych algorytmów ( n to liczba próbek uczących, a p to liczba funkcji).
Najbardziej udane algorytmy w konkursach Kaggle
Według ankiety przeprowadzonej w 2016 roku, najczęściej używanymi algorytmami przez zwycięzców konkursu Kaggle były algorytmy wzmacniania gradientu (XGBoost) i sieci neuronowe (zobacz ten artykuł ).
Wśród 29 zwycięzców konkursu Kaggle w 2015 roku 8 z nich korzystało z XGBoost, 9 z głębokich sieci neuronowych, a 11 z obu.
XGBoost był używany głównie w problemach, które dotyczyły danych strukturalnych (np. tabele relacyjne), gdzie sieci neuronowe były bardziej skuteczne w rozwiązywaniu problemów nieustrukturyzowanych (np. problemy związane z obrazem, głosem lub tekstem).
Ciekawe byłoby sprawdzić, czy tak jest do dziś, czy też trendy się zmieniły (czy ktoś jest chętny na wyzwanie?)
Dziękuje za przeczytanie!

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































