Znasz to uczucie, gdy po godzinach spędzonych na czyszczeniu tabel w Excelu w końcu możesz kliknąć „uruchom” i zobaczyć, jak Twój komputer zaczyna faktycznie coś… rozumieć? No dobra, „rozumieć” to może zbyt duże słowo. On po prostu dopasowuje liczby do innych liczb, ale umówmy się - efekt bywa magiczny. W drugim odcinku naszego cyklu opartego na trzecim wydaniu biblii Auréliena Gérona Uczenie maszynowe z użyciem Scikit-Learn, Keras i TensorFlow zajmiemy się tym, co tygryski lubią najbardziej: klasyfikacją i podstawami modelowania.
 

To tutaj zaczyna się prawdziwa zabawa, ale i pierwsze schody, na których łatwo wybić sobie zęby, jeśli za bardzo zaufasz domyślnym ustawieniom bibliotek.

Magia cyferek, czyli klasyk nad klasykami

Każdy, kto choć raz otworzył podręcznik do uczenia maszynowego, musiał spotkać się ze zbiorem MNIST. To taki „Hello World” świata AI - zestaw 70 tysięcy małych obrazków z ręcznie pisanymi cyframi. Wydaje się to proste, prawda? Patrzysz na obrazek i widzisz „piątkę”. Ale dla komputera to tylko macierz pikseli o różnej jasności.

Można się zastanawiać, po co w ogóle w 2025 roku zajmować się tak starym zbiorem. Otóż MNIST jest genialny do testowania algorytmów. Jeśli Twój klasyfikator, powiedzmy `SGDClassifier`, nie radzi sobie z odróżnieniem „trójki” od „ósemki”, to nie masz co marzyć o rozpoznawaniu twarzy w tłumie czy autonomicznych samochodach. To taki poligon doświadczalny, gdzie błędy bolą mniej, a wnioski są konkretne.
 

Pułapka ślepego zaufania do dokładności

I tu dochodzimy do momentu, w którym wielu początkujących (mnie nie wyłączając, kiedyś tam dawno temu) wpada w samozachwyt. Wyobraź sobie, że budujesz detektor „piątek”. Twój model ma 90% dokładności (accuracy). Brzmi nieźle? No, niekoniecznie.
 

Jeśli w zbiorze tylko 10% obrazków to faktyczne „piątki”, to model, który zawsze mówi „to nie jest piątka”, będzie miał właśnie 90% skuteczności. A przecież jest kompletnie bezużyteczny!. Dlatego właśnie Géron tak mocno kładzie nam do głów, żeby patrzeć głębiej:
 

  • Macierz pomyłek (confusion matrix): To takie zestawienie, które pokazuje czarno na białym, ile razy model pomylił „piątkę” z „trójką”. Bez tego błądzisz po omacku.
  • Precyzja i pełność: To odwieczny dylemat. Czy wolisz, żeby Twój filtr antyspamowy był bardzo ostrożny i czasem przepuścił śmieci (wysoka precyzja), czy żeby za wszelką cenę wyłapał każdy spam, ryzykując, że do kosza trafi ważny mail od szefa (wysoka pełność)?.
     

Z drugiej strony, czasem po prostu musimy zaakceptować jakiś kompromis. W uczeniu maszynowym rzadko dostajesz coś za darmo.
 

Regresja vs klasyfikacja - o co w tym biega?

Chyba warto tu zrobić małą dygresję, bo te dwa pojęcia często się mieszają. Klasyfikacja to wrzucanie do szufladek: spam/nie spam, kot/pies, cyfra 1/cyfra 2. Regresja natomiast to przewidywanie konkretnej wartości, na przykład ile będzie kosztował Bitcoin za tydzień (powodzenia!) albo jaka będzie temperatura jutro rano.
 

Co ciekawe, niektóre algorytmy, jak choćby sieci neuronowe (`MLPClassifier`), potrafią odnaleźć się w obu tych światach, o ile odpowiednio dobierzemy im funkcję kosztu. W klasyfikacji wieloklasowej często usłyszysz o czymś takim jak *cross-entropy* (entropia krzyżowa). Brzmi to strasznie mądrze, a chodzi po prostu o to, jak bardzo „pewny” jest model swojego (często błędnego) wyboru.
 

Kilka słów o tym, jak nie zwariować

Na koniec tego etapu, mam dla Ciebie jedną radę, która oszczędzi Ci sporo frustracji. Nie szukaj od razu idealnego modelu. Zacznij od czegoś prostego, co Scikit-Learn ma w standardzie. Często okazuje się, że dobrze przygotowane dane i prosty klasyfikator dają lepsze rezultaty niż przekombinowana sieć neuronowa, której trening trwa wieki.
 

Wydaje mi się, że najważniejsza lekcja z trzeciego wydania książki Gérona to fakt, że modelowanie to proces iteracyjny. Budujesz, sprawdzasz macierz pomyłek, kręcisz głową z niedowierzaniem, poprawiasz dane i próbujesz znowu. I tak do skutku.
 

A jak tam Twoje pierwsze próby? Udało Ci się już wytrenować coś, co nie myli psa z muffinką? W następnym artykule przyjrzymy się nieco bardziej „egzotycznym” technikom, jak maszyny wektorów nośnych, więc nie chowajcie jeszcze swoich notatników z Pythona.