Menu
CoddyTech

Dopracuj zwycięski model

Część sekcji Uczenie nadzorowane ścieżki Machine Learning w Coddy. Lekcja 53 z 58.

k-NN wygrał z domyślną wartością 5 sąsiadów. Czy przy innej wartości k lepiej nazwałby pingwiny? Wyszukiwanie siatki ocenia każdą podaną przez ciebie wartość k za pomocą walidacji krzyżowej, tak jak w przypadku skanów guzów:

Średnia dokładność CV k-NN dla skanów guzów przy wartościach k od 1 do 29: maksimum wynosi 0.974 przy k = 3, oznaczone gwiazdką, a następnie wynik stopniowo spada do 0.946 przy k = 29

Podobnie jak w przypadku dostrajania potoku, k jest nazwane na podstawie jego kroku:

{"kneighborsclassifier__n_neighbors": [3, 5, 7]}

Poprawa mniejsza niż odchylenie standardowe między foldami może być dziełem przypadku. Strojenie również wykorzystuje tylko wiersze treningowe.

challenge icon

Wyzwanie

Średni

Twój potok k-NN to pipe, a default przechowuje jego dokładność CV dla k = 5. Program wczytuje wartości k do wypróbowania do ks.

  1. Wykonaj przeszukiwanie siatki tych wartości z 5 foldami na wierszach treningowych.
  2. Wypisz najlepsze k i jego dokładność CV, z dokładnością do 3 miejsc po przecinku.
  3. Wypisz wzrost względem k = 5, z dokładnością do 3 miejsc po przecinku.

Dla innej kolonii i siatki 3, 5, 9:

Best k: 3
CV accuracy: 0.969
Gain over k = 5: 0.009

Następnie wypróbuj tylko duże wartości, na przykład od 21 do 27. Czy dostrajanie zawsze pomaga?

Spróbuj swoich sił

import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.neighbors import KNeighborsClassifier

# Kolonia z Meet the Penguins, jej cechy i etykieta
penguins = pd.read_csv("penguins.csv")
numbers = ["bill_length_mm", "bill_depth_mm", "flipper_length_mm", "body_mass_g"]
text = ["island", "sex"]
X = penguins[numbers + text]
y = penguins["species"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, stratify=y, random_state=0)

# Z Prepare the Data: dwie ścieżki
number_steps = make_pipeline(SimpleImputer(strategy="median"), StandardScaler())
text_steps = make_pipeline(SimpleImputer(strategy="constant", fill_value="unknown"), OneHotEncoder())
prep = ColumnTransformer([("numbers", number_steps, numbers), ("words", text_steps, text)])

# Z Choose a Model: zwycięzca, k-NN z domyślną wartością k = 5
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()

# Wartości k do wypróbowania
n = int(input())
ks = []
for i in range(n):
    ks.append(int(input()))

# Napisz swój kod poniżej
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Uczenie nadzorowane

Poćwicz samodzielnie: Kompilator Python online