Lewati ke konten utama

Apa itu Cosine Distance?

Jelajahi cosine distance dan cosine similarity. Temukan perhitungan, aplikasi, dan perbandingan dengan metrik lain. Pelajari cara mengimplementasikannya di R dan Python menggunakan numpy.
· 8 mnt Baca

Jelajahi bersama AI

Representasi cosine distance oleh Dall-E

"Cosine distance." Gambar oleh Dall-E.

Mengukur kesamaan atau ketidaksamaan antar titik data bermanfaat untuk banyak aplikasi, mulai dari analisis teks hingga sistem rekomendasi. Cosine distance adalah salah satu metrik jarak yang sangat efektif untuk data berdimensi tinggi atau dataset jarang, karena berfokus pada orientasi vektor alih-alih magnitudo. 

Jika Anda memerlukan penyegaran mengenai konsep umum dan penting dalam machine learning, mulailah dengan tutorial komprehensif kami, Demystifying Mathematical Concepts for Deep Learning. Pertimbangkan juga untuk membaca artikel lain tentang pembelajaran berbasis jarak, What is Manhattan Distance? untuk memperluas pemahaman Anda tentang metrik jarak dan melihat perbedaan antara cosine distance dan Manhattan distance.

Mendefinisikan Cosine Distance

Sekarang mari kita luangkan waktu untuk mendefinisikan cosine distance sesuai dengan rumus cosine distance. Untuk itu, kita juga mempertimbangkan hubungannya dengan cosine similarity.

Rumus cosine distance

Cosine distance mengukur ketidaksamaan antara dua vektor dengan menghitung kosinus dari sudut di antara keduanya. Ini dapat didefinisikan sebagai satu dikurangi cosine similarity, seperti terlihat pada rumus di bawah ini:

Rumus cosine distance menggunakan cosine similarity

Secara lebih rinci, dengan ekspresi matematis yang lebih formal, cosine distance dihitung menggunakan rumus di bawah ini. 

Rumus cosine distance dengan ekspresi matematis lengkap

Di sini, A⋅B merepresentasikan hasil kali titik (dot product) dari vektor A dan B, dan ||A|| ||B|| adalah magnitudo, atau norma Euclidean, dari vektor-vektor tersebut.

Dengan rumus ini kita mengkuantifikasi cosine distance dalam rentang dari 0 hingga 2. Cosine distance sebesar 0 berarti vektor-vektor tersebut sejajar sempurna (tidak ada sudut di antara keduanya), menunjukkan kesamaan maksimum, sedangkan nilai yang mendekati 2 menunjukkan bahwa keduanya saling berlawanan secara diametris, yang menandakan ketidaksamaan maksimum. 

Cosine similarity vs. cosine distance

Seperti yang telah kita lihat, sementara cosine distance mengukur ketidaksamaan antar vektor dengan menghitung kosinus dari sudut di antara keduanya, cosine similarity mengkuantifikasi seberapa mirip dua vektor berdasarkan kosinus dari sudut yang sama. 

Cosine similarity memiliki rentang dari -1 hingga 1. Cosine similarity sebesar 1 berarti vektor-vektor tersebut sejajar sempurna (tanpa sudut di antaranya), menunjukkan kesamaan maksimum, sedangkan nilai -1 menyiratkan keduanya berlawanan secara diametris, mencerminkan ketidaksamaan maksimum. Nilai yang mendekati nol menunjukkan ortogonalitas.

Menghitung dan Memvisualisasikan Cosine Distance

Mari ambil contoh dengan dua vektor: Vektor A (2,4) dan Vektor B (4,2), lalu hitung cosine distance-nya dengan mengikuti langkah-langkah berikut:

  1. Hitung hasil kali titik A dan B:

    A · B = (2 × 4) + (4 × 2) = 8 + 8 = 16

  2. Hitung magnitudo A dan B:

    ||A|| = √(2² + 4²) = √20

    ||B|| = √(4² + 2²) = √20
  1. Bagi hasil kali titik dengan hasil kali magnitudo:

    (A · B) / (||A|| × ||B||) = 16 / (√20 × √20) = 16 / 20 = 0,8
  1. Hitung cosine distance:

    Cosine Distance = 1 - 0,8 = 0,2

