🏘️ K-Nearest Neighbors (KNN)

"Kamu adalah rata-rata dari 5 teman terdekatmu" — algoritma paling intuitif, tanpa fase training.

🎬 Animasi: KNN: Voting Tetangga Terdekat

Titik baru (bintang) mencari k tetangga terdekat, lalu mengikuti mayoritas kelas mereka.

📌 1. Konsep: Belajar dari Tetangga

Untuk mengklasifikasikan titik baru: cari k titik terdekat di data training, lalu voting mayoritas.

Contoh (k=3): o o • ← titik baru: 3 tetangga terdekat = 2×o, 1×x x → voting: o menang → titik baru = kelas o Algoritma: 1. Untuk titik baru x: hitung jarak ke SEMUA titik training 2. Ambil k terdekat 3. Voting mayoritas → label x (untuk regresi: rata-rata nilai k terdekat) Karakter khas: • "Lazy learner" — TIDAK ada fase training; semua komputasi saat prediksi • Bisa membentuk boundary SEMANGAT (non-linear) • SANGAT bergantung pada skala fitur → scaling wajib!

📌 2. Jarak & Memilih k

JarakRumusKarakter
Euclidean√(Σ(xᵢ-yᵢ)²)Paling umum; sensitif diagonal
ManhattanΣ|xᾢ-yᾢ|"Jalan kota"; lebih toleran
Cosine1 - cos(θ)Arah vektor; populer di teks (bab 17)
Efek nilai k: k kecil (1,3) → boundary bergerigi, fleksibel, RAPIH di train → tapi rapuh terhadap noise (OVERFITTING) k besar (21+) → boundary halus, toleran noise → tapi bisa "kabur" di area sempit (UNDERFITTING) Aturan praktis: k ganjil (anti-seri), mulai dari √n, lalu tuning.

📌 3. Contoh: KNN 3 Kelas + Bandingkan k

Output:

📌 4. Contoh: k=1 vs k=11 pada Data Moons

k=1 menghafal setiap titik (termasuk noise) → overfitting. k besar menghaluskan boundary. Lihat perbedaannya:

Output:
⚠️ KNN lambat saat prediksi (hitung jarak ke semua data). Untuk data besar, praktisi memakai indeks: KD-tree, ball tree, atau approximate nearest neighbor (HNSW).

🧠 Latihan

  1. Ubah jarak Euclidean menjadi manhattan() di contoh 1. Apakah akurasinya berubah signifikan?
  2. Buat KNN untuk REGRESI: prediksi = rata-rata nilai k terdekat. Uji di make_regression() dan bandingkan RMSE-nya dengan model "tebak mean".
  3. Tambahkan distance weighting: bobot suara = 1/jarak. Apakah membantu di area berbatasan?
  4. Jelaskan kenapa KNN wajib scaling. Buat contoh kecil: 2 fitur dengan skala 0–1 dan 0–1000, titik di antara dua klaster.