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.
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 dan adalah dua titik dalam . Setiap koordinat adalah posisi fitur; adalah jumlah fitur. Untuk menanyakan seberapa jauh dari , kurangkan terlebih dahulu koordinat demi koordinat:
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 .
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 . Dengan dot product biasa, ini adalah norma Euclidean, sehingga . 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 dan , kedua titik memiliki norma L2 , tetapi
Menghitung 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 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.
| Titik | Deskripsi | Koordinat |
|---|---|---|
| kasus dominan sumbu | ||
| kasus seimbang | ||
| kasus campuran |
Peringkatnya berubah karena norma-norma tersebut memberi nilai berbeda pada bentuk perpindahan. L1 memilih titik yang dominan sumbu di sini karena total perpindahan koordinatnya paling kecil. L2 memilih : gabungan kedua koordinatnya membentuk ruas garis lurus yang lebih pendek daripada diagonal dan ruas horizontal panjang . L-infinity memilih karena tidak ada satu pun koordinat yang berpindah lebih dari .
Satu kueri, tiga peta tetangga
| Kandidat | Koordinat | L1jumlah perpindahan absolut | L2panjang garis lurus | L-infinityperpindahan koordinat terbesar |
|---|---|---|---|---|
| A dominan sumbu | (6, 0) | 6.000peringkat 1 | 6.000peringkat 3 | 6.000peringkat 3 |
| B seimbang | (4, 4) | 8.000peringkat 3 | 5.657peringkat 2 | 4.000peringkat 1 |
| C campuran | (5, 2) | 7.000peringkat 2 | 5.385peringkat 1 | 5.000peringkat 2 |
| Dua kandidat terdekat | A → C | C → B | B → 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.
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.
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:
points - querymelakukan pengurangan sebelum norma apa pun diterapkan.axis=1menghitung satu norma per baris, sehingga setiap kandidat mendapat satu jarak.argsortmengubah 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 yang berarti L1 dan 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 . 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 , , dan . Kedua kandidat memiliki
Jika , 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 , maka dan setiap norma memberikan . 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 dan ,
karena vektornya menunjuk tepat ke arah yang sama, sedangkan
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: . Terapkan
setiap norma pada satu perpindahan itu. L1 adalah . L2
adalah sqrt(4² + (−3)²) = sqrt(16 + 9) = 5. L-infinity adalah
koordinat absolut terbesar, . 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 dan , sehingga selisihnya nol. Perpindahan sebenarnya adalah , yang norma L2-nya . 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 menyisakan koordinat kandidat. Jarak L-infinity mempertahankan koordinat absolut terbesar: , , dan . Mengurutkan 4, 5, dan 6 memberikan di posisi pertama dan di posisi kedua, sehingga hasil dua tetangganya adalah .
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 , L1 memberikan ; untuk , hasilnya . Jadi jarak yang seri adalah 2. Implementasi 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 . Setiap norma memetakan vektor nol ke nol, sehingga 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 dan . Jarak L2-nya adalah dan . Koordinat kedua membuat 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 . Panjangnya adalah dan , sehingga kemiripan kosinus adalah : arahnya sama persis. Jarak mempertahankan perbedaan besar. Perpindahannya , jadi . 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.