ML Atlas

Newsletter · kurs „ML w 10 dni” · dzień 2 z 10 · ok. 2 min czytania

Nie sprawdza się ucznia na pytaniach, które zna

W skrócie

Dzień 2 kursu mailowego „ML w 10 dni”: podział danych na trening i test, czyli jak uczciwie sprawdzić model i dlaczego jeden wynik testowy ma w sobie los.

Pojęcie: Trening i test ·

1. Haczyk

Nauczyciel daje na sprawdzianie dokładnie te zadania, które były w pracy domowej. Cała klasa dostaje piątki. Czy to znaczy, że klasa umie matematykę? Wiemy tylko tyle, że zapamiętała pracę domową.

2. Przewidź

Ten sam model, te same dane o biopsjach, 20 losowań podziału. Za każdym razem 30% biopsji, czyli 171 sztuk, trafia do testu. Jak bardzo zmienia się wynik testowy między losowaniami: mniej niż o punkt procentowy, o kilka punktów czy o ponad dwadzieścia?

Zapamiętaj swoją odpowiedź. Rozwiązanie jest niżej.

3. Wyjaśnienie

Przed nauką odkładamy część danych na bok. Model się na nich nie uczy. Na końcu sprawdzamy go właśnie na nich, bo udają nowe przypadki, których model nie widział. To jest zbiór testowy, a reszta to zbiór treningowy.

Rozwiązanie. Wynik testowy waha się od 90,1% do 96,5%, czyli o 6,4 punktu procentowego, choć model i dane są te same. Zmienia się tylko to, które biopsje trafiły do testu. Jeden wynik testowy to więc pomiar z szumem, a nie prawda objawiona.

Gdy chcesz wybierać ustawienia modelu, potrzebujesz jeszcze trzeciej części danych, zbioru walidacyjnego. Test zostaje na sam koniec, jak zaklejona koperta z odpowiedziami.

Sprawdź sam. W lekcji losujesz podział wiele razy i patrzysz, jak skacze wynik.

4. Częsty błąd

Zaglądanie do testu wiele razy. Gdy wybierasz model albo jego ustawienia według wyniku na teście, test po cichu staje się częścią treningu i przestaje być uczciwy. Kopertę otwiera się raz.

5. Gdzie ta analogia się psuje

Nauczyciel może ułożyć nowy sprawdzian w każdej chwili. Nowych danych często nie ma: zbiór biopsji liczy 569 przypadków i każda biopsja odłożona do testu to biopsja mniej do nauki. Dlatego podział to zawsze kompromis.

6. Dlaczego to ważne w pracy

W scikit-learn podział robi train_test_split. Parametr random_state sprawia, że ten sam podział da się powtórzyć, a stratify pilnuje proporcji klas. Na Kaggle zbiorem testowym jest ukryta część danych, na której liczy się tabela wyników.

7. Pytanie powtórkowe

Odpowiedź na pytanie z poprzedniego dnia

Regułę programisty wymyśla człowiek, a regułę modelu algorytm wyciąga z przykładów z odpowiedziami. Dlatego model jest dokładnie tak dobry, jak przykłady, na których się uczył.

Nowe pytanie

Dlaczego nie wolno oceniać modelu na tych samych danych, na których się uczył?

Odpowiedź w następnym dniu kursu.