Kursus Matematika untuk AI · Pelajaran 43 dari 180

Jarak bergantung pada geometri yang dipilih

Turunkan jarak dari norma, bandingkan pencarian tetangga terdekat berukuran kecil di bawah L1, L2, dan L-infinity, lalu debug pilihan metrik dalam sistem AI.

Bagikan artikel ini

Ketika router tiket dukungan, sistem rekomendasi, atau sistem pengambilan informasi mencari contoh tersimpan yang “paling dekat”, sistem itu sedang membuat pilihan geometris. Sebuah titik yang paling dekat ketika setiap koordinat berkontribusi secara terpisah dapat kalah dari titik lain ketika koordinat digabungkan berdasarkan panjang kuadrat. Algoritmanya tidak menjadi inkonsisten; makna “dekat” yang berubah.

Di akhir pelajaran ini, Anda akan dapat menurunkan jarak dari norma, menghitung peringkat tetangga terdekat berukuran kecil di bawah beberapa metrik, serta mengenali keputusan prapemrosesan dan penanganan seri yang membuat peringkat itu bermakna.

Hasil belajar: Menurunkan jarak dari norma dan membandingkan tetangga terdekat.

Pelajaran ini dibangun di atas Pelajaran 040: L1, L2, dan L-infinity Memaknai Besar Secara Berbeda, yang memperkenalkan beberapa cara untuk mengukur ukuran satu vektor. Bagian 3.3 dari buku resmi Mathematics for Machine Learning menyediakan rujukan matematis. Kumpulan data, perhitungan, kode, visual, dan asesmen di sini adalah karya asli.

Titik terdekat dimulai dari perpindahan

Misalkan x=(x1,…,xn)x=(x_1,\ldots,x_n) dan y=(y1,…,yn)y=(y_1,\ldots,y_n) adalah dua titik dalam Rn\mathbb{R}^n. Setiap koordinat adalah posisi fitur; nn adalah jumlah fitur. Untuk menanyakan seberapa jauh xx dari yy, kurangkan terlebih dahulu koordinat demi koordinat:

x−y=(x1−y1,…,xn−yn).x-y=(x_1-y_1,\ldots,x_n-y_n).

Selisih ini adalah sebuah vektor perpindahan. Vektor tersebut menyatakan seberapa jauh satu titik harus bergerak pada setiap koordinat untuk sampai ke titik lainnya. Urutan pengurangan mengubah tanda perpindahan, tetapi norma menghasilkan ukuran yang sama di kedua arah karena ∥v∥=∥−v∥\lVert v\rVert=\lVert -v\rVert.

Nama-nama tersebut menggambarkan aturan pergerakan yang berbeda. L1, yang sering disebut jarak Manhattan, menjumlahkan perpindahan pada setiap koordinat. L2 mengukur panjang garis lurus dari perpindahan. L-infinity hanya menanyakan perpindahan terbesar pada satu koordinat. Model yang menggunakan salah satu ukuran ini sedang menyatakan jenis perpindahan mana yang dianggap mahal.

Rujukan Bagian 3.3 juga menghubungkan hasil kali dalam dengan norma melalui ∥v∥=⟨v,v⟩\lVert v\rVert=\sqrt{\langle v,v\rangle}. Dengan dot product biasa, ini adalah norma Euclidean, sehingga d2(x,y)=⟨x−y,x−y⟩d_2(x,y)=\sqrt{\langle x-y,x-y\rangle}. Ada satu hal penting: konstruksi jarak berlaku untuk norma apa pun. L1 adalah norma yang valid dan menginduksi metrik yang valid, meskipun dalam pengertian ruang vektor real yang biasa norma itu tidak diinduksi oleh hasil kali dalam.

Mengapa pengurangan harus dilakukan lebih dahulu

Jarak membandingkan dua lokasi melalui satu perpindahan. Jarak bukan selisih ukuran masing-masing lokasi. Misalnya, jika x=(1,1)x=(1,1) dan y=(1,−1)y=(1,-1), kedua titik memiliki norma L2 2\sqrt{2}, tetapi

x−y=(0,2),d2(x,y)=02+22=2.x-y=(0,2),\qquad d_2(x,y)=\sqrt{0^2+2^2}=2.

Menghitung ∥x∥2−∥y∥2=0\lVert x\rVert_2-\lVert y\rVert_2=0 akan menghapus fakta bahwa kedua titik berjarak dua unit secara vertikal. Resep mental yang aman adalah kurangkan dahulu, lalu terapkan norma yang dipilih.

