ML Atlas

Blog · Na start ·

Pierwszy projekt ML na otwartych danych krok po kroku

W skrócie

Sześć kroków na otwartych danych o pingwinach: pytanie, dane, podział, zgadywanie, model, ocena. Kilkanaście linijek Pythona i wynik 95,1% do sprawdzenia.

Krótka odpowiedź

Pierwszy projekt uczenia maszynowego zrób na małym, otwartym i czystym zbiorze danych, w sześciu krokach: pytanie, dane, podział, zgadywanie bez modelu, model, ocena. Na zbiorze Palmer Penguins całość to kilkanaście linijek Pythona w darmowym notatniku w przeglądarce (Google Colab albo notatnik Kaggle). Wynik: drzewo decyzyjne rozpoznaje gatunek 98 ze 103 pingwinów, których nie widziało (95,1%), a zgadywanie bez modelu trafia 45 razy (43,7%).

Te same kroki, bez kodu i z suwakami, przejdziesz w lekcji Cały proces w 15 minut. Liczby wyjdą Ci identyczne, bo lekcja liczy dokładnie ten podział.

Dlaczego pingwiny

Dobry pierwszy zbiór jest mały, ma jasne pytanie i nie wymaga godzin czyszczenia. Palmer Penguins to 344 pingwiny trzech gatunków (Adelie, Chinstrap, Gentoo) z czterema pomiarami ciała, zebrane przez badaczy na Antarktydzie i udostępnione na licencji CC0, czyli bez ograniczeń. Inne dobre zbiory na start też mają w Atlasie swoje strony: irysy (150 kwiatów), wina (178 win) i guzy piersi (569 biopsji).

Krok 1. Pytanie

Zapisz jednym zdaniem, co przewidujesz i z czego: gatunek pingwina z czterech wymiarów ciała. Dobre pytanie da się sprawdzić, bo prawdziwą odpowiedź znamy dla każdego pingwina w danych.

Krok 2. Dane

Otwórz nowy notatnik i wczytaj plik prosto z repozytorium autorów zbioru:

  • import pandas as pd
  • df = pd.read_csv("https://raw.githubusercontent.com/allisonhorst/palmerpenguins/main/inst/extdata/penguins.csv")
  • cechy = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
  • df = df.dropna(subset=cechy)

Plik ma 344 wiersze. 2 pingwiny nie mają żadnego pomiaru, więc zostają 342. Zawsze najpierw obejrzyj dane (df.head(), df.isna().sum()): to tu najczęściej czeka niespodzianka.

Krok 3. Podział

Chowasz część pingwinów przed modelem. Tylko na nich sprawdzisz, czy model nauczył się reguły, a nie zapamiętał odpowiedzi.

  • from sklearn.model_selection import train_test_split
  • X, y = df[cechy], df["species"]
  • X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, stratify=y, random_state=1)

Model uczy się na 239 pingwinach, a 103 (30%) czekają na sprawdzian. stratify=y pilnuje tych samych proporcji gatunków w obu częściach. random_state=1 sprawia, że dostaniesz dokładnie ten sam podział co my.

Krok 4. Zgadywanie bez modelu

Zanim zbudujesz model, policz, ile daje odpowiedź bez myślenia: „zawsze najczęstszy gatunek”.

  • from sklearn.dummy import DummyClassifier
  • zgad = DummyClassifier(strategy="most_frequent").fit(X_train, y_train)
  • zgad.score(X_test, y_test)

Wynik: 45 ze 103, czyli 43,7%. To Twój punkt odniesienia. Bez niego nie wiesz, czy wynik modelu to dużo, czy mało.

Krok 5. Model

Drzewo decyzyjne zadaje pingwinowi pytania tak/nie o wymiary. Pozwólmy mu na najwyżej 2 pytania.

  • from sklearn.tree import DecisionTreeClassifier
  • model = DecisionTreeClassifier(max_depth=2).fit(X_train, y_train)

Krok 6. Ocena

  • model.score(X_test, y_test)

Drzewo trafia 98 ze 103 schowanych pingwinów: 95,1%, o 51,5 punktu procentowego więcej niż zgadywanie. Z jednym pytaniem (max_depth=1) trafia 81 razy (78,6%).

Trzy błędy, które warto popełnić świadomie

  • Ocena na danych do nauki. Ustaw max_depth=3. Na pingwinach do nauki drzewo ma 97,5%, ale na schowanych tylko 93,2%, mniej niż z dwoma pytaniami. Trzecie pytanie zaczęło zapamiętywać pojedyncze pingwiny. To przeuczenie.
  • Brak punktu odniesienia. Bez kroku 4 wynik 95,1% nic nie mówi. Przy innych danych tyle samo może dawać zgadywanie, gdy jedna klasa stanowi 95% przykładów.
  • Zaglądanie do testu. Jeśli wybierasz max_depth, patrząc na wynik na schowanych pingwinach, test przestaje być uczciwy. Do wybierania ustawień służy walidacja krzyżowa, a o pokrewnej pułapce przeczytasz w haśle wyciek danych.

Co dalej

  • Zmień zbiór: spróbuj tych samych kroków na irysach albo winach (w scikit-learn: load_iris, load_wine).
  • Start tutaj: mapa na pierwsze 15 minut i darmowe materiały z zewnątrz.
  • Kurs ML od zera: każdy z sześciu kroków dostaje osobny moduł.
  • Newsletter „ML jak dziecku”: jedno pojęcie w mailu, z linkiem do eksperymentu.

Źródła

Tagi: pierwszy-projekt python scikit-learn pingwiny na-start

W Atlasie