Dobór algorytmu to w przypadku Machine Learningu jedna z kluczowych kwestii. Niekiedy może ona zaważyć nad powodzeniem całego projektu, a w większości przypadków będzie mieć kluczowy wpływ na osiągane przez nasz model wyniki. Źle dobrany algorytm może spowodować wyciąganie niewłaściwych wniosków z danych, czego następstwem mogą być fatalne w skutkach decyzje biznesowe. Właśnie dlatego postanowiłem dogłębnie rozpracować temat i podzielić się moimi przemyśleniami na łamach bloga.
Wstęp
To jaki algorytm należy wybrać zależy od wielu zmiennych. Nawet najbardziej doświadczeni badacze danych mają z tym problem i często nie są w stanie wskazać najlepszego algorytmu przed jego przetestowaniem na wskazanym zbiorze danych. W tym miejscu muszę zaznaczyć jedną bardzo istotną rzecz: 99,999% specjalistów nie jest w stanie wskazać algorytmu który w danych przypadku przyniesie najlepsze rezultaty. Bez uprzedniego przetestowania kilku algorytmów na zadanym zbiorze danych, wybór jest to w dużej mierze spekulacją. Jest jednak pewien zbiór reguł, który w oparciu o kilka zmiennych pomoże zawęzić Ci poszukiwania do 2-3 algorytmów najlepiej pasujących do konkretnego przypadku. Wskazane algorytmy będziesz mógł przetestować na rzeczywistym zbiorze danych, tak by podjęcie właściwej decyzji było formalnością 😊 W cyklu artykułów, który dziś zaczynam znajdziesz całą masę wskazówek, podpowiedzi i informacji, które mają jeden cel: ułatwić Ci dobór odpowiedniego algorytmu, poprzez lepsze zrozumienie problemów (a także algorytmów) z jakimi najczęściej spotykamy się w Machine Learning.
Artykuł ten jest drugą częścią cyklu „Wybór odpowiedniego algorytmu”. Cały cykl składa się z następujących artykułów: Część 1 – wprowadzenie. Część 2 – algorytmy klasyfikacyjne. Część 3 – algorytmy regresyjne. Część 4 – algorytmu grupujące.
Podział algorytmów w Machine Learning
Najogólniejszego podziału algorytmów można dokonać bazując na typie uczenia: nadzorowanym i nienadzorowanym. Uczenie nadzorowane opiera się na danych mających mniej lub bardziej jasną strukturę. Kolumny posiadają etykiety opisujące ich zawartość. Przykładem może być tu zbiór danych klientów banku, którzy są opisani za pomocą zmiennych takich jak: data urodzenia, numer dowodu osobistego, saldo konta, adres zamieszkania, dane dotyczące historii kredytowej, historia transakcji, etc.
Algorytmu używane przy uczeniu nadzorowanym szukają zależności pomiędzy opisanymi zmiennymi, w celu wyznaczenia wskazanej wartości. Wartością tą może być np. estymowana maksymalna zdolność kredytowa, ryzyko wystąpienia fraudu dla wybranej transakcji, lub też wartość binarna wskazująca czy dany klient banku będzie dobrym czy złym kredytobiorcą. Podsumowując, w tym przypadku dokładnie wiemy czego szukamy i na czym będziemy opierać swe decyzje.
W przypadku uczenia nienadzorowanego dane wejściowe nie posiadają żadnych etykiet. Nie jest również do końca jasny wynik końcowy jaki mamy uzyskać. Celem jest tu zatem organizacja danych lub wyjaśnienie struktury danych wejściowych. Zazwyczaj sprowadza się to do grupowania danych w celu zbudowania nowego spojrzenia na dane.
Prócz podziała względem typu uczenia, zdecydowaną większość algorytmów możemy podzielić bazując na typie problemu z jakim się borykamy. Podstawowy podział wygląda następująco:
- Algorytmy klasyfikacyjne – wskazują jedną z wartości kategorycznych. Jeśli w danym problemie algorytm prognozuje jedną z dwóch wartości (prawda/fałsz, 0/1, tak/nie), mówimy o klasyfikacji dwuklasowej (ang. two-class classification). W przypadku problemów, w których zmienna predykcyjna może przyjąć więcej niż dwie wartości, mówimy o klasyfikacji wieloklasowej (ang. multiclass classification).
- Algorytmy regresyjne – są to algorytmy, których celem jest estymacja wartości numerycznej, np. wartość akcji danej spółki, wartość portfela inwestycyjnego złożonego z wybranych produktów, etc.
- Algorytmy grupujące – jest to typ algorytmów, których zadaniem jest pogrupowanie zmiennych wejściowych w klastry, np. grupowanie klientów banku w oparciu o ich historię kredytową i produktów finansowych z jakich korzystali.
Przykład grupowania (źródło: Wikipedia)
- Inne – zawrzeć tu można wszystkie algorytmy, których nie jesteśmy w stanie przypisać do żadnej powyższych kategorii. Będą to m.in. algorytmy wspomagające wykrywanie anomalii, algorytmy rekomendacyjne, czy też algorytmy służące do analizy tekstu. By nie komplikować zbytnio tematu, dla potrzeb tej serii artykułów zamknę je wszystkie w jednej kategorii – „Inne” 😊
Kryteria doboru algorytmów
Istnieje kilka podstawowych zmiennych, które są istotne przy wyborze algorytmu. Bez chwili zastanowienia każdy jest w stanie dokonać pierwszej selekcji bazując na podziale, który przedstawiłem wcześniej (klasyfikacja, regresja, grupwanie). Oczywiście to dopiero początek zabawy. Drugą kluczową kwestią jest matematyczna charakterystyka danego algorytmu. Należy tu rozważyć typ zmiennych i format danych wejściowych.
Przy wyborze algorytmu należy również rozważyć liczbę: obserwacji, zmiennych i wartości jakie przyjmują zmienne kategoryczne (liczba etykiet) w danych wejściowych. Są algorytmy które spisują się znakomicie w przypadku niewielkiej liczby parametrów uczących. Inne posiadają ograniczenia charakterystyczne dla danej platformy np. w R zmienna kategoryczna w Random Forest może przyjmować maksymalnie do 32 unikalnych wartości. Gdy którakolwiek z naszych zmiennych przyjmuje więcej niż 32 unikalne wartości, wtedy mamy 3 możliwości: zmienić algorytm uczący, zrezygnować ze zmiennej, ew. zmniejszyć liczbę wartości do maksymalnie 32 (np. poprzez pogrupowanie podobnych wartości).
Nie bez znaczenia pozostają również kwestie optymalizacji i dokładność poszczególnych algorytmów. Gdy znamy wymagania dotyczące projektu i mamy do dyspozycji duży zbiór danych należy wziąć pod uwagę dokładność i czas uczenia. Dla przykładu, przyjmuje się, że w przypadku problemów klasyfikacyjnych drzewa decyzyjne są dosyć dokładne, kosztem nieco dłuższego czasu uczenia. Z kolei regresja logistyczna charakteryzuje się relatywnie niskim czasem uczenia przy nieco gorszej dokładności. Coś za coś 😊
Przy wyborze algorytmu należy zatem wziąć pod uwagę:
- Typ problemu (klasyfikacja, regresja, grupowanie).
- Matematyczna charakterystyka algorytmu.
- Liczba obserwacji.
- Liczba zmiennych.
- Liczba etykiet (wartości przyjmowanych przez zmienne kategoryczne).
- Dokładność algorytmu.
- Czas uczenia.
- Liniowość.
Ogólny schemat doboru algorytmów
W internecie można znaleźć mnóstwo schematów, które „naprowadzą” nas na odpowiedni algorytm. Niestety żaden z nich nie wyczerpuje tematu choćby w niewielkim stopniu. Poniżej chciałbym przedstawić dwa, które uznałem za najbardziej wartościowe. Pierwszy z nich został opublikowany przez Microsoft i niestety ale ogranicza się jedynie do algorytmów dostępnych w Azure Machine Learning (bardziej wprawne oko dostrzeże, że brakuje w nim algorytmu „Matchbox Recommender”, dedykowanego silnikom rekomendacyjnym, a który to przecież jest dostępny w usłudze Microsoft 😊). Grupuje on wszystkie algorytmy w 5 kategorii. Dodatkowo każdy algorytm opisany jest kilkoma atrybutami, które go charakteryzują. Pełną wersję tej przydatnej ściągawki można pobrać klikając w ten link.
Kolejny świetny przykład grafiki opisującej użycie algorytmów w Machine Learning udostępnia doskonale znany użytkownikom Pythona zespół scikit-learn. Wprawdzie zawiera ona mniej informacji niż ta przedstawiona przez Microsoft, ale widnieją tu dodatkowe algorytmu, które nie są dostępne w Azure ML. Większy format tej ściągawki jest dostępny pod linkiem.
Co będzie w kolejnych wpisach?
Dzisiejszy artykuł to zaledwie „wstęp” do obszernej analizy. Chciałem w nim jedynie podkreślić znaczenie doboru odpowiedniego algorytmu i ich ogólny podział. W kolejnych artykułach będę opisać poszczególne algorytmy, pogrupowane według przedstawionych dziś klas (klasyfikacyjne, regresyjne, grupowanie i inne). Dodatkowo opiszę charakterystykę każdego z nich, przedstawię przykłady zastosowania i dobre praktyki przydatne przy implementacji. Kolejny wpis dotyczyć będzie mojej ulubionej grupy – algorytmów klasyfikacyjnych 😊
A Ty w jaki sposób decydujesz o tym który algorytm użyjesz? Proszę podziel się w komentarzu swoimi technikami doboru odpowiedniego algorytmu.
PODOBAŁ CI SIĘ TEN ARTYKUŁ?
Jeśli tak, to zarejestruj się, by otrzymywać informacje o nowych wpisach.
Dodatkowo w prezencie wyślę Ci bezpłatny poradnik :-)
Świetny artykuł, cieszę się, że znalazłam tego bloga 🙂