Chciwość algorytmów

  • Post author:

Na poniższym obrazku bardzo prosty problem klasyfikacyjny.

Algorytmy uczenia maszynowego

Mamy dwie zmienne, X1 i X2, oraz zmienną Y, która przyjmuje wartości A lub B. Łatwo zaproponować idealny model: jeśli obie zmienne są dodatnie lub obie ujemne, wtedy Y = B, w przeciwnym razie Y = A (przerywane linie na wykresie to granica decyzyjna). Nawet można to ładnie zapisać:

if (X1 * X2 > 0) Y = B else Y = A

Model drzewa decyzyjnego

Drzewo decyzyjne to jeden z najpopularniejszych algorytmów uczenia maszynowego. (Algorytmów? Zaraz o tym pogadamy). Jeśli nawet nie korzysta się z niego bezpośrednio, to jest podstawą lasu losowego czy XGBoost. Drzewo to nic innego jak ciąg „ifów” i „elsów”, ewentualnie można spojrzeć na nie tak, że dzieli przestrzeń, jak na rysunku, na prostokąty. Czyli podany wyżej model jest drzewem decyzyjnym.

Dzięki takiemu podziałowi możemy prognozować, że np. przyszłe przypadki z prawego górnego rogu są z klasy B. Bez tego trzeba by wszystko przewidywać na jedną z klas (lub losowo), robiąc przy tym mnóstwo błędów.

Ale uwaga: takie modele buduje się automatycznie. A model to nie to samo, co ALGORYTM jego budowy.

Algorytm drzewa decyzyjnego

Drzewa rosną krokowo. Żeby postawić te dwie kreski, jak na rysunku, trzeba zacząć od pierwszej. Problem polega na tym, że to się w ogóle nie opłaca. Jeśli nie postawimy żadnej i wszystkie Y przewidujemy jako A lub B, w połowie przypadków popełnimy błąd. Jeśli postawimy gdzieś kreskę (poziomą lub pionową) i następnie przypadki po lewej będziemy przewidywać np. jako A, po prawej jako B, to wciąż w połowie przypadków popełnimy błędy.

Zwykle w drzewach używa się bardziej wyrafinowanych funkcji straty (tzn. nie proporcji błędów), np. indeksu Giniego lub entropii, ale w tym przykładzie to niczego nie zmienia. Brak zachęty, żeby zrobić pierwszy krok, a bez niego nie zrobimy drugiego.

Jest to ciekawy przykład też dlatego, że drzewa uważa się za idealne do modelowania interakcji. Ta tutaj jest idealna. Zbyt idealna.

Wnioski

Oczywiście przykład jest specyficzny i wystarczy lekko go zaburzyć (np. usunąć jakąkolwiek obserwację), a już algorytm sobie poradzi (pierwszy podział będzie „głupi”, ale kolejne już rozsądne). Ale może warto zapamiętać dwie rzeczy:

1. Model i algorytm to nie jest to samo. W tym kontekście model to pewna konkretna struktura funkcji, przy pomocy której chcemy opisać potencjalną zależność. Algorytm zaś to metoda dojścia do konkretnej realizacji tej funkcji. Różne algorytmy mogą doprowadzić do tej samej funkcji, a z kolei niektórych funkcji nie da się uzyskać, stosując konkretny algorytm.

2. Algorytmy uczenia maszynowego starają się, by w kolejnej iteracji było lepiej (nie wszystkie tak działają!). I te wykorzystywane w drzewach są chciwe/zachłanne („greedy”). Polega to na tym, że algorytm wybiera najlepszy możliwy stan w kolejnym kroku, nie zważając na to, że być może lepiej nie zjeść wszystkich cukierków od razu, ale zostawić część na potem (albo w ogóle ich nie jeść).

Model i estymator

Na koniec warto dodać, że na model z konkretnymi parametrami (czyli po zastosowaniu algorytmu) też mówi się model… Czyli wygląda to trochę tak: model -> algorytm -> model. W rzeczywistości ten drugi model to estymator pierwszego, teoretycznego. Z mojego doświadczenia, w kontekście uczenie maszynowego przez „model” rozumie się zwykle ten drugi, konkretny, a specyfikacja modelu zlewa się z pojęciem algorytmu.


Jeśli moje teksty są dla Ciebie wartościowe, na podany niżej adres email mogę przesłać Ci wiadomość, gdy pojawią się nowe. Zapraszam też na mój kanał na youtube.