Dengan cosine distance sebesar 0,2, hasilnya berada cukup rendah pada skala 0 hingga 2. Ini menunjukkan bahwa vektor A dan B cukup mirip dari segi arah yang ditunjuknya. 

Visualisasi cosine distance vs. cosine similarityCosine distance dan cosine similarity. Gambar oleh Penulis.

Dalam representasi ini:

  • Vektor A adalah (2, 4)
  • Vektor B adalah (4, 2)
  • θ adalah sudut antara A dan B

Cosine similarity (0,8) merepresentasikan kosinus dari sudut θ. Karena vektor-vektor tersebut berdekatan arahnya, sudutnya kecil, menghasilkan cosine similarity yang tinggi dan cosine distance yang rendah (0,2).

Karena cosine distance juga dapat didefinisikan sebagai 1 - cos(θ), di mana cos(θ) adalah cosine similarity, ini menyiratkan: 

  • Ketika vektor identik arahnya (θ = 0°), cos(θ) = 1, sehingga cosine distance = 0
  • Ketika vektor saling tegak lurus (θ = 90°), cos(θ) = 0, sehingga cosine distance = 1
  • Ketika vektor saling berlawanan (θ = 180°), cos(θ) = -1, sehingga cosine distance = 2

Aplikasi Cosine Distance

Mari kita lihat beberapa aplikasi pentingnya.

Natural language processing (NLP)

Cosine distance memainkan peran krusial dalam berbagai tugas natural language processing dengan efektif mengukur hubungan semantik antar representasi teks seperti word2vec. Untuk gambaran singkat tentang konsep-konsep ini, Anda dapat menemukan tutorial kami Understanding Text Classification in Python yang bermanfaat. 

Klasifikasi dokumen dan kemiripan

Dalam klasifikasi dokumen, cosine distance mengukur kemiripan konten dengan membandingkan sudut antar vektor dokumen. Setiap dokumen diubah menjadi vektor, dengan dimensi mencerminkan skor TF-IDF dari kata-kata. Dokumen yang mirip mengarah ke arah yang serupa, menghasilkan cosine distance yang lebih kecil. 

Clustering dan pengelompokan semantik

Cosine distance unggul dalam tugas clustering seperti K-means clustering, mengelompokkan dokumen yang terkait secara semantik meski tidak menggunakan kata yang sama. Ini ideal untuk data berdimensi tinggi dan jarang yang umum dalam pemrosesan teks. Dengan menangkap orientasi vektor, teknik ini memungkinkan pengelompokan tematik yang lebih akurat. Teknik ini sering digunakan dalam unsupervised learning untuk menemukan pengelompokan alami dalam kumpulan dokumen, seperti mengelompokkan artikel berita berdasarkan topik.

Information retrieval dan mesin pencari

Dalam information retrieval, cosine distance mencocokkan kueri pencarian dengan dokumen melalui perbandingan vektor. Mesin pencari kemudian menemukan dokumen yang paling dekat dengan vektor kueri dalam hal cosine distance, memberi peringkat paling tinggi pada dokumen dengan jarak terkecil untuk relevansi. 

Word embeddings dan kemiripan kata 

Di luar analisis tingkat dokumen, cosine distance penting dalam word embeddings seperti Word2Vec atau GloVe, di mana kata-kata direpresentasikan sebagai vektor berdimensi tinggi. Embedding ini menangkap makna semantik sehingga kata-kata dengan makna serupa terletak berdekatan dalam ruang vektor. Cosine distance dapat digunakan untuk menemukan kata yang paling mirip dengan suatu kata tertentu, mendukung deteksi sinonim, atau bahkan mendayagunakan fitur dalam model yang lebih kompleks seperti yang digunakan untuk analisis sentimen atau penerjemahan mesin.

