ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 1.1 · 2 z 33 gotowych lekcji · 10 min

Czym jest uczenie maszynowe?

W skrócie

Uczenie maszynowe to program, który regułę wyprowadza z przykładów, zamiast dostać ją od człowieka. Lekcja pokazuje różnicę na prawdziwych danych o guzach.

Jak napisać program, który odróżni groźny guz od niegroźnego? Można usiąść z lekarzem i zamienić jego doświadczenie w reguły: „jeśli komórki są większe niż tyle, podnieś alarm”. A można pokazać komputerowi setki dawnych przypadków ze znanym wynikiem i pozwolić mu samemu dojść do reguły. Ta druga droga to uczenie maszynowe. Cały kurs jest o tym, dlaczego to działa, kiedy zawodzi i jak odróżnić jedno od drugiego.

Przewidź, potem sprawdź Próg (liczba, od której reguła podnosi alarm), który algorytm wyuczył na biopsjach treningowych, jest najlepszy możliwy na tych biopsjach. Jak wypadnie na biopsjach testowych, których nie widział?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.

Pokaż odpowiedź

Poprawna odpowiedź: Gorzej niż na treningowych

Wyuczony próg ma 89,7% trafności na treningu, ale 86,0% na teście (171 biopsji): reguła dopasowana do jednych danych na nowych wypada zwykle gorzej. Co więcej, ręcznie ustawiony próg 15,0 ma na teście 88,3%, czyli lepiej niż wyuczony. Najlepszy na treningu nie musi być najlepszy na nowych danych.

Spróbuj

  • Przesuwaj powoli suwak progu od lewej do prawej i patrz na trafność na danych treningowych. Zatrzymaj się tam, gdzie twoim zdaniem reguła działa najlepiej.
  • Naciśnij Ucz i porównaj próg wybrany przez algorytm ze swoim. Spójrz na obie liczby: trafność na danych treningowych i na testowych.
  • Przesuń suwak progu do samego końca. Reguła daje teraz prawie każdemu guzowi tę samą odpowiedź — a mimo to trafność nie spada do zera. Zastanów się dlaczego, zanim przeczytasz dalej.
  • Po nauczeniu sprawdź, który wynik jest wyższy, treningowy czy testowy, i zdecyduj, któremu zaufałbyś przy prawdziwej pacjentce.

Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.

Pomysł w prostych słowach

W zwykłym programowaniu człowiek pisze regułę, a komputer ją stosuje. W uczeniu maszynowym człowiek dostarcza przykłady — dane wejściowe razem z poprawnymi odpowiedziami — a algorytm szuka reguły, która te odpowiedzi odtwarza. Znalezioną regułę nazywamy modelem. Potem używa się jej dokładnie tak jak reguły napisanej ręcznie: na wejściu nowy przypadek, na wyjściu przewidywanie.

Pomyśl, jak uczysz się poznawać, czy awokado jest dojrzałe. Nikt nie daje ci wzoru. Naciskasz kilka owoców, rozkrawasz je, zauważasz, które były dobre, i po kilkunastu próbach kciuk „wie”. Reguły nigdy nie spisałeś, ale ją masz — i zbudowałeś ją z przykładów, których wynik znałeś. Algorytm uczący robi to samo, tylko na liczbach i z dużo większą cierpliwością.

Dlaczego to działa

Przykłady w tej lekcji pochodzą z prawdziwego zbioru medycznego: 569 guzów piersi, każdy opisany pomiarami jąder komórkowych oglądanych pod mikroskopem i każdy oceniony przez patomorfologa jako złośliwy (212 przypadków) albo łagodny (357). Na początek bierzemy tylko jeden z tych pomiarów i najprostszą regułę, jaką można sobie wyobrazić: „powyżej progu → złośliwy, poniżej → łagodny”.

Wybranie progu na oko to zgadywanie. Nauczenie się progu to sprawdzenie każdej możliwej wartości na przykładach i zostawienie tej, przy której pomyłek jest najmniej. Tym właśnie jest tu „uczenie”: poszukiwaniem, prowadzonym przez dane, ustawienia, które najlepiej sprawdza się na znanych przypadkach. Każdy model, który poznasz później — od prostej linii po model językowy z miliardami parametrów — działa według tego samego przepisu: rodzina możliwych reguł, sposób ich oceniania i szukanie najlepszej oceny.

Jest jeden haczyk i to najważniejsza myśl całej dziedziny. Reguła, która dobrze pasuje do znanych przypadków, wcale nie musi być dobra. Naprawdę obchodzą nas przypadki, których jeszcze nie widzieliśmy: następna pacjentka. Dlatego przed nauką chowamy część danych. Model uczy się na zbiorze treningowym, a potem dostaje ocenę na zbiorze testowym, którego nigdy nie widział. Oceną jest zwykle trafność, czyli odsetek przypadków, w których reguła ma rację:

trafność = poprawne przewidywania / wszystkie przewidywania

Reguła nauczona na zbiorze treningowym często wypada na teście trochę gorzej. Ta różnica to uczciwa cena spotkania z nowymi danymi, a wynik na teście to ten, który pokazałbyś lekarzowi.

Częsty błąd

