Lensa ML

K-Nearest Neighbors

Langkah 1 dari 6: Tetangga Terdekat

Klasifikasi berdasarkan kedekatan

-3-2-10123-3-2-10123xyquery
x = -3x = 0.0x = 3
y = -3y = 0.3y = 3
Query
(0.0, 0.3)
Terdekat
Kelas C
Jarak
0.39
Prediksi
C

Dengan k=1, k-NN memberi query kelas dari satu tetangga terdekatnya: di sini kelas C, pada jarak 0,39. Geser slider untuk memindahkan query dan lihat tetangga terdekatnya berubah.

Geser slider x dan y untuk memindahkan bintang emas query di antara 45 titik training, 15 per kelas. Dengan k = 1, bidang terbagi menjadi sel-sel, satu sel untuk setiap titik training, dan setiap lokasi di dalam sel lebih dekat ke titik itu daripada ke titik lain. Pembagian ini disebut diagram Voronoi, dan garis batas 1-NN mengikuti tepi sel yang memisahkan titik dari kelas berbeda. Cover dan Hart menunjukkan pada 1967 bahwa, ketika training set tumbuh tanpa batas, error rate 1-NN paling tinggi dua kali error terendah yang bisa dicapai classifier apa pun.

Langkah 2 dari 6: Memilih k

Berapa tetangga yang perlu ditanya

-3-2-10123-3-2-10123xy
Suara
A
0
B
2
C
1
k = 1k = 3k = 15
k
3
Mayoritas
Kelas B
Suara
0/2/1
Keyakinan
67%

Dengan k=3, prediksi berasal dari suara mayoritas 3 tetangga. Detail lokal tetap terjaga, dengan sedikit penghalusan.

Geser k dari 1 ke 15 dan lihat hitungan suaranya. Query ada di (0.2, 0.5). Satu tetangga terdekatnya berkelas C, tetapi mulai k = 3 kelas B langsung menang. Nilai k genap bisa menghasilkan seri, jadi nilai ganjil umum dipakai untuk masalah dua kelas; demo ini memecah seri dengan memenangkan kelas yang lebih awal. k kecil memberi bias rendah dan variance tinggi, sedangkan k besar sebaliknya. Cara yang biasa untuk memilih k adalah cross-validation pada rentang nilai.

Langkah 3 dari 6: Metrik Jarak

Euclidean vs. Manhattan

-3-2-10123-3-2-10123xyd=0.49d=0.51d=0.74query
x = -3x = 0.5x = 3
y = -3y = 0.8y = 3
Metrik
Euclidean
d terdekat
0.49
d terjauh
0.86
Prediksi
B

Jarak Euclidean adalah panjang garis lurus √(Δx² + Δy²). Titik-titik yang berjarak sama membentuk lingkaran. Ganti ke Manhattan untuk membandingkan tetangga yang dipilihnya.

Klik Euclidean atau Manhattan, lalu geser query dengan slider untuk menemukan posisi yang membuat kedua metrik memilih tetangga berbeda. Keduanya adalah kasus khusus jarak Minkowski (Σ |x_i − y_i|^p)^(1/p), dengan p = 2 untuk Euclidean dan p = 1 untuk Manhattan. Jarak Manhattan tidak mengkuadratkan selisih, jadi satu selisih koordinat yang besar tidak terlalu berpengaruh. Untuk teks dan embedding, cosine distance adalah pilihan yang biasa karena membandingkan arah dan mengabaikan panjang. Dengan metrik apa pun, feature berskala lebih besar akan mendominasi kecuali data distandardisasi dulu.

Langkah 4 dari 6: Decision Boundary

Lanskap Voronoi

-3-2-10123-3-2-10123xy
k = 1k = 1k = 15
k
1
Akurasi train
100%
Tepi
91
Kehalusan
Rendah

Dengan k=1, garis batas menempel ke setiap titik dan menyisakan pulau di sekitar outlier. Akurasi train 100% hanya karena setiap titik adalah tetangga terdekatnya sendiri.

Geser k melewati nilai ganjil dari 1 sampai 15 dan lihat pulau-pulaunya menghilang. Dataset berisi 58 titik ini mencakup 7 outlier yang ditempatkan di wilayah kelas lain. Akurasi training turun dari 100% pada k = 1 ke 88% pada k = 3 dan bertahan di sana, karena sejak k = 3 suara mayoritas mengalahkan 6 dari 7 outlier itu. Akurasi training tidak banyak bercerita tentang k-NN, karena pada k = 1 setiap titik adalah tetangga terdekatnya sendiri dan skornya selalu sempurna. Nilai k sebaiknya dinilai dengan data held-out.

Langkah 5 dari 6: Pembobotan Jarak

Tetangga yang lebih dekat lebih berpengaruh

14%A · d=1.014%B · d=3.014%A · d=6.014%C · d=10.014%B · d=15.014%A · d=22.014%C · d=30.0query
Suara berbobot
A
43%
B
29%
C
28%
seragam (0)exp = 0.0tajam (5)
Eksponen
0.0
Prediksi
A
Keyakinan
43%
Rasio
1:1

Pembobotan seragam: 7 tetangga punya suara yang sama. Suara dihitung per kepala, jadi tetangga yang jauh sama berpengaruhnya dengan yang paling dekat.