Pengenalan gambar 

Dalam pengenalan gambar, cosine distance berperan untuk membandingkan vektor fitur yang diekstraksi dari gambar. Baik saat memilah wajah di kerumunan atau mengklasifikasikan foto alam, metrik ini melihat seberapa mirip orientasi vektornya, bukan sekadar ukurannya. Fokus ini membantu menetapkan kategori yang tepat untuk gambar, sehingga meningkatkan akurasi dan efektivitas sistem berbasis gambar.

Sistem rekomendasi 

Bayangkan cosine distance sebagai mak comblang di dunia digital, memasangkan pengguna dengan film atau produk yang selaras dengan kesukaan mereka sebelumnya. Dengan melihat seberapa dekat profil pengguna dan item selaras dalam ruang vektor, sistem rekomendasi memprediksi apa yang kemungkinan besar akan Anda sukai berikutnya dengan akurasi yang mengejutkan.

Sifat Matematis Cosine Distance

Cosine distance memiliki sifat matematis yang unik yang membedakannya dari ukuran jarak lainnya. Memahami sifat-sifat ini penting untuk menafsirkan dan menerapkan cosine distance dengan benar dalam berbagai konteks.

Sifat ruang metrik

Dalam matematika, metrik atau fungsi jarak adalah fungsi yang mendefinisikan jarak antara setiap pasangan elemen dalam suatu himpunan. Agar dianggap sebagai metrik sejati, suatu fungsi harus memenuhi empat kondisi:

  1. Non-negativitas: d(x, y) ≥ 0

  2. Identitas ketakterbedaan: d(x, y) = 0 jika dan hanya jika x = y

  3. Kesimetrian: d(x, y) = d(y, x)

  4. Ketaksamaan segitiga: d(x, z) ≤ d(x, y) + d(y, z)

Cosine distance memenuhi tiga kondisi pertama tetapi tidak selalu memenuhi ketaksamaan segitiga. Ini berarti bahwa dalam beberapa kasus, jumlah cosine distance antara titik A dan B serta antara B dan C bisa jadi lebih kecil daripada cosine distance antara A dan C.

Ketakbergantungan skala

Salah satu sifat penting dari cosine distance adalah ketakbergantungan skalanya. Artinya, cosine distance antara dua vektor tetap sama meskipun Anda mengalikan salah satu atau kedua vektor dengan skalar (konstanta tak nol). Secara matematis, untuk setiap skalar tak nol a dan b, serta vektor x dan y:

Cosine Distance(ax, by) = Cosine Distance(x, y)

Sifat ketakbergantungan skala ini membedakan cosine distance dari banyak ukuran jarak lainnya.

Cosine Distance di Python dan R

Di sini, kita akan mengeksplorasi cara menghitung cosine distance menggunakan Python dan R. 

Contoh Python

Di Python, kita dapat menggunakan NumPy untuk menghitung cosine distance dan cosine similarity. Kita melakukannya dengan mencari hasil kali titik dan norma vektor kita.

import numpy as np

# Define the vectors
A = np.array([2, 4])
B = np.array([4, 2])

# Calculate cosine similarity
cos_similarity = np.dot(A, B) / (np.linalg.norm(A) * np.linalg.norm(B))

# Calculate cosine distance
cos_distance = 1 - cos_similarity

print("Cosine Similarity: {:.2f}".format(cos_similarity))
print("Cosine Distance: {:.2f}".format(cos_distance))

Keluaran: 

Cosine Similarity: 0.80
Cosine Distance: 0.20

Sebagai alternatif, kita dapat mencari cosine distance menggunakan paket SciPy dan fungsi cosine(). 

import numpy as np
from scipy.spatial.distance import cosine

# Define the vectors
A = np.array([2, 4])
B = np.array([4, 2])

# Calculate cosine distance
cos_distance = cosine(A, B)  # Uses scipy's cosine for cosine distance

