Materi
Clustering, k-NN, dan deteksi pencilan berbasis jarak bertumpu pada satu pertanyaan: seberapa jauh dua data. Dua ukuran paling dasar untuk data numerik adalah jarak Euclidean, yaitu panjang garis lurus √Σ(xᵢ − yᵢ)², dan jarak Manhattan, yaitu jumlah selisih mutlak Σ|xᵢ − yᵢ|, seperti berjalan di jalan kota yang berbelok siku. Dokumentasi DistanceMetric scikit-learn mencantumkan keduanya dengan nama "euclidean" dan "manhattan"; scipy menyebut yang kedua cityblock.
Contoh: titik (1, 2) dan (4, 6) berselisih 3 dan 4. Euclidean = √(9 + 16) = 5, sedangkan Manhattan = 3 + 4 = 7. Manhattan tidak pernah lebih kecil dari Euclidean untuk dua titik yang sama. Pilihan ukuran bisa mengubah siapa tetangga terdekat: selisih yang menumpuk di satu atribut dihukum lebih berat oleh Euclidean karena dikuadratkan, sedangkan selisih yang merata di beberapa atribut dihukum lebih berat oleh Manhattan.
Jarak peka skala. Atribut gaji dalam rupiah akan menenggelamkan atribut umur dalam tahun, jadi atribut dinormalisasi dulu dengan min-max atau z-score dari pelajaran 4 sebelum jaraknya dihitung.
import numpy as np
from scipy.spatial.distance import cityblock
a, b = np.array([1, 2]), np.array([4, 6])
print(np.linalg.norm(a - b)) # 5.0
print(cityblock(a, b)) # 7