ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 1.2 · 3 z 33 gotowych lekcji · 10 min

Dane, cechy, etykiety i podział zbioru

W skrócie

Zbiór danych to tabela przykładów, cech i etykiet. Lekcja wyjaśnia, czemu zbiór testowy musi być schowany i czemu jego wielkość decyduje o zaufaniu do wyniku.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 1.1: Czym jest uczenie maszynowe? 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ą.

Z lekcji 1.1: Czym jest uczenie maszynowe? 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.

Jeśli nauczycielka da klasie dokładnie te pytania, które pojawią się na sprawdzianie, i wszyscy dostaną szóstki, to co właściwie zmierzyła? Pamięć do tych pytań i nic więcej. Uczenie maszynowe ma ten sam problem za każdym razem, a rozwiązuje go zaskakująco prosto: część pytań trzyma zamkniętą w szufladzie.

Przewidź, potem sprawdź Ten sam model, 20 różnych losowań podziału (30% biopsji w teście, czyli 171 sztuk). Jak bardzo wynik na teście zmienia się między losowaniami?
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ź: Wyraźnie: najgorsze i najlepsze losowanie dzielą kilka punktów procentowych

Przy 30% w teście wynik waha się od 90,1% do 96,5% (6,4 pkt proc.), choć model i dane są te same; zmienia się tylko to, które biopsje trafiły do testu. Jeden wynik testowy to więc nie prawda objawiona.

Spróbuj

  • Ustaw suwak udziału testu na małą wartość, a potem przesuwaj suwak ziarna przez kilka pozycji. Zobacz, jak bardzo zmienia się trafność na teście, choć model i dane są te same.
  • Teraz ustaw suwak udziału testu na dużą wartość i powtórz zabawę z ziarnem. Trafność skacze bardziej czy mniej niż poprzednio?
  • Zostaw ziarno w spokoju i przesuń suwak udziału testu od jednego końca do drugiego. Zauważ, jak kurczy się liczba wierszy treningowych, gdy rośnie zbiór testowy.
  • Znajdź ziarno, przy którym trafność na teście jest najwyższa — i zapytaj siebie, czy wolno ci ten wynik podać.

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

Pomysł w prostych słowach

Prawie każdy zbiór danych w tym kursie to tabela. Każdy wiersz to jeden przykład: jeden guz, jeden pacjent, jeden pasażer, jedno wino. Każda kolumna to cecha: zmierzona właściwość, na przykład promień, ciśnienie krwi, wiek albo zawartość alkoholu. Jedna wyjątkowa kolumna zawiera etykietę — odpowiedź, którą model ma przewidzieć, na przykład „złośliwy” albo „przeżył”. Model to reguła, która z cech wiersza wyprowadza jego etykietę.

Zanim zacznie się nauka, wiersze się tasuje i dzieli. Większa część, zbiór treningowy, służy modelowi do nauki. Mniejsza, zbiór testowy, zostaje zamknięta i użyta raz, na końcu, żeby oszacować, jak model poradzi sobie z wierszami, których nigdy nie widział. To właśnie pytania w szufladzie. Ważne, żeby tasowanie było naprawdę losowe: gdyby do testu trafiły na przykład same ostatnie wiersze tabeli, a dane były posortowane według daty albo diagnozy, test sprawdzałby zupełnie inne przypadki niż te, na których model się uczył.

Wyobraź sobie kucharkę, która wymyśla nową zupę. Próbuje jej co chwilę w trakcie gotowania — to trening. Ale żeby wiedzieć, czy zupa posmakuje gościom, podaje ją kilku osobom, które jej wcześniej nie jadły i nie mają powodu być uprzejme. Ich werdykt to wynik testu. Gdyby pytała tylko siebie, zupa zawsze byłaby doskonała.

Dlaczego to działa

Zbiór testowy jest coś wart tylko dlatego, że model go nie widział. Dopóki wiersze treningowe i testowe pochodzą z tego samego źródła i zostały podzielone losowo, wiersze testowe zachowują się jak przyszłe przypadki, a trafność na teście jest uczciwym oszacowaniem przyszłej trafności.

To jednak tylko oszacowanie — i tę część początkujący słyszą rzadko. Wynik testu zależy od tego, które wiersze akurat trafiły do zbioru testowego. Potasuj dane z innym ziarnem losowania, a dostaniesz inny zbiór testowy i inny wynik — przy dokładnie tym samym modelu i tych samych danych. Przy małym zbiorze testowym wynik potrafi wyraźnie skakać, bo garstka nietypowych wierszy mocno rusza procentem. Statystyka podaje przybliżoną skalę tego chwiania. Dla trafności p zmierzonej na n wierszach testowych błąd standardowy wynosi około

SE ≈ √(p · (1 − p) / n)

więc czterokrotnie większy zbiór testowy zmniejsza chwianie tylko o połowę. Dlatego pojedynczy wynik testu nigdy nie jest całą prawdą.

Jest też kompromis. Każdy wiersz włożony do zbioru testowego to wiersz, z którego model nie może się uczyć. Ogromny zbiór testowy daje wiarygodną ocenę modelowi, który nauczył się za mało; malutki daje dobrze wyuczonemu modelowi ocenę niepewną. Zwykle do testu trafia od jednej piątej do jednej trzeciej wierszy, a następne lekcje pokażą sprytniejsze wyjścia z tego dylematu.

Częsty błąd