print("Cosine Distance: {:.2f}".format(cos_distance))

Keluaran: 

Cosine Distance: 0.20

Contoh R

Di R, Anda dapat menghitung cosine similarity dan cosine distance menggunakan operasi vektor dasar. Berikut caranya:

# Define the vectors
A <- c(2, 4)
B <- c(4, 2)

# Calculate cosine similarity
cos_similarity <- sum(A * B) / (sqrt(sum(A^2)) * sqrt(sum(B^2)))
# Note: We can also use %*% operator for matrix multiplication. 
# %*%, when applied to two vectors, calculates the dot product. 
# For example: cos_similarity <- A %*% B / (sqrt(sum(A^2)) * sqrt(sum(B^2)))

# Calculate cosine distance
cos_distance <- 1 - cos_similarity

# Print the result
print(paste("Cosine Similarity:", cos_similarity))
print(paste("Cosine Distance:", cos_distance))

Keluaran:

“Cosine Similarity: 0.80”
“Cosine Distance: 0.20”

Dalam contoh R, cosine similarity dihitung menggunakan operasi manual untuk dot product dan norma, mirip dengan contoh Python, tetapi sepenuhnya menggunakan fungsionalitas dasar R. Perhatikan bagaimana cosine distance diperoleh dengan mengurangkan cosine similarity dari 1.

Cosine Similarity vs. Euclidean Distance dan Metrik Jarak Lainnya

Visual di bawah ini memperluas contoh awal kita, tetapi kali ini menggunakan warna berbeda untuk merepresentasikan tiga jenis pengukuran jarak menggunakan vektor yang sama:

  • Manhattan Distance mengukur jumlah dari nilai absolut perbedaan koordinatnya. 
  • Euclidean Distance menghitung jarak garis lurus antara dua titik. 
  • Cosine Distance diturunkan dari kosinus sudut antara dua vektor. 

Cosine distance vs. Euclidean distance vs. Manhattan distance

Cosine distance vs. Euclidean distance vs. Manhattan distance. Gambar oleh Penulis.

Masing-masing jarak ini memberikan wawasan unik terhadap data. Euclidean dan Manhattan adalah jarak geometris yang memperhitungkan magnitudo komponen vektor, yang membuatnya cocok untuk pengukuran fisik di ruang. Sebaliknya, cosine distance berfokus pada sudut antar vektor, menjadikannya ideal untuk memahami orientasi dan arah, terutama di ruang berdimensi tinggi seperti yang digunakan dalam analisis teks dan bentuk data science lainnya.

Kesimpulan

Cosine distance dan pelengkapnya, cosine similarity, adalah alat yang kuat dalam data science dan machine learning. Metrik ini menawarkan wawasan unik tentang hubungan antar vektor, khususnya di ruang berdimensi tinggi di mana ukuran jarak tradisional mungkin kurang memadai.

Seiring data terus berkembang dalam kompleksitas dan dimensi, metrik seperti cosine distance kemungkinan akan memainkan peran yang semakin penting dalam mengungkap pola dan hubungan tersembunyi. Baik Anda mengerjakan natural language processing, sistem rekomendasi, atau bidang apa pun yang berhubungan dengan ruang vektor berdimensi tinggi, memahami dan menerapkan cosine distance dapat memberikan wawasan berharga dan meningkatkan kinerja model Anda. Sebagai langkah berikutnya, ikuti kursus interaktif komprehensif kami, Designing Machine Learning Workflows in Python, yang memiliki satu bab penuh tentang pembelajaran berbasis jarak dan alur kerja unsupervised. 

Vinod Chugani

Penulis

Vinod Chugani

