Menu
CoddyTech

Penskalaan untuk Tetangga

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

k-NN mengukur jarak, jadi fitur dengan angka besar mengalahkan fitur lainnya, seperti yang telah diperingatkan di bagian 2. Di sini, jarak ke sungai dalam meter mengalahkan elevasi:

Dua peta yang menunjukkan 160 rumah, jarak ke sungai pada sumbu mendatar dan elevasi pada sumbu tegak, yang terendam banjir atau kering. Data mentah: peta terbagi menjadi garis-garis vertikal berdasarkan jarak saja, dengan akurasi 0.6. Data yang diskalakan: rumah yang terendam banjir berada di sudut rendah dekat sungai, dengan akurasi 0.925

Lakukan penskalaan terlebih dahulu. Fit scaler hanya pada baris data latih, lalu transform kedua set:

scaler = StandardScaler()
X_train_s = scaler.fit_transform(X_train)
X_test_s = scaler.transform(X_test)
model = KNeighborsClassifier()
model.fit(X_train_s, y_train)
print(model.score(X_test_s, y_test))

Ini mencetak 0.925, naik dari 0.6. Baris pengujian tetap tidak terlihat: scaler tidak mempelajari apa pun darinya.

challenge icon

Tantangan

Mudah

Smart meter menebak alat yang sedang digunakan berdasarkan dayanya (watt) dan lama penggunaannya (menit), dalam meter.csv. Kode awal membaca k dan mencetak akurasi k-NN pada fitur mentah.

  1. Latih StandardScaler menggunakan baris data pelatihan, lalu transformasikan kedua set.
  2. Latih model k-NN dengan k yang sama menggunakan baris yang telah diskalakan; cetak akurasinya hingga 3 angka desimal.
  3. Cetak peningkatannya.

Untuk rumah lain dan k = 5:

Unscaled accuracy: 0.65
Scaled accuracy: 0.875
Scaling gains 0.225

Coba sendiri

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler

# Satu baris untuk setiap penggunaan alat: daya dalam watt, durasi dalam menit, dan jenis alatnya
meter = pd.read_csv("meter.csv")
X = meter[["watts", "minutes"]]
y = meter["appliance"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
k = int(input())

# k-NN pada fitur mentah
raw_model = KNeighborsClassifier(n_neighbors=k)
raw_model.fit(X_train, y_train)
raw = raw_model.score(X_test, y_test)
print(f"Unscaled accuracy: {round(raw, 3)}")

# 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