Geser eksponen dari 0 ke 5, lalu klik tetangga mana saja untuk melihat hitungan weight-nya. Setiap suara diberi weight 1/d^p, dan jarak di sini berkisar dari 1 sampai 30. Kelas A sudah menang pada voting seragam dengan 3 dari 7 tetangga, dan pembobotan memperkuat hasil itu: pada p = 2, A memegang 89% suara. Pembobotan juga membantu regresi k-NN, karena prediksinya jadi lebih mengikuti target terdekat. Di scikit-learn, opsi weights="distance" memakai p = 1.

Langkah 6 dari 6: Curse of Dimensionality

Saat jarak kehilangan makna

queryterdekatterjauhJarak dari query0.300.310.671.191.201.211.241.271.271.281.401.431.491.621.6281%
2D2 dimensi200D
Dimensi
2
Terdekat
0.30
Terjauh
1.62
Selisih
81%

Di 2D, titik terdekat (0,30) jauh lebih dekat daripada titik terjauh (1,62), dengan selisih 81%. k-NN bisa membedakan tetangga dengan jelas.

Geser slider dimensi dari 2 ke 200 dan lihat kartu selisih mengecil. Sebanyak 15 titik diambil secara seragam dari sebuah kubus di semua dimensi. Di 2D, titik terjauh kira-kira 5 kali lebih jauh dari query dibanding titik terdekat; di 200D rasionya sekitar 1,1, dengan selisih 9%. Jarak tumbuh seperti √d, sedangkan sebarannya tumbuh jauh lebih lambat, jadi perbedaan relatif memudar. Data sungguhan biasanya berada dekat permukaan berdimensi lebih rendah. Itu sebabnya k-NN masih bekerja pada gambar atau embedding, sering kali setelah reduksi seperti PCA.

Apa itu k-nearest neighbors (k-NN)?

K-nearest neighbors adalah metode yang membuat prediksi dari k titik training yang paling dekat dengan query. Untuk klasifikasi, metode ini mengambil suara mayoritas dari label titik-titik itu. Untuk regresi, metode ini merata-ratakan nilai targetnya. Tidak ada tahap training selain menyimpan data, jadi semua pekerjaan terjadi saat prediksi.

k-NN adalah baseline yang umum, dan pencarian tetangga terdekat yang sama muncul di sistem rekomendasi ("pengguna yang mirip denganmu"), anomaly detection, imputation nilai yang hilang, dan vector search di balik retrieval-augmented generation, tempat embedding query dicocokkan dengan embedding dokumen terdekat. Hasilnya bergantung pada nilai k, metrik jarak, dan apakah skala antar-feature sebanding.

Ide utama

  • k-NN membuat prediksi dari label k titik training yang paling dekat dengan query.
  • k-NN menyimpan data training dan melakukan semua komputasinya saat prediksi.
  • k kecil mengikuti detail lokal dan noise, sedangkan k besar menghasilkan garis batas yang lebih halus dan lebih biased.
  • Metrik jarak dan feature scaling menentukan titik mana yang dihitung sebagai tetangga.
  • Distance weighting memberi tetangga yang lebih dekat suara yang lebih kuat.
  • Di dimensi tinggi, jarak-jarak saling mendekat, dan k-NN biasa kehilangan daya pembedanya.

Pertanyaan umum

Apakah k-NN termasuk supervised atau unsupervised?

Klasifikasi dan regresi k-NN bersifat supervised karena memakai titik training berlabel. k-NN sering tertukar dengan k-means, metode clustering yang unsupervised. Huruf k pada k-means adalah jumlah cluster, bukan jumlah tetangga.

Kenapa feature perlu di-scale untuk k-NN?

Jarak menjumlahkan selisih di semua feature, jadi feature yang nilainya ribuan akan menenggelamkan feature yang nilainya pecahan. Standardisasi tiap feature ke mean nol dan variance satu, atau penskalaan ulang ke [0, 1], memberi setiap feature pengaruh yang sebanding dalam menentukan siapa yang dihitung sebagai tetangga.

Bagaimana k-NN menangani dataset besar?

Pencarian brute-force membandingkan query dengan setiap titik training, yang biayanya O(n·d) per prediksi. Indeks berbasis tree seperti k-d tree dan ball tree mempercepatnya di dimensi rendah. Untuk jutaan vector berdimensi tinggi, indeks approximate nearest-neighbor seperti HNSW menukar sedikit akurasi dengan peningkatan kecepatan yang besar.

Apakah k-NN bisa dipakai untuk regresi?

Bisa. Regresi k-NN memprediksi rata-rata target dari k tetangga terdekat, dan bisa juga diberi weight berdasarkan jarak. Prediksinya konstan per bagian dan tidak bisa mengekstrapolasi di luar rentang target yang terlihat saat training.

Penjelasan terkait

Referensi

  1. Cover & Hart (1967), "Nearest Neighbor Pattern Classification", IEEE Transactions on Information Theory
  2. Beyer, Goldstein, Ramakrishnan & Shaft (1999), "When Is 'Nearest Neighbor' Meaningful?"
  3. James, Witten, Hastie & Tibshirani, "An Introduction to Statistical Learning", sections 2.2 and 3.5

Terakhir diperbarui