Vinod Chugani memulai kariernya di Tokyo sebagai Kepala Meja Penjualan Hedge Fund termuda di JPMorgan dan kemudian mencetak rekor penjualan individu di Lehman Brothers, lalu membangun bisnis distribusi elektronik di 30 negara dengan pendapatan melampaui SG$100 juta sebelum beralih ke data. Lulusan Ekonomi Duke dan alumni NYC Data Science Academy, ia menjadi salah satu dari tiga penerima beasiswa dari lebih dari 100 pelamar untuk kursus Building AI Applications oleh Hugo Bowne-Anderson di Maven. Saat ini, ia menulis untuk DataCamp, KDnuggets, Machine Learning Mastery, dan Statology tentang topik mulai dari statistika hingga AI agensial, dan membimbing para profesional data di NYC Data Science Academy dengan lebih dari 1.000 sesi tatap muka atas namanya.

 

Pertanyaan yang Sering Diajukan

Apa itu cosine similarity?

Cosine similarity adalah metrik yang digunakan untuk mengukur seberapa mirip dua vektor dalam hal orientasinya, terlepas dari magnitudonya.

Berapa rentang cosine similarity?

Rentang cosine similarity adalah -1 hingga 1

Apa rumus cosine similarity?
 

Rumus cosine similarity menghitung kosinus dari sudut antara dua vektor, didefinisikan sebagai hasil kali titik dari vektor-vektor tersebut dibagi dengan hasil kali magnitudo keduanya.

Apa perbedaan dot product dan cosine similarity?

Dot product adalah jumlah dari hasil kali elemen yang bersesuaian dari dua vektor, yang mencerminkan baik magnitudo maupun orientasinya. Cosine similarity, di sisi lain, adalah dot product yang dinormalisasi oleh hasil kali magnitudo vektor-vektor tersebut, sehingga hanya berfokus pada keselarasan arah.

Bagaimana perbedaan cosine distance dari cosine similarity?

Cosine distance dan cosine similarity adalah ukuran yang saling melengkapi. Cosine similarity mengukur seberapa mirip dua vektor, dengan rentang dari -1 (berlawanan persis) hingga 1 (sama persis). Sebaliknya, cosine distance mengukur seberapa berbeda dua vektor dan dihitung sebagai 1 dikurangi Cosine Similarity. Rentangnya dari 0 (vektor identik) hingga 2 (vektor berlawanan).

Apa rumus cosine distance?

Rumus cosine distance mengukur sudut antara dua vektor dalam ruang multi-dimensi, dihitung sebagai 1 dikurangi kosinus dari sudut antara vektor-vektor tersebut.

Apa yang ditunjukkan oleh cosine distance bernilai 1?

Cosine distance sebesar 1 menunjukkan bahwa dua vektor yang dibandingkan saling tegak lurus (ortogonal), membentuk sudut 90 derajat. Ini berarti vektor-vektor tersebut tidak memiliki kemiripan arah, yang dalam praktiknya menyiratkan tema yang benar-benar berbeda dalam analisis teks, item yang tidak terkait dalam sistem rekomendasi, atau karakteristik yang berbeda pada vektor fitur machine learning.

Apa perbedaan cosine distance dan angular distance?

Cosine distance dan angular distance sangat terkait namun tidak identik. Cosine distance didefinisikan sebagai 1 dikurangi cosine similarity, sedangkan angular distance adalah sudut antara dua vektor dalam radian, dihitung sebagai arkus kosinus dari cosine similarity. Angular distance berbanding lurus dengan cosine distance tetapi memberikan interpretasi geometri yang lebih intuitif.

Apa perbedaan cosine distance dan Euclidean distance?

Meskipun keduanya mengukur ketidaksamaan, cosine distance berfokus pada sudut antara vektor, mengabaikan magnitudo. Euclidean distance berfokus pada magnitudo, mengukur jarak garis lurus antara dua titik dalam ruang.

Mengapa cosine distance berguna dalam analisis teks?

Cosine distance sangat berguna dalam analisis teks karena berfokus pada proporsi kata (diwakili sebagai dimensi vektor) alih-alih frekuensi absolutnya. Ini membuatnya efektif untuk membandingkan dokumen dengan panjang berbeda dan untuk mengidentifikasi kemiripan tematik tanpa bergantung pada ukuran dokumen.

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026