Menu
CoddyTech

Optimalkan Model Terbaik

Termasuk bagian Pembelajaran Terawasi dalam perjalanan Machine Learning di Coddy. Pelajaran 53 dari 58.

k-NN unggul dengan nilai bawaan 5 tetangga. Apakah nilai k lain akan lebih baik dalam mengelompokkan penguin? Pencarian grid menghitung skor setiap nilai k yang kamu cantumkan dengan validasi silang, seperti contoh berikut untuk pemindaian tumor:

Akurasi rata-rata validasi silang k-NN pada pemindaian tumor untuk k dari 1 hingga 29: akurasi mencapai puncak pada k = 3 dengan nilai 0.974, ditandai dengan bintang, lalu menurun hingga 0.946 pada k = 29

Seperti pada Menyetel Pipeline, k diberi nama berdasarkan langkahnya:

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

Peningkatan yang lebih kecil daripada std pada fold bisa jadi hanya karena keberuntungan. Penyetelan juga hanya menggunakan baris pelatihan.

challenge icon

Tantangan

Sedang

Pipeline k-NN-mu adalah pipe, dan default menyimpan akurasi validasi silangnya dengan k = 5. Program membaca nilai k yang akan dicoba ke dalam ks.

  1. Lakukan pencarian grid pada nilai-nilai tersebut dengan 5 fold pada baris data latih.
  2. Cetak nilai k terbaik dan akurasi validasi silangnya, dengan 3 angka desimal.
  3. Cetak peningkatan dibandingkan k = 5, dengan 3 angka desimal.

Untuk koloni lain dan grid 3, 5, 9:

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

Lalu coba hanya nilai-nilai besar, seperti 21 sampai 27. Apakah penyetelan selalu membantu?

Coba sendiri

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

# Koloni dari Meet the Penguins, fitur dan labelnya
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)

# Dari Prepare the Data: dua jalur
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)])

# Dari Choose a Model: pemenangnya, k-NN dengan nilai bawaan k = 5
pipe = make_pipeline(prep, KNeighborsClassifier())
default = cross_val_score(pipe, X_train, y_train, cv=5).mean()

# Nilai k yang akan dicoba
n = int(input())
ks = []
for i in range(n):
    ks.append(int(input()))

# Tulis kodemu di bawah ini
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pembelajaran Terawasi

Latihan sendiri: Compiler Python online