Najbardziej kuszący błąd to wypróbować wiele podziałów i zostawić ten z najładniejszym wynikiem. Zbiór testowy posłużył wtedy do podjęcia decyzji, więc podany wynik jest zbyt optymistyczny. Cichsza odmiana tego samego błędu to wyciek danych: informacja z wierszy testowych przedostaje się do treningu, na przykład gdy średnie do skalowania albo uzupełniania braków liczysz na całej tabeli przed podziałem. Zasada jest twarda: najpierw podział, potem wszystko inne, wyłącznie na wierszach treningowych.

Mając czysty podział, możemy wreszcie zbudować prawdziwy model. W następnej lekcji dopasujemy najprostszy z możliwych — prostą linię przez chmurę punktów.

Quiz

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

1. Dlaczego zbioru testowego nie wolno ruszać aż do końca?
Pokaż odpowiedź

Poprawna odpowiedź: Bo szacuje wynik na nowych danych, tylko jeśli nie oparto na nim żadnej decyzji

Gdy zbiór testowy wpłynął na jakikolwiek wybór, jego wynik przestaje uczciwie zastępować przyszłe dane.

2. Zmieniasz tylko ziarno losowania podziału, a trafność na teście się zmienia. Co to pokazuje?
Pokaż odpowiedź

Poprawna odpowiedź: Że wynik testu zależy od tego, które wiersze akurat trafiły do testu

Inne ziarno daje inne wiersze testowe, więc wynik waha się przypadkowo, tym bardziej, im mniejszy zbiór testowy.

3. Ile kosztuje bardzo duży zbiór testowy?
Pokaż odpowiedź

Poprawna odpowiedź: Zostaje mniej wierszy na uczenie modelu, bo reszta jest odłożona

Każdy wiersz przeniesiony do testu to wiersz, z którego model się nie nauczy, więc większy test oznacza słabiej wytrenowany model.

Najważniejsze wnioski

  • Zbiór danych to tabela: wiersze to przykłady, kolumny to cechy, jedna kolumna to etykieta.
  • Najpierw dzielisz dane; model uczy się na zbiorze treningowym i raz dostaje ocenę na testowym.
  • Wynik testu to oszacowanie: inny losowy podział daje inną liczbę, zwłaszcza przy małym teście.
  • Wybieranie podziału z najlepszym wynikiem albo obróbka danych na całej tabeli to wyciek testu do treningu.

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

Matematyka

Trafność testowa to średnia z n wyników „dobrze albo źle”. Jeśli prawdziwa trafność to p, to zmierzony wynik zmienia się między podziałami z błędem standardowym SE ≈ √(p · (1 − p) / n).

  • n to liczba wierszy testowych, a nie rozmiar całej tabeli.
  • SE maleje z √n: cztery razy więcej wierszy testowych zmniejsza go o połowę.
  • Jest największy dla p = 0,5 i maleje, gdy p zbliża się do 0 albo 1.
  • Około dwie trzecie wyników mieści się w odległości jednego SE od p, a około 95% w odległości dwóch.
  • Ten SE obejmuje tylko wybór wierszy testowych. Nic nie mówi o różnicy między danymi, które masz, a tymi, które spotkasz później.
W kodzie (Python)

Układ z laba: regresja logistyczna na 10 cechach „mean”, 30% biopsji w zbiorze testowym (171 wierszy), 20 różnych podziałów:

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X = X.filter(like="mean ")  # 10 cech „mean”, jak w labie
accs = []
for seed in range(20):  # ten sam model, 20 różnych podziałów
    Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.3, stratify=y, random_state=seed)
    model = make_pipeline(StandardScaler(), LogisticRegression()).fit(Xtr, ytr)
    accs.append(model.score(Xte, yte))
n, p = len(yte), float(np.mean(accs))
print(f"test rows: {n}")
print(f"test accuracy: min {min(accs):.1%}, max {max(accs):.1%}")
print(f"standard error: {np.sqrt(p * (1 - p) / n):.1%} (n={n}), {np.sqrt(p * (1 - p) / (4 * n)):.1%} (n={4 * n})")

Wynik

test rows: 171
test accuracy: min 90.6%, max 97.1%
standard error: 1.8% (n=171), 0.9% (n=684)

scikit-learn tasuje inaczej niż lab, więc minimum i maksimum nieco różnią się od labowych 90,1% i 96,5%. Liczba 684 jest hipotetyczna: wymaga więcej wierszy niż 569 w danych, więc pokazuje tylko wzór. Wniosek jest ten sam: wynik rusza się o kilka punktów mimo tego samego modelu i tych samych danych, a czterokrotnie więcej wierszy testowych zmniejsza błąd standardowy o połowę.

Dla praktyka
  • Najpierw podziel, potem dopasowuj skalery i imputery tylko na wierszach treningowych. Pipeline robi to za ciebie i nie wpuszcza wierszy testowych do żadnego dopasowywanego kroku.
  • Ustaw random_state, żeby wynik dało się powtórzyć, ale wybierz go raz, zanim zobaczysz wyniki. Próbowanie ziaren, aż któreś wygląda dobrze, to podglądanie zbioru testowego.
  • W klasyfikacji podaj stratify=y, żeby rzadka klasa nie zniknęła z małego zbioru testowego.
  • Wiersze, które do siebie należą, muszą trafić razem. Kilka wierszy jednego pacjenta powinno wylądować po tej samej stronie, a dane uporządkowane w czasie dziel według czasu, nie losowo. Inaczej zbiór testowy przecieka.
  • Podawaj wynik razem z rozmiarem testu, a przy małych danych powtórz podział albo użyj walidacji krzyżowej (lekcja 8), żeby pokazać rozrzut.

Więcej w Atlasie

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