Machine Learning Workflow cz 2 – trenowanie modelu

trenowanie modelu

Na start przypomnijmy sobie podstawowe kroki w przebiegu pracy uczenia maszynowego:

  1. Przygotowanie modelu.
  2. Trenowanie modelu.
  3. Testowanie modelu.

Dzisiaj zajmiemy się punktem drugim

Załóżmy, że sam model mamy przygotowany – wiemy czego szukamy, dane są wyselekcjonowane i wyczyszczone – co dalej? Mamy do rozpatrzenia dwie kwestie: wybór algorytmu uczącego i zastosowanie tego algorytmu do wytrenowania modelu. Spróbuję po kolei omówić najważniejsze elementy tych kroków, ale zanim do tego przejdziemy postaram się wytłumaczyć jak możemy podzielić typy uczenia maszynowego. Jest to podstawowa kwestia jaką trzeba rozważyć wybierając algorytm.

Uczenie nadzorowane i nienadzorowane

Algorytmy uczące wykorzystują jedną z dwóch technik – uczenie z nauczycielem(nadzorowane) i uczenie bez nauczyciela(nienadzorowane). Wybór jednej z tych dwóch technik jest determinowany przez dane jakie posiadamy i problem który chcemy rozwiązać. Mianowicie uczenie nadzorowane wykorzystujemy gdy każdy wiersz w naszym zbiorze danych zawiera też odpowiedź na zadane pytanie. Czyli np. mamy dane, które zawierają wyniki badań określonej grupy pacjentów, oraz stwierdzenie czy dana osoba choruje na pewną przypadłość. Pytanie jakie zadaliśmy to: Na podstawie wyników określ czy pacjent choruje na <jakaś choroba>. To jest właśnie uczenie nadzorowane.

Z uczeniem nienadzorowanym mamy do czynienia gdy w naszym zbiorze danych nie ma odpowiedzi na postawione pytanie. Wykorzystuje się je często do trenowania sieci neuronowych, lub różnego rodzaju problemów klasyfikacyjnych. Np. mamy zbiór danych zawierający informacje o klientach sklepu internetowego i chcemy się dowiedzieć jak możemy ich sklasyfikować (Coś jak przykład we wpisie o przygotowaniu modelu). Wtedy wybieramy technikę uczenia nienadzorowanego.

Klasyfikacja problemów do rozwiązania

Teraz gdy mamy podstawy wiadomości o uczeniu nadzorowanym i nienadzorowanym, możemy postawić następny krok. Przez pryzmat zadanego pytania możemy określić typ problemu. Dla każdego typu problemu istnieją dedykowane algorytmy.

  • Wykrywanie anomalii – jak sama nazwa wskazuje, w  tym wypadku problem który chcemy rozwiązać wymaga znalezienia w zbiorze danych “niepasujących” elementów (zwykle uczenie nienadzorowane, ale w nadzorowanym też się przydaje bo można usunąć anomalie co powinno skutkować lepszym wynikiem końcowym).
  • Regresja – Są to problemy opierające się na przewidywaniu pewnych wartości na podstawie innych – zwykle typowe problemy dla uczenia nadzorowanego
  • Klasteryzacja – Dotyczy uczenia nienadzorowanego i polega na grupowaniu podobnych danych w zbiory (nazywane też klasami). Wykorzystywana jest do zadań związanych ze strukturą danych w zbiorze.
  • Klasyfikacja – Problemy podlegające klasyfikacji, podobnie jak w klasteryzacji, podlegają swego rodzaju grupowaniu, ale tu zamiast skupiać się na strukturze, skupiamy się na przewidywaniu pewnych kategorii danych. Klasyfikacja jest przeznaczona dla uczenia nadzorowanego.

Wybór algorytmu

Gdy potrafimy przypisać nasz problem do którejś z powyższych kategorii, to nie pozostaje nam już nic innego jak tylko zdecydować się na konkretny algorytm. Samych algorytmów jako takich, nie będę omawiał w tym wpisie. Wystarczy odpalić google i wpisać np. “ML clustering alghorihtms”. Warto mieć też trochę pojęcia na temat posiadanego zbioru danych – różne algorytmy mają różną skuteczność i wydajność w zależności od rozmiaru tabeli, ilości kolumn itd.

Trenowanie modelu:

Po wybraniu algorytmu, zostaje najistotniejsza część pracy – sam “trening”.  O ile w bibliotekach takich jak np. scikit learn trenowanie sprowadza się do kilku linijek kodu, to bardzo ważne jest zrozumienie tego jak algorytm wykonuje trening. Ogólnie rzecz ujmując, algorytm do którego podaje się dane do wytrenowania, tworzy sobie szereg współczynników wykorzystywanych później przy szacowaniu wartości. Można z tego wywnioskować, że jeżeli mamy w zbiorze danych 1000 wierszy, i wszystkie wykorzystamy do trenowania, a następnie znowu na wszystkich sprawdzimy skuteczność to będzie ona praktycznie równa 100%. Model utworzony przez algorytm będzie już znał te dane. Nie możemy więc podawać do treningu wszystkich danych. Zawsze dzielimy nasz zbiór na dane do treningu i dane do testowania. Zwykle około 70% danych jest wykorzystywane do treningu a pozostałe 30% do testowania.

 

To by było na tyle jeżeli chodzi o omówienie trenowania modelu. Jest jeszcze kilka niuansów, jak np. tzw. cross validation, ale o nich będę chciał napisać we wpisie dotyczącym sposobów poprawy skuteczności, gdy opiszę już cały workflow.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *