Kursus Matematika untuk AI · Pelajaran 44 dari 180
Sudut dan Kesamaan Kosinus
Hitung sudut dan kesamaan kosinus dari koordinat vektor, normalkan embedding secara bertanggung jawab, dan tangani vektor nol dalam kode retrieval.
Dua dokumen dapat direpresentasikan sebagai vektor dan . Hasil dot product mentahnya adalah , sehingga pencarian berbasis dot product melihat vektor kedua sebagai vektor yang jauh lebih besar. Namun, arahnya identik: setelah dibagi dengan panjang kedua vektor, kesamaan kosinusnya adalah . Aturan penilaian mengubah arti “serupa”.
Pada akhir pelajaran ini, Anda akan mampu menghitung sudut dan kesamaan kosinus dari koordinat, menjelaskan mengapa penskalaan positif tidak mengubah kosinus, serta menangani vektor nol tanpa memberinya arah yang sebenarnya tidak dimilikinya.
Hasil belajar: Menghitung sudut dan kesamaan kosinus serta menangani batas vektor nol.
Pelajaran ini menggabungkan dua gagasan sebelumnya: Pelajaran 039: Norm mengukur ukuran vektor memberi kita panjang Euclidean, sedangkan Pelajaran 041: Inner product mengukur keselarasan memberi kita dot product. Pelajaran 043: Jarak bergantung pada geometri yang dipilih kemudian menunjukkan mengapa jarak mempertahankan magnitudo dalam perbandingan. Bagian 3.4 dari buku resmi Mathematics for Machine Learning mengembangkan hubungan sudut tersebut. Contoh, kode, visual, dan asesmen di sini adalah karya asli.
Sudut memisahkan arah dari panjang
Untuk dua vektor tak nol , gunakan sebagai sudut di antara keduanya. Dot product dan norm Euclidean yang biasa adalah
Ekspresi pertama menggabungkan koordinat yang bersesuaian menjadi satu skalar. Ekspresi kedua mengukur panjang Euclidean setiap vektor. Ekspresi ketiga membagi skor keselarasan dengan kedua panjang tersebut, sehingga tersisa perbandingan arah. Ketaksamaan Cauchy–Schwarz menjamin bahwa rasio terakhir berada di antara dan untuk vektor tak nol, sehingga sudut dapat dipulihkan secara unik dalam interval :
Nilai yang dinormalkan ini adalah kesamaan kosinus. Nilai yang mendekati berarti vektor menunjuk hampir ke arah yang sama; berarti sudut siku-siku dalam geometri dot product biasa; dan berarti arahnya berlawanan. Interpretasi ini mengasumsikan kedua vektor tidak nol dan kita menggunakan inner product Euclidean standar.
Contoh sudut dari koordinat
Ambil dan . Keduanya adalah vektor dua dimensi, sehingga masing-masing memiliki dua koordinat dan tidak menyiratkan satuan fisik apa pun. Kita dapat menghitung setiap bagian sebelum menerapkan invers kosinus.
Nilai antara ini penting. Dot product sebesar saja tidak memberi tahu kita sudutnya, karena pasangan vektor lain dapat memiliki dot product yang sama tetapi panjang berbeda. Membagi dengan kedua norm membuat hasilnya dapat dibandingkan pada berbagai magnitudo vektor.
Penskalaan positif mempertahankan kosinus
Misalkan vektor tak nol diregangkan dengan bilangan positif . Arahnya tidak berubah, dan aljabar menunjukkan mengapa skor kosinus tetap:
Pembatalan yang sama terjadi ketika diskalakan secara positif. Inilah sifat yang berguna untuk perbandingan embedding berdasarkan arah: vektor dokumen dengan orientasi yang sama tetapi norm lebih besar menerima skor kosinus yang sama. Ini juga merupakan pilihan pemodelan. Jika magnitudo membawa sinyal tentang keyakinan, frekuensi, atau atribut lain dari representasi, menghapusnya dapat membuang informasi.
Jelajahi sudut, skor, dan panjang secara bersamaan
Explorer ini dimulai dengan dua vektor tak nol. Gerakkan koordinat mana pun menggunakan mouse, input sentuh, atau tombol panah. Plot menampilkan vektor yang sama dari titik asal, sedangkan tabel mengulangi dot product, kedua norm, kesamaan kosinus, dan sudut yang dipulihkan dalam teks. Atur salah satu vektor menjadi untuk melihat batas vektor nol.
x = (1, 0,5); y = (0,5, 1,5); hasil kali titik = 1,25; norma x = 1,118; norma y = 1,581; kesamaan kosinus = 0,707; sudut = 0,785 radian (45 derajat). Interpretasi: skornya mencerminkan keselarasan arah sebagian.
| Besaran | Nilai |
|---|---|
| Hasil kali titik x · y | 1,25 |
| Norma x | 1,118 |
| Norma y | 1,581 |
| Kesamaan kosinus | 0,707 |
| Sudut | 0,785 radian / 45 derajat |
Garis vektor menggunakan pola garis putus-putus dan label yang berbeda, bukan warna saja. Tabel numerik tetap bermakna ketika plot tidak tersedia atau gerakan dikurangi.
Sudut yang diplot adalah bantuan untuk bernalar, bukan definisi terpisah. Ketika kontrol berubah, tabel numerik menghitung ulang rumus yang sama seperti di atas. Pasangan yang menjadi lebih panjang tanpa mengubah arah mempertahankan nilai kosinus, sedangkan memutar salah satu vektor mengubah sudut dan skor.
Gunakan skor dengan hati-hati dalam retrieval embedding
Embedding adalah representasi vektor dari suatu item seperti dokumen, query, gambar, atau pengguna. Jika kecocokan yang dimaksud adalah orientasi, kesamaan kosinus merupakan skor yang alami: ia membandingkan vektor yang telah dinormalkan, bukan panjang mentahnya. Skor tetap bergantung pada model embedding, prapemrosesan, korpus, dan tugas; skor tersebut tidak menjadikan “serupa” sebagai sifat universal dari dokumen yang mendasarinya.
Panduan metrik berpasangan scikit-learn saat ini menjelaskan kesamaan kosinus sebagai dot product yang dinormalkan L2 dan menyebut penggunaannya untuk vektor dokumen. cosine_similarity API memperlakukan baris sebagai sampel dan mengembalikan matriks skor berpasangan. Bentuk ini mudah hilang ketika berpindah antara satu vektor dan sebuah batch, jadi buat konvensi baris menjadi eksplisit:
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
query = np.array([[3.0, 1.0]]) # shape (1 sample, 2 features)
documents = np.array([
[3.0, 1.0],
[1.0, 2.0],
[30.0, 10.0],
]) # shape (3 samples, 2 features)
scores = cosine_similarity(query, documents)
print(scores.round(4))
# [[1. 0.7071 1. ]]
Untuk implementasi NumPy yang transparan, dot product satu dimensi dan norm vektor sudah cukup. Dokumentasi dot NumPy mendefinisikan kasus 1-D sebagai inner product dua vektor, sedangkan numpy.linalg.norm menerima argumen axis ketika sebuah array berisi banyak vektor. Guard ini adalah bagian dari implementasi, bukan pemeriksaan kosmetik:
import numpy as np
def cosine_similarity(x, y):
x = np.asarray(x, dtype=float)
y = np.asarray(y, dtype=float)
x_norm = np.linalg.norm(x)
y_norm = np.linalg.norm(y)
if x_norm == 0 or y_norm == 0:
raise ValueError('cosine similarity needs two nonzero vectors')
raw = np.dot(x, y) / (x_norm * y_norm)
return np.clip(raw, -1.0, 1.0)
print(cosine_similarity(np.array([3.0, 1.0]), np.array([1.0, 2.0])))
# 0.7071067811865475
clip mencegah overshoot floating-point kecil mengirim arccos ke luar domainnya. Jangan gunakan ini untuk menyembunyikan kesalahan numerik atau bentuk data yang lebih besar. Untuk batch berbentuk (number_of_samples, number_of_features), hitung norm pada axis=1 dan pertahankan satu skor per baris; dokumentasi NumPy saat ini menunjukkan konvensi sumbu ini untuk norm vektor.
Batas yang mengubah interpretasi
Vektor nol tidak memiliki sudut
Jika , maka dan rumus kosinus membagi dengan nol. Dot product tetap terdefinisi, tetapi itu tidak berarti vektor nol membentuk sudut siku-siku dengan . Vektor nol tidak memiliki arah, sehingga secara matematis sudut dan kesamaan kosinus tidak terdefinisi.
Library dapat memilih kebijakan untuk input ini. Contoh cosine_similarity saat ini menyertakan baris nol dan menampilkan skor 0.0; itu adalah konvensi API yang perlu diperiksa untuk versi dan jalur data yang Anda gunakan, bukan arah yang baru didefinisikan. Pipeline retrieval produksi harus memutuskan apakah akan menolak, menyaring, atau merutekan embedding nol secara terpisah, lalu menguji kebijakan itu secara eksplisit.
Vektor berlawanan bukan berarti “tidak berkaitan”
Untuk tak nol, pasangan memiliki
Skornya paling negatif karena vektor menunjuk ke arah yang berlawanan. Skor yang mendekati berarti ortogonal dalam geometri ini; skor tersebut tidak otomatis berarti dua item tidak berkaitan secara semantik. Interpretasinya bergantung pada representasi dan tugas.
Kosinus tidak sama dengan jarak atau dot product mentah
Kesamaan kosinus mengabaikan skala positif. Jarak Euclidean tidak. Untuk dan , kesamaan kosinusnya adalah , tetapi
Pasangan ini identik secara arah tetapi tetap berjauhan sebagai titik. Sebaliknya, dot product mentah mencampurkan arah dengan kedua panjang. Pilih kosinus ketika kesepakatan arah adalah sinyal yang diinginkan; pilih jarak yang diinduksi norm atau skor mentah ketika magnitudo harus tetap menjadi bagian dari keputusan. API cosine_distances scikit-learn mendefinisikan nilainya sebagai dikurangi kesamaan kosinus, sehingga mempertahankan pilihan arah yang sama, bukan memulihkan pemisahan Euclidean.
Pelajaran berikutnya, Pelajaran 045: Ortogonalitas berarti tidak ada tumpang tindih linear, berfokus pada kasus khusus ketika inner product bernilai nol dan menjelaskan arti “tidak ada tumpang tindih linear” (tautan ini membuka konten berbahasa Inggris). Hub kursus Math for AI menjaga urutan dependensi tetap terlihat ketika setiap pelajaran tersedia.
Uji pemahaman Anda
Question 1
Untuk x = (3, 1) dan y = (1, 2), hitung dot product, kedua norm L2, kesamaan kosinus, dan sudutnya.
Show the step-by-step solution
Dot product-nya adalah . Norm-nya adalah dan . Jadi . Menerapkan invers kosinus memberi radian, atau . Setiap langkah menggunakan vektor dengan dua koordinat dan asumsi norm tak nol.
Question 2
Mengapa x = (1, 2) dan y = (10, 20) memiliki dot product serta panjang masing-masing yang berbeda, tetapi kesamaan kosinus yang sama?
Show the step-by-step solution
Vektor tersebut memenuhi , sehingga . Norm-nya adalah dan . Skor yang dinormalkan adalah . Dot product bertambah mengikuti skala , sementara skala yang sama juga muncul dalam norm-nya dan saling menghapus pada kosinus.
Question 3
Misalkan x = (1, 0) dan y = (0, 2). Berapa kesamaan kosinus dan sudutnya, serta hubungan geometris apa yang ditunjukkannya?
Show the step-by-step solution
Dot product-nya adalah . Norm-nya adalah dan , jadi kesamaan kosinusnya . Karena , sudutnya . Jadi dalam geometri dot product standar, kedua vektor itu ortogonal, meskipun tidak satu pun merupakan vektor nol.
Question 4
Untuk x = (1, 0) dan y = (−4, 0), hitung kesamaan kosinus dan sudutnya. Mengapa skornya bukan nol?
Show the step-by-step solution
Dot product-nya adalah , dan norm-nya adalah dan . Jadi . Invers kosinus memberi . Kedua vektor berada pada garis yang sama tetapi menunjuk ke arah berlawanan, sehingga keduanya memiliki keselarasan negatif maksimum, bukan tegak lurus.
Question 5
Apa yang seharusnya dilakukan implementasi kesamaan kosinus untuk x = (0, 0) dan y = (2, 3), dan mengapa mengembalikan 0 bukan sudut matematis?
Show the step-by-step solution
Norm adalah , sehingga penyebut adalah nol. Rumusnya tidak terdefinisi dan tidak memiliki arah. Implementasi dapat menolak pasangan tersebut, menyaring vektor nol, atau menggunakan konvensi API yang didokumentasikan seperti mengembalikan ; konvensi itu harus diuji dan tidak boleh dijelaskan sebagai sudut siku-siku.
Question 6
Jika x = (1, 2), y = (2, 1), dan x diganti dengan −3x, bagaimana kesamaan kosinus berubah? Tunjukkan perhitungan tandanya.
Show the step-by-step solution
Pertama, dan , sehingga kosinus awalnya . Dengan , pembilang dikalikan , sedangkan norm adalah . Jadi skor barunya adalah : penskalaan negatif membalik arah.
Question 7
Mengapa implementasi NumPy melakukan clipping pada dot product yang dinormalkan sebelum memanggil arccos, dan apa yang seharusnya ditunjukkan oleh overshoot besar?
Show the step-by-step solution
Secara matematis, Cauchy–Schwarz menempatkan kosinus di , tetapi
aritmetika floating-point dapat menghasilkan nilai seperti
setelah perhitungan panjang atau yang hampir paralel.
Karena hanya bernilai real pada interval tersebut, np.clip(raw, -1.0, 1.0) menghilangkan overshoot kecil akibat pembulatan. Overshoot besar
menunjukkan masalah data, bentuk, atau kondisi numerik; clipping tidak boleh
digunakan untuk menyembunyikannya.
Question 8
Sebuah query adalah q = (3, 1), dan tiga vektor dokumen adalah a = (3, 1), b = (1, 2), serta c = (30, 10). Bandingkan peringkat berdasarkan dot product mentah dengan peringkat berdasarkan kesamaan kosinus.
Show the step-by-step solution
Dot product mentahnya adalah , , dan , sehingga peringkat dot product mentahnya adalah , lalu , lalu . Vektor , jadi . Untuk , . Jadi peringkat kosinus menempatkan dan seri di posisi teratas, diikuti . Perbedaan ini memperlihatkan keputusan pemodelan: dot product menghargai magnitudo dan arah, sedangkan kosinus menghapus skala positif.
Sumber
- Mathematics for Machine Learning book PDF, Section 3.4
- NumPy documentation: numpy.dot
- NumPy documentation: numpy.linalg.norm
- NumPy documentation: numpy.arccos
- scikit-learn documentation: Pairwise metrics, affinities and kernels
- scikit-learn documentation: cosine_similarity
- scikit-learn documentation: cosine_distances