Klasyczny błąd początkujących to ocenianie modelu po tym, jak radzi sobie z danymi, na których się uczył. Do tych przypadków algorytm miał wszelkie szanse się dopasować, więc wynik mu schlebia. Druga pułapka to zapominanie o punkcie odniesienia. Większość guzów w tym zbiorze to guzy łagodne, więc „reguła”, która zawsze odpowiada „łagodny”, ma rację w 357 przypadkach na 569, czyli niemal w dwóch trzecich. Dlatego nawet reguła, która prawie każdemu guzowi daje tę samą odpowiedź, wcale nie ma trafności bliskiej zera. Każdy nauczony model musi pobić tę banalną odpowiedź, zanim zasłuży na uwagę, a w medycynie musi też popełniać właściwy rodzaj błędów — wrócimy do tego w lekcji 6.

Uczenie maszynowe nie jest więc ani magią, ani rozumieniem. To zdyscyplinowane szukanie reguły, a po nim uczciwy egzamin na danych, których szukanie nie dotknęło. W następnej lekcji przyjrzymy się bliżej surowcowi — danym, cechom i etykietom — i temu, dlaczego sposób podziału danych zmienia wynik.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Poprawiasz regułę tak długo, aż ma rację dla każdego przykładu treningowego. Co to mówi o następnej pacjentce?
Pokaż odpowiedź

Poprawna odpowiedź: Niewiele — nowe przypadki oceni dopiero zbiór, którego reguła nie widziała

Trafność treningowa mierzy dopasowanie do znanych przypadków; tylko odłożone dane szacują wynik na nowych.

2. Co w tej lekcji znaczy „nauczyć się progu”?
Pokaż odpowiedź

Poprawna odpowiedź: Sprawdzić progi na przykładach z etykietami i zostawić ten z najmniejszą liczbą pomyłek

Uczenie to tutaj poszukiwanie prowadzone przez dane: wygrywa ustawienie z najlepszym wynikiem na przykładach treningowych.

3. Model ma rację w mniej więcej 60% przypadków na tych danych o guzach. Dlaczego to nie robi wrażenia?
Pokaż odpowiedź

Poprawna odpowiedź: Bo „zawsze łagodny” trafia już w prawie dwóch trzecich przypadków

Większość guzów w zbiorze jest łagodna, więc model musi najpierw pobić banalną odpowiedź większościową.

Najważniejsze wnioski

  • W uczeniu maszynowym reguła powstaje z przykładów z etykietami, a nie z głowy programisty.
  • Uczenie to poszukiwanie: rodzina reguł, sposób oceny i ustawienie z najlepszą oceną.
  • Model ocenia się na zbiorze testowym, którego nie widział; wynik treningowy mu schlebia.
  • Zawsze porównuj z banalnym punktem odniesienia, na przykład z odpowiedzią najczęstszą.

Głębiej: wzór, kod, praktyka

Matematyka

Trafność to accuracy = poprawne / n. Reguła progowa mówi „złośliwy”, gdy x > t. Uczenie wybiera t z najmniejszą liczbą pomyłek na wierszach treningowych: t* = argmin po t z (pomyłki na zbiorze treningowym). Różnić się mogą tylko środki między sąsiednimi posortowanymi wartościami, więc przeszukanie jest skończone i dokładne.

  • Wynik na zbiorze treningowym jest zawyżony: t* wybrano po to, żeby ta liczba była jak największa.
  • Wynik na zbiorze testowym jest nieobciążonym oszacowaniem przyszłej trafności, bo nic nie wybierano na jego podstawie.
  • Punktem odniesienia jest udział największej klasy, max(n₀, n₁) / n. Wyuczoną regułę warto zatrzymać tylko wtedy, gdy wyraźnie go przebija.
W kodzie (Python)

Liczebności i punkt odniesienia „zawsze łagodny” dla całego zbioru (lab używa tylko średniego promienia i podziału, więc jego 89,7% i 86,0% nie są tu odtwarzane):

from sklearn.datasets import load_breast_cancer
from sklearn.dummy import DummyClassifier

X, y = load_breast_cancer(return_X_y=True, as_frame=True)
print("tumours:", len(y))
print("malignant:", (y == 0).sum(), "benign:", (y == 1).sum())  # w sklearn 0 = złośliwy
always_benign = DummyClassifier(strategy="most_frequent").fit(X, y)
print(f"always 'benign': {always_benign.score(X, y):.1%}")

Wynik

tumours: 569
malignant: 212 benign: 357
always 'benign': 62.7%

Reguła, która w ogóle nie patrzy na guz, trafia w 62,7% przypadków. Tę poprzeczkę każda wyuczona reguła musi przeskoczyć.

Dla praktyka
  • Najpierw policz punkt odniesienia. DummyClassifier(strategy="most_frequent") to jedna linijka i mówi, co dla tych danych znaczy „dobrze”.
  • Dziel dane, zanim cokolwiek wyuczysz, także próg. Każdy wybór dokonany na wierszach testowych, nawet drobny, zawyża wynik testowy.
  • W klasyfikacji używaj stratify=y w train_test_split, żeby zbiór treningowy i testowy miały ten sam udział przypadków złośliwych.
  • Trafność liczy wszystkie pomyłki jednakowo. Przeoczony złośliwy guz i fałszywy alarm nie kosztują tyle samo, więc patrz też osobno na oba rodzaje błędów (lekcja 6).
  • Wynik na 171 wierszach testowych waha się o dwa albo trzy punkty (lekcja 2: błąd standardowy to około 2,7 punktu przy 86%). Nie traktuj tak małej różnicy jako dowodu, że jedna reguła jest lepsza.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: