Przegląd i porównanie algorytmów klasyfikacyjnych w Pythonie

sages.pl 1 rok temu
Sztuczna inteligencja, w tym algorytmy oparte o głębokie sieci neuronowe stają się w ostatnim czasie coraz bardziej popularne. Generatory obrazu czy złożone modele do przetwarzania tekstu takie jak GPT cieszą się w tej chwili ogromnym zainteresowaniem. W związku z tym wiele osób myśli o tym, żeby zdobyć umiejętności potrzebne do trenowania podobnych modeli. Zanim jednak zabierzemy się za trenowanie tak zaawansowanych algorytmów, warto poznać podstawy, czyli klasyczne modele uczenia maszynowego. Dzielą się one z grubsza na trzy kategorie- regresję, klasyfikację oraz klasteryzację. Regresja to sposób na przewidywanie wartości zmiennych numerycznych- takich jak cena czy wysokość zarobków- na podstawie danych wejściowych, również w postaci liczbowej. Klasyfikacja także operuje na danych numerycznych, ale wyjściem takiego algorytmu jest informacja w postaci kategorii, często binarnej - 0/1, prawda/fałsz, tak/nie. Klasteryzacja za to polega na wykrywaniu w danych tak zwanych klastrów, czyli grupowaniu obserwacji w oparciu o prawidłowości, które nie zostały wcześniej stwierdzone i oznakowane. Ze wszystkich tych trzech grup prawdopodobnie największa różnorodność dostępnych algorytmów występuje w pozornie najprostszej z nich- klasyfikacji.

## Czym jest klasyfikacja w kontekście uczenia maszynowego?

Klasyfikacja to proces przypisania jakiejś obserwacji do jednej ze z góry przyjętych kategorii. Przykładem może być ubieganie się o kredyt w banku. Nasz wniosek da się uprościć do zestawu liczb takich jak: wiek, stan cywilny (zmienna kategoryczna, którą można reprezentować w postaci liczby), płeć, wysokość zarobków itd. Następnie jakiś algorytm na podstawie tych liczb będzie miał za zadanie wydać decyzję- przyznanie kredytu (1) albo jego odmowa (0). W niektórych problemach kategorii może być więcej niż dwie, ale klasyfikacja binarna jest spotykana najczęściej, więc takie właśnie problemy będziemy rozpatrywać. W jaki sposób można wydać taką decyzję? Z pewnością istnieją różne sposoby, a jednym z nich jest skorzystanie z wiedzy eksperta. Doświadczony pracownik banku potrafi ocenić ryzyko braku spłaty zadłużenia w konkretnym przypadku i na tej podstawie odmówić udzielenia kredytu. Jednak pomimo dużej wiedzy wymaganej do wykonywania takiego zawodu, proces decyzyjny można w tym przypadku łatwo zautomatyzować (a co za tym idzie- zaoszczędzić). W jaki sposób? Wystarczy przeanalizować **dane uczące**, czyli pewną liczbę historycznych wniosków (tysiące, może choćby dziesiątki albo setki tysięcy) i wychwycić zależności, jakie istnieją między danymi wejściowymi- cechami osoby wnioskującej- a decyzją. Jest to problem na tyle złożony, iż ciężko ułożyć adekwatny algorytm człowiekowi, który przeanalizuje dane manualnie i wyciągnie z nich wnioski. Istnieją jednak sposoby na to, aby proces decyzyjny zautomatyzować i na tym właśnie polega zagadnienie klasyfikacji w uczeniu maszynowym.

## Przykłady algorytmów klasyfikujących

Istnieją różne modele do klasyfikacji i każdy charakteryzuje się innymi cechami. W zależności od problemu, nad jakim pracujemy, będziemy mogli dobrać inny algorytm. Kilka przykładowych znajduje się w poniższym zestawieniu.

### Regresja logistyczna

Ten algorytm uchodzi za jeden z najprostszych i często nie jest wystarczający w złożonych zagadnieniach. Dobrze się sprawdza jednak w problemach liniowych, czyli takich gdzie zawsze wraz ze wzrostem jakiejś danej wejściowej rośnie prawdopodobieństwo, iż wynikiem klasyfikacja jest klasa 1 (albo 0). Przykładowo jeżeli dla grupy dorosłych ludzi chcemy określić ich płeć na podstawie wzrostu oraz wagi to zwiększając wartości obu tych parametrów prawdopodobieństwo, iż dana osoba jest mężczyzną, zawsze rośnie. Wynika to z tego, iż mężczyźni są statystycznie wyżsi i ciężsi. Gdyby jednak powyżej przekroczenia pewnej granicy wzrostu (np. 180 cm) zaczęło rosnąć prawdopodobieństwo, iż dana osoba jest kobietą, to model liniowy okazałby się nieskuteczny.

Oto w jaki sposób działa regresja logistyczna. Poniższy przykład obrazuje to dla tylko jednej zmiennej wejściowej „wzrost”, ale model można uogólnić.

1. Zaczynamy od tego, żeby prognozowaną kategorię zapisać w postaci zero-jedynkowej. Ostatecznie wszystkie przetwarzane dane muszą zostać zamienione na liczby.
2. Następnie dla lepszego zrozumienia przedstawmy wszystkie **dane uczące** na wykresie. Są to czerwone punkty, których położenie (x, y) wynika z kombinacji parametrów (wzrost, płeć). Chociaż nie istnieje wyraźna granica między wzrostem obydwu płci, to widzimy, iż u kobiet współrzędne wzdłuż osi x są przesunięte bardziej w lewo a u mężczyzn- w prawo.
3. Kolejny najważniejszy krok to dopasowanie tzw. funkcji logistycznej do danych uczących. Funkcja ta określa rozkład prawdopodobieństwa przynależności do klasy 1 w zależności od wartości cechy (czyli tzw. zmiennej niezależnej) i ma postać:
![Sages-Blog-Banery-1199x250-KZ.webp](/uploads/Sages_Blog_Banery_1199x250_KZ_12fcfe3ee9.webp)
gdzie:
x- wartość zmiennej niezależnej, w tym przykładzie wzrost w [cm]
a, b- stałe współczynniki, których wartość określa kształt wykresu funkcji logistycznej


Dopasowanie tej funkcji nie wymaga od nas oczywiście żadnych obliczeń, cały algorytm został zaimplementowany w takich bibliotekach jak np. sklearn w Pythonie.
![Sages-Blog-Banery-1199x250-KZ-_1_.webp](/uploads/Sages_Blog_Banery_1199x250_KZ_1_315db4f023.webp)
4. Teraz kiedy chcemy określić płeć nowej obserwacji (osoby) wyłącznie na podstawie jej wzrostu, musimy obliczyć wartość funkcji logistycznej w tym punkcie. o ile wartość ta będzie przekraczać 0.5 to klasyfikujemy obserwację jako klasa 1 a w przeciwnym wypadku jako klasa 0. Oczywiście im więcej cech mamy do dyspozycji tym dokładniejszy będzie nasz model- jeżeli tylko prawdopodobieństwo przynależności do poszczególnych klas zawsze rośnie (albo spada) wraz ze zmianą wartości cechy.

**Cechy modelu regresja logistyczna:**
* Model sprawdza się nieźle w problemach liniowych
* Nie wymaga dużych ilości danych
* Nie jest w stanie uchwycić złożonych zależności
* Jest podatny na zaburzenia spowodowane wartościami odstającymi w danych wejściowych

### Drzewo decyzyjne

Drzewo decyzyjne jest algorytmem, którego podstawową zaletą jest wysoka interpretowalność wyników. Oznacza to, iż kiedy wytrenowany model przypisze nową obserwację do którejś z klas, jesteśmy w stanie wytłumaczyć, dlaczego właśnie taka decyzja została podjęta. Jest to jeden z powodów, dla których taki algorytm dobrze sprawdzi się w przypadku wcześniej przedstawionego zagadnienia dotyczącego decyzji o przyznaniu lub odmowie udzielenia kredytu. Taka decyzja często wymaga uzasadnienia a drzewo decyzyjne nam je zapewnia. Model ten opiera się o szereg pojedynczych pytań, na które możemy odpowiedzieć „tak” lub „nie”. Odpowiadając na nie w odpowiedniej kolejności, dochodzimy w końcu do finalnej decyzji, do której klasy przypisać obserwację.

Poniższe drzewo obrazuje schemat podejmowania decyzji o przyznaniu kredytu dla wnioskujących, którzy są scharakteryzowani przez takie cechy jak:
* _Credit history_ (czy aplikant ma historię kredytową- tak/nie)
* _Applicant income_ (dochód aplikanta- zmienna numeryczna)
* _Coapplicant income_ (dochód koaplikanta- zmienna numeryczna)
* _Loan amount_ (pożyczona kwota- zmienna numeryczna)
* _Loan amount_ term (czas trwania kredytu w miesiącach- zmienna numeryczna)

W pierwszym kroku sprawdzamy, czy historia kredytowa wynosi 0 (innymi słowy czy jest
Idź do oryginalnego materiału