KNN Classifier

"Mayoritas Tetangga Menentukan Nasibmu"

1. Apa itu KNN Classifier?

Jika di Regresi kita mengambil Rata-rata nilai tetangga, di Klasifikasi kita melakukan Voting (Suara Terbanyak) dari $K$ tetangga terdekat.

Bayangkan Anda baru pindah rumah. Jika 3 dari 5 tetangga terdekat Anda suka makan Bakso, besar kemungkinan Anda juga akan diajak makan Bakso.

2. Visualisasi: Siapa Tetanggaku?

K=3

Dalam lingkaran di atas, ada 2 Biru dan 0 Merah (atau mungkin 1 Merah kalau radius diperbesar).
Hasil Voting: BIRU WIN!

3. Tips: Kenapa K Harus Ganjil?

Untuk klasifikasi 2 kelas (Biner), kita sangat disarankan memilih $K$ ganjil (3, 5, 7).

Alasan: Untuk menghindari SERI (Draw).
Jika $K=4$, bisa jadi hasilnya 2 Merah vs 2 Biru. Komputer akan bingung (biasanya pilih random atau yang pertama ditemukan).
Jika $K=5$, pasti ada pemenang (misal 3 vs 2).

4. Implementasi Python (Scikit-Learn)

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import numpy as np

# 1. Data [Usia, Gaji (Jutaan)] -> [Beli Mobil: 0=Tidak, 1=Ya]
X = [[20, 3], [25, 4], [30, 5], [40, 15], [50, 20]]
y = [0, 0, 0, 1, 1]

# 2. Scaling (WAJIB untuk KNN!)
# Karena Gaji (Jutaan) rentangnya beda dengan Usia (Puluhan)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 3. Model
# n_neighbors=3 (Ganjil)
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_scaled, y)

# 4. Prediksi Orang Baru (35 tahun, Gaji 10 Juta)
orang_baru = [[35, 10]]
orang_baru_scaled = scaler.transform(orang_baru)

prediksi = knn.predict(orang_baru_scaled)
print("Prediksi:", "Beli Mobil" if prediksi[0] == 1 else "Tidak Beli")