Titik yang sama dapat memiliki tetangga terdekat yang berbeda

Pertimbangkan titik kueri q=(0,0)q=(0,0) dan tiga catatan kandidat dalam representasi dua fitur. Koordinatnya sengaja kecil dan tanpa unit: koordinat tersebut mewakili nilai setelah suatu representasi fitur dipilih, bukan pengertian universal tentang kemiripan.

TitikDeskripsiKoordinat
AAkasus dominan sumbu(6,0)(6,0)
BBkasus seimbang(4,4)(4,4)
CCkasus campuran(5,2)(5,2)

Peringkatnya berubah karena norma-norma tersebut memberi nilai berbeda pada bentuk perpindahan. L1 memilih titik AA yang dominan sumbu di sini karena total perpindahan koordinatnya paling kecil. L2 memilih CC: gabungan kedua koordinatnya membentuk ruas garis lurus yang lebih pendek daripada diagonal BB dan ruas horizontal panjang AA. L-infinity memilih BB karena tidak ada satu pun koordinat yang berpindah lebih dari 44.

Satu kueri, tiga peta tetangga

Tabel ini adalah cadangan semantik yang lengkap: jarak yang lebih kecil berarti lebih dekat ke kueri q = (0, 0).
KandidatKoordinatL1jumlah perpindahan absolutL2panjang garis lurusL-infinityperpindahan koordinat terbesar
A dominan sumbu(6, 0)6.000peringkat 16.000peringkat 36.000peringkat 3
B seimbang(4, 4)8.000peringkat 35.657peringkat 24.000peringkat 1
C campuran(5, 2)7.000peringkat 25.385peringkat 15.000peringkat 2
Dua kandidat terdekatA → CC → BB → C

Angka di dalam lingkaran memberikan peringkat untuk metrik tersebut. Segmen putus-putus menunjuk ke kandidat terdekat; dua peringkat pertama diberi garis tepi agar peta tidak bergantung pada warna saja.

Satu kueri, tiga peta tetanggaUntuk L1, urutannya A lalu C lalu B. Untuk L2, urutannya C lalu B lalu A. Untuk L-infinity, urutannya B lalu C lalu A. Kueri berada di titik asal pada setiap panel.L10246024fitur 1fitur 2kueri qA1B3C2L20246024fitur 1fitur 2kueri qA3B2C1L-infinity0246024fitur 1fitur 2kueri qA3B1C2

Untuk L1, urutannya A lalu C lalu B. Untuk L2, urutannya C lalu B lalu A. Untuk L-infinity, urutannya B lalu C lalu A. Kueri berada di titik asal pada setiap panel.

Geometri mengubah peta tetangga meskipun koordinat kueri dan kandidat tetap sama.

Tabel dan label peringkat membuat kesimpulannya tersedia tanpa perlu membaca SVG. Visual tersebut menambahkan satu petunjuk spasial: titik akhir segmen putus-putus berubah saat metrik berubah, sedangkan koordinatnya tetap.

Pencarian NumPy yang transparan

Dokumentasi NumPy untuk numpy.linalg.norm memperlihatkan dua kontrol yang diperlukan di sini: ord memilih orde norma dan axis memilih sumbu koordinat yang akan direduksi. Karena itu, batch yang berisi tiga baris kandidat ditangani dengan mengurangkan kueri dari setiap baris dan mereduksi setiap baris secara terpisah.

Kode berikut mencerminkan penurunan matematisnya, bukan menyembunyikannya dalam objek tetangga terdekat. Kode ini dijalankan dengan NumPy; urutan yang dicetak sama dengan contoh yang sudah dihitung.

import numpy as np

query = np.array([0.0, 0.0])
points = np.array([[6.0, 0.0], [4.0, 4.0], [5.0, 2.0]])
labels = np.array(["A", "B", "C"])

difference = points - query
for name, order in [("L1", 1), ("L2", 2), ("L-infinity", np.inf)]:
    distances = np.linalg.norm(difference, ord=order, axis=1)
    ranked = np.argsort(distances, kind="stable")
    print(
        f"{name}: "
        + ", ".join(f"{labels[i]}={distances[i]:.3f}" for i in ranked)
    )
L1: A=6.000, C=7.000, B=8.000
L2: C=5.385, B=5.657, A=6.000
L-infinity: B=4.000, C=5.000, A=6.000

Ada tiga operasi terpisah yang perlu diperhatikan:

  1. points - query melakukan pengurangan sebelum norma apa pun diterapkan.
  2. axis=1 menghitung satu norma per baris, sehingga setiap kandidat mendapat satu jarak.
  3. argsort mengubah jarak menjadi peringkat; norma itu sendiri tidak menentukan cara menangani nilai yang sama.

Untuk kumpulan data yang lebih besar, kelas NearestNeighbors dari scikit-learn mengemas gagasan yang sama. Pengaturan metric="minkowski" menggunakan parameter p, dengan p=1p=1 yang berarti L1 dan p=2p=2 yang berarti L2; metodenya, kneighbors, mengembalikan jarak sekaligus indeks. Estimator ini berguna ketika pencarian harus diintegrasikan ke dalam alur model, tetapi versi NumPy lebih baik untuk penelusuran masalah karena setiap larik perantara terlihat.

Untuk contoh yang persis sama, konfigurasi pencarian yang setara adalah:

from sklearn.neighbors import NearestNeighbors

search = NearestNeighbors(n_neighbors=2, metric="minkowski", p=2)
search.fit(points)
distances, indices = search.kneighbors(query.reshape(1, -1))
nearest_labels = labels[indices[0]]

Mengubah p menjadi 1 atau np.inf mengubah geometrinya sambil mempertahankan data dan nilai k=2k=2. API tidak menghilangkan pilihan metrik; API membuat pilihan itu eksplisit sebagai parameter.

Batasan yang mengubah jawaban

Jarak hanya presisi setelah ruang fitur, metrik, dan kebijakan pencarian ditentukan. Inilah kasus-kasus yang paling mungkin membuat demo tetangga terdekat berukuran kecil menjadi menyesatkan.

Seri adalah informasi, bukan noise

Misalkan q=(0,0)q=(0,0), u=(1,1)u=(1,1), dan v=(2,0)v=(2,0). Kedua kandidat memiliki

d1(q,u)=∣1∣+∣1∣=2,d1(q,v)=∣2∣+∣0∣=2.d_1(q,u)=|1|+|1|=2, \qquad d_1(q,v)=|2|+|0|=2.

Jika k=1k=1, matematika memberikan seri, bukan pemenang tunggal. Sistem produksi harus menyatakan kunci sekunder yang deterministik, mengembalikan semua kandidat yang seri, atau menggunakan kebijakan yang sesuai dengan aplikasinya. Pengurutan stable dalam kode NumPy membuat proses berulang dapat direproduksi, tetapi tidak membuktikan bahwa baris seri yang muncul pertama lebih mirip.

Titik identik memiliki jarak nol

Jika x=yx=y, maka x−y=(0,…,0)x-y=(0,\ldots,0) dan setiap norma memberikan d(x,y)=0d(x,y)=0. Itu adalah kecocokan persis yang valid, bukan kesalahan. Namun, dalam pencarian pada data pelatihan, melakukan kueri terhadap baris yang sama pada koleksi yang sudah disesuaikan dapat mengembalikan baris itu sendiri sebagai tetangga terdekat. Tentukan apakah pencocokan diri berguna sebelum menafsirkan hasil; kueri eksternal yang kebetulan sama dengan baris tersimpan tetap harus menerima jarak nol.

Penskalaan fitur adalah bagian dari geometri

Misalkan satu koordinat adalah pendapatan tahunan dalam dolar dan koordinat lainnya adalah hitungan dari nol sampai sepuluh. Koordinat dolar dapat mendominasi jarak L1 atau L2 hanya karena satuan angkanya lebih besar. Standardisasi, penskalaan ulang, atau pemberian bobot domain mengubah geometri; semua itu bukan tahap awal yang sekadar kosmetik. Sesuaikan setiap aturan penskalaan yang bergantung pada data menggunakan data pelatihan, lalu terapkan aturan yang sama pada kueri, atau peta tetangga dapat membocorkan informasi dari himpunan evaluasi.

Jarak dan kemiripan kosinus menjawab pertanyaan yang berbeda

Jarak membandingkan perpindahan antara dua titik sehingga mencakup posisi dan besar keduanya. Kemiripan kosinus membandingkan arah setelah panjang dinormalisasi. Untuk x=(1,1)x=(1,1) dan y=(10,10)y=(10,10),

cos⁡(x,y)=xTy∥x∥2∥y∥2=1,\cos(x,y)=\frac{x^\mathsf{T}y}{\lVert x\rVert_2\lVert y\rVert_2}=1,

karena vektornya menunjuk tepat ke arah yang sama, sedangkan

d2(x,y)=∥x−y∥2=(−9)2+(−9)2=92≈12.728.d_2(x,y)=\lVert x-y\rVert_2 =\sqrt{(-9)^2+(-9)^2}=9\sqrt{2}\approx12.728.

Sistem pengambilan berbasis embedding mungkin memilih kosinus ketika arah adalah pengertian kecocokan yang diinginkan. Aplikasi yang sensitif terhadap skala mungkin memilih jarak yang diinduksi norma. Tidak ada pilihan yang selalu benar, dan kemiripan kosinus memerlukan kebijakan terpisah untuk vektor nol karena arahnya tidak terdefinisi.

Dimensi tinggi membutuhkan pengukuran, bukan slogan

Pada beberapa distribusi data berdimensi tinggi, jarak terdekat dan terjauh dapat menjadi semakin berdekatan sehingga peringkatnya kurang diskriminatif. Beyer, Goldstein, Ramakrishnan, dan Shaft menjelaskan hasil konsentrasi jarak ini dalam kondisi tertentu di makalah mereka tentang tetangga terdekat. Hasil itu adalah peringatan tentang asumsi data dan beban kerja, bukan hukum bahwa setiap ruang embedding menjadi tidak berguna. Periksa selisih jarak tetangga, validasi metrik pada kueri yang disisihkan, dan pertimbangkan apakah representasi mengandung banyak koordinat yang tidak relevan sebelum menyalahkan algoritma pencarian.

Pelajaran berikutnya memisahkan perbandingan arah yang sengaja dicampur oleh jarak dengan panjang: Pelajaran 044, Angles and Cosine Similarity. Halaman kursus Math for AI berbahasa Inggris akan menampilkan pelajaran itu ketika paket terjemahannya sudah aktif.

Uji pemahaman Anda

Question 1

Untuk x = (5, −2) dan y = (1, 1), hitung perpindahan serta jarak L1, L2, dan L-infinity.

Show the step-by-step solution

Kurangkan titik-titiknya terlebih dahulu: x−y=(5−1,−2−1)=(4,−3)x-y=(5-1, -2-1)=(4,-3). Terapkan setiap norma pada satu perpindahan itu. L1 adalah ∣4∣+∣−3∣=4+3=7|4|+|-3|=4+3=7. L2 adalah sqrt(4² + (−3)²) = sqrt(16 + 9) = 5. L-infinity adalah koordinat absolut terbesar, max⁡(4,3)=4\max(4,3)=4. Ketiga jaraknya berturut-turut adalah 7, 5, dan 4.

Question 2

Mengapa ||x||₂ − ||y||₂ bukan rumus umum untuk jarak antara x dan y? Tunjukkan dengan x = (1, 1) dan y = (1, −1).

Show the step-by-step solution

Panjang terpisahnya sama-sama ∥x∥2=12+12=2\lVert x\rVert_2=\sqrt{1^{2} + 1^{2}} =\sqrt2 dan ∥y∥2=12+(−1)2=2\lVert y\rVert_2=\sqrt{1^{2} + (-1)^{2}}=\sqrt2, sehingga selisihnya nol. Perpindahan sebenarnya adalah x−y=(0,2)x-y=(0,2), yang norma L2-nya 02+22=2\sqrt{0^{2} + 2^{2}}=2. Jarak harus melakukan pengurangan terlebih dahulu karena jarak mengukur vektor yang menghubungkan dua lokasi, bukan selisih jarak keduanya dari titik asal.

Question 3

Dengan q = (0, 0), A = (6, 0), B = (4, 4), dan C = (5, 2), dua kandidat mana yang paling dekat di bawah L-infinity? Tunjukkan ketiga jarak yang relevan.

Show the step-by-step solution

Mengurangkan qq menyisakan koordinat kandidat. Jarak L-infinity mempertahankan koordinat absolut terbesar: d∞(q,A)=max⁡(6,0)=6d_\infty(q,A)=\max(6,0)=6, d∞(q,B)=max⁡(4,4)=4d_\infty(q,B)=\max(4,4)=4, dan d∞(q,C)=max⁡(5,2)=5d_\infty(q,C)=\max(5,2)=5. Mengurutkan 4, 5, dan 6 memberikan BB di posisi pertama dan CC di posisi kedua, sehingga hasil dua tetangganya adalah [B,C][B,C].

Question 4

Di bawah L1, q = (0, 0), u = (1, 1), dan v = (2, 0) seri. Berapa jarak serinya, dan apa yang harus diputuskan oleh implementasi k = 1?

Show the step-by-step solution

Hitung setiap perpindahan dari titik asal. Untuk uu, L1 memberikan ∣1∣+∣1∣=2|1|+|1|=2; untuk vv, hasilnya ∣2∣+∣0∣=2|2|+|0|=2. Jadi jarak yang seri adalah 2. Implementasi k=1k=1 harus memilih kebijakan: mengembalikan keduanya agar langkah berikutnya menyelesaikan seri, menggunakan kunci sekunder yang terdokumentasi, atau menggunakan aturan aplikasi. Urutan array dapat membuat output deterministik, tetapi tidak membuat satu titik secara matematis lebih dekat.

Question 5

Jika kueri x dan titik tersimpan y sama-sama (2, −1), berapa jaraknya di bawah setiap norma, dan mengapa hasil itu bermakna?

Show the step-by-step solution

Perpindahannya adalah x−y=(2−2,−1−(−1))=(0,0)x-y=(2-2,-1-(-1))=(0,0). Setiap norma memetakan vektor nol ke nol, sehingga d(x,y)=0d(x,y)=0 untuk L1, L2, dan L-infinity. Ini adalah sifat identitas-tidak-terbedakan: titik yang identik tidak memiliki perpindahan. Hasil ini bermakna sebagai kecocokan persis, meskipun pencarian pada data pelatihan mungkin memerlukan kebijakan pencocokan diri yang eksplisit.

Question 6

Mengapa fitur yang tidak diskalakan dapat mendominasi jarak? Bandingkan q = (0, 0), a = (1, 100), dan b = (2, 0) dengan jarak L2.

Show the step-by-step solution

Perpindahannya adalah a−q=(1,100)a-q=(1,100) dan b−q=(2,0)b-q=(2,0). Jarak L2-nya adalah 12+1002=10001≈100.005\sqrt{1^{2} + 100^{2}}=\sqrt{10001}\approx100.005 dan 22+02=2\sqrt{2^{2} + 0^{2}}=2. Koordinat kedua membuat aa tampak jauh lebih jauh meskipun koordinat pertamanya lebih dekat. Penskalaan ulang atau standardisasi fitur dapat membuat kontribusi koordinat lebih sebanding, tetapi aturan prapemrosesan itu harus di-fit pada data pelatihan dan digunakan kembali secara konsisten.

Question 7

Untuk x = (1, 1) dan y = (10, 10), mengapa kemiripan kosinus dapat bernilai 1 sementara jarak L2 bukan 0?

Show the step-by-step solution

Dot product-nya adalah 1⋅10+1⋅10=201\cdot10+1\cdot10=20. Panjangnya adalah ∥x∥2=2\lVert x\rVert_2=\sqrt2 dan ∥y∥2=102\lVert y\rVert_2=10\sqrt2, sehingga kemiripan kosinus adalah 20/(2⋅102)=120/(\sqrt2\cdot10\sqrt2)=1: arahnya sama persis. Jarak mempertahankan perbedaan besar. Perpindahannya (−9,−9)(-9,-9), jadi d2(x,y)=81+81=162=92≈12.728d_2(x,y)=\sqrt{81 + 81}=\sqrt{162}=9\sqrt2\approx12.728. Kedua ukuran tersebut menjawab pertanyaan kemiripan yang berbeda.

Question 8

Dalam np.linalg.norm(points − query, ord=2, axis=1), apa arti axis=1 ketika points berbentuk (number_of_points, number_of_features)?

Show the step-by-step solution

Setiap baris points − query adalah satu perpindahan kandidat, dan setiap kolom adalah satu koordinat fitur. Menetapkan axis=1 memberi tahu NumPy untuk melakukan reduksi melintasi kolom pada setiap baris. Hasilnya adalah satu nilai L2 per kandidat, dengan bentuk (number_of_points,). Reduksi pada sumbu yang salah akan mencampur kandidat atau mengembalikan satu nilai per fitur, bukan peringkat tetangga yang dapat digunakan.

Sumber

  1. Mathematics for Machine Learning book PDF, Section 3.3
  2. NumPy documentation: numpy.linalg.norm
  3. scikit-learn documentation: NearestNeighbors
  4. scikit-learn documentation: pairwise metrics, affinities, and kernels
  5. Beyer, Goldstein, Ramakrishnan, and Shaft: When Is Nearest Neighbor Meaningful?