Kemiripan kosinus

Dalam analisis data, **kemiripan kosinus** atau **kesamaan kosinus** (bahasa Inggris: *cosine similarity*) adalah ukuran kemiripan antara dua vektor tak-nol yang didefinisikan dalam ruang hasil kali dalam. Kemiripan kosinus adalah nilai kosinus dari sudut di antara kedua vektor tersebut; yaitu, hasil kali titik dari vektor-vektor tersebut dibagi dengan hasil kali panjang (besaran) mereka. Oleh karena itu, kemiripan kosinus tidak bergantung pada besaran vektor, melainkan hanya pada sudutnya. Kemiripan kosinus selalu berada pada interval [-1, +1]. Misalnya, dua vektor sebanding (proporsional) memiliki kemiripan kosinus +1, dua vektor tegak lurus (ortogonal) memiliki kemiripan 0, dan dua vektor yang berlawanan (*opposite*) memiliki kemiripan −1. Dalam beberapa konteks, nilai komponen vektor tidak dapat bernilai negatif, yang mana dalam hal ini kemiripan kosinus dibatasi pada interval [0,1].

Sebagai contoh, dalam bidang temu balik informasi dan penambangan teks, setiap kata diberi koordinat yang berbeda dan sebuah dokumen direpresentasikan oleh vektor dari jumlah kemunculan setiap kata dalam dokumen tersebut. Kemiripan kosinus kemudian memberikan ukuran yang berguna mengenai seberapa mirip dua dokumen kemungkinan besarnya, dalam hal materi subjeknya, dan tidak bergantung pada panjang dokumen tersebut.

Teknik ini juga digunakan untuk mengukur kohesi (kerekatan, kepaduan) di dalam kluster pada bidang penambangan data.

Salah satu keuntungan dari kemiripan kosinus adalah kompleksitasnya yang rendah, terutama untuk vektor rongga (*sparse vector*): hanya koordinat tak-nol yang perlu dipertimbangkan.

Nama lain untuk kemiripan kosinus meliputi **kemiripan Orchini** dan **koefisien kekongruenan (kesesuaian/keselarasan) Tucker**; **kemiripan Otsuka–Ochiai** (lihat di bawah) adalah kemiripan kosinus yang diterapkan pada data biner.

## Definisi

Kosinus dari dua vektor tak-nol dapat diturunkan dengan menggunakan rumus hasil kali titik Euklides (spasial):

:\mathbf{A}\cdot\mathbf{B}
=\left\|\mathbf{A}\right\|\left\|\mathbf{B}\right\|\cos\theta

Diberikan dua vektor atribut berdimensi-*n*, **A** dan **B**, kemiripan kosinus, , direpresentasikan menggunakan hasil kali titik dan besaran sebagai

:\text{kemiripan kosinus} =S_C (A,B):= \cos(\theta) = {\mathbf{A} \cdot \mathbf{B} \over \|\mathbf{A}\| \|\mathbf{B}\|} = \frac{ \sum\limits_{i=1}^{n}{A_i  B_i} }{ \sqrt{\sum\limits_{i=1}^{n}{A_i^2}} \cdot \sqrt{\sum\limits_{i=1}^{n}{B_i^2}} },

di mana A_i dan B_i masing-masing adalah komponen ke-i dari vektor \mathbf{A} dan \mathbf{B}.

Nilai kemiripan yang dihasilkan berkisar dari −1 yang berarti berlawanan secara persis, hingga +1 yang berarti persis sama, dengan 0 menunjukkan ortogonalitas (ketegaklurusan) atau dekorelasi, sedangkan nilai di antaranya menunjukkan kemiripan atau ketidakmiripan menengah (*intermediate*).

Untuk pencocokan teks, vektor atribut *A* dan *B* biasanya adalah vektor frekuensi istilah (*term frequency*, TF) dari dokumen-dokumen tersebut. Kemiripan kosinus dapat dilihat sebagai metode normalisasi panjang dokumen selama perbandingan. Dalam kasus temu balik informasi, kemiripan kosinus dari dua dokumen akan berkisar dari 0 \to 1, karena frekuensi istilah (*term frequency*) tidak mungkin negatif. Hal ini tetap berlaku saat menggunakan bobot TF-IDF. Sudut antara dua vektor frekuensi istilah (*term frequencies*) tidak mungkin lebih besar dari 90°.

Jika vektor atribut dinormalkan dengan mengurangkan rata-rata vektornya (misalnya, A - \bar{A}), ukuran tersebut disebut kemiripan kosinus terpusat dan ekuivalen dengan Koefisien korelasi Pearson. Untuk contoh pemusatan (*centering*), 
:
\text{jika}\, A = [A_1, A_2]^T, \text{ maka } \bar{A} = \left[\frac{(A_1+A_2)}{2},\frac{(A_1+A_2)}{2}\right]^T,


:
 \text{ sehingga } A-\bar{A}=  \left[\frac{(A_1-A_2)}{2},\frac{(-A_1+A_2)}{2}\right]^T.


### Jarak kosinus
Ketika jarak antara dua vektor dengan panjang satuan didefinisikan sebagai panjang selisih vektor mereka, maka
\operatorname{dist}(\mathbf A, \mathbf B)
= \sqrt{(\mathbf A - \mathbf B) \cdot (\mathbf A - \mathbf B)}
= \sqrt{\mathbf A \cdot \mathbf A -2(\mathbf A \cdot \mathbf B) + \mathbf B \cdot \mathbf B}
= \sqrt{2(1-S_C(\mathbf A, \mathbf B))}\,.


Meskipun demikian, **jarak kosinus** sering didefinisikan tanpa akar kuadrat atau faktor dari 2:
:  \text{jarak kosinus} = D_C(A,B) := 1 - S_C(A,B)\,.

Penting untuk dicatat bahwa, karena sebanding dengan kuadrat jarak Euklides, jarak kosinus bukanlah metrik jarak yang sesungguhnya; jarak ini tidak menunjukkan sifat ketaksamaan segitiga — atau, secara lebih formal, ketaksamaan Schwarz — dan melanggar aksioma kebetulan (*coincidence axiom*). Untuk memperbaiki sifat ketaksamaan segitiga sembari mempertahankan urutan yang sama, seseorang dapat mengubahnya ke jarak Euklides \sqrt{2(1- S_C(A,B))} atau jarak sudut . Sebagai alternatif, ketaksamaan segitiga yang berlaku untuk jarak sudut dapat dinyatakan secara langsung dalam bentuk kosinus; lihat di bawah.

### Jarak sudut dan kemiripan

Sudut ternormalisasi, yang disebut sebagai **jarak sudut**, antara sembarang dua vektor A dan B adalah metrik jarak formal dan dapat dihitung dari kemiripan kosinus. Komplemen dari metrik jarak sudut ini kemudian dapat digunakan untuk mendefinisikan fungsi **kemiripan sudut** yang dibatasi antara nilai 0 hingga 1, inklusif (terhitung).

Ketika elemen vektor dapat bernilai positif atau negatif:

:\text{jarak sudut} = D_{\theta} := \frac{ \arccos( \text{kemiripan kosinus} ) }{ \pi } = \frac{\theta}{\pi}

:\text{kemiripan sudut} = S_{\theta} := 1 - \text{jarak sudut} = 1 - \frac{\theta}{\pi}

Atau, jika elemen vektor selalu bernilai positif:

:\text{jarak sudut} = D_{\theta} := \frac{ 2 \cdot \arccos( \text{kemiripan kosinus} ) }{ \pi }  = \frac{2\theta}{\pi}

:\text{kemiripan sudut} = S_{\theta} := 1 - \text{jarak sudut} = 1 - \frac{2\theta}{\pi}
Sayangnya, penghitungan fungsi kosinus invers () berjalan lambat, sehingga penggunaan jarak sudut secara komputasi akan lebih mahal dibandingkan menggunakan jarak kosinus (yang bukan metrik) yang lebih umum di atas.

### Jarak Euklides ternormalisasi-L<sub>2</sub>

Proksi (pengganti, pendekatan, atau alternatif) efektif lainnya untuk jarak kosinus dapat diperoleh dengan normalisasi <math>L_2</math> dari vektor-vektor tersebut, diikuti dengan penerapan jarak Euklides normal. Menggunakan teknik ini, setiap suku dalam masing-masing vektor pertama-tama dibagi dengan besaran vektor tersebut, menghasilkan vektor dengan panjang satuan. Kemudian, jarak Euklides pada titik-titik ujung dari sembarang dua vektor akan menjadi metrik yang tepat yang memberikan urutan yang sama dengan jarak kosinus (sebuah transformasi monotonik dari jarak Euklides; lihat di bawah) untuk perbandingan vektor apa pun, dan lebih jauh lagi menghindari operasi trigonometri yang berpotensi mahal, yang diperlukan untuk menghasilkan metrik yang tepat. Setelah normalisasi dilakukan, ruang vektor ini dapat digunakan dengan berbagai teknik yang tersedia secara lengkap untuk sembarang ruang Euklides, terutama teknik standar reduksi dimensi. Bentuk jarak ternormalisasi ini sering digunakan di dalam banyak algoritma pemelajaran dalam (*deep learning*).

### Koefisien Otsuka–Ochiai
Dalam bidang biologi, terdapat konsep serupa yang dikenal sebagai koefisien Otsuka–Ochiai yang dinamai dari Yanosuke Otsuka (juga dieja sebagai Ōtsuka, Ootsuka, atau Otuka, ) dan Akira Ochiai (), juga dikenal sebagai koefisien Ochiai–Barkman atau koefisien Ochiai, yang dapat direpresentasikan sebagai:
:K =\frac{\sqrt}
Di sini, A dan B adalah himpunan, dan |A| adalah jumlah elemen dalam A. Jika himpunan direpresentasikan sebagai vektor bit, koefisien Otsuka–Ochiai terlihat memiliki persamaan dengan kemiripan kosinus. Skor ini identik dengan skor yang diperkenalkan oleh Godfrey Thomson.

Dalam sebuah buku baru-baru ini, koefisien tersebut secara tentatif salah diatributkan kepada peneliti Jepang lain dengan nama keluarga Otsuka. Kebingungan ini muncul karena pada tahun 1957, Akira Ochiai mengatributkan koefisien ini hanya kepada Otsuka (tanpa menyebut nama depan) dengan mengutip sebuah artikel dari Ikuso Hamai (), yang pada gilirannya mengutip artikel asli tahun 1936 oleh Yanosuke Otsuka.

## Sifat

Sifat yang paling menonjol dari kemiripan kosinus adalah ia mencerminkan perbandingan relatif, dan bukan absolut, dari dimensi vektor individu. Untuk sembarang konstanta positif a dan vektor V, vektor V dan aV sangatlah mirip secara maksimal. Oleh karena itu, ukuran ini paling tepat digunakan untuk data yang frekuensinya lebih penting daripada nilai absolutnya; terutama, frekuensi istilah (*term frequency*) dalam dokumen.
Namun, metrik yang lebih baru, yang didasarkan pada teori informasi, seperti Jensen–Shannon, SED, dan divergensi segitiga, telah terbukti memiliki semantik yang lebih baik setidaknya di dalam beberapa konteks.

Kemiripan kosinus berkaitan dengan jarak Euklides sebagai berikut. Nyatakan jarak Euklides dengan notasi lazim \|A - B\|, dan perhatikan bahwa

:\|A - B\|^2 = (A - B) \cdot (A - B) = \|A\|^2 + \|B\|^2 - 2 (A \cdot B)\  (identitas polarisasi)

melalui ekspansi (perluasan). Saat  dan  dinormalisasi menjadi panjang satuan, \|A\|^2 = \|B\|^2 = 1 sehingga bentuk matematis ini sama dengan

:2 (1 - \cos(A, B)).

Secara ringkas, jarak kosinus dapat dinyatakan di dalam bentuk jarak Euklides sebagai

:D_C(A, B) = \frac{\|A - B\|^2}{2}\quad\mathrm{ketika}\quad\|A\|^2 = \|B\|^2 = 1.

Jarak Euklides ini disebut *jarak tali busur* (karena ini adalah panjang tali busur pada lingkaran satuan) dan merupakan jarak Euklides di antara vektor-vektor yang dinormalisasi menjadi jumlah satuan dari nilai-nilai kuadrat di dalamnya.

**Distribusi nol (''null distribution''):** Untuk data yang bisa bernilai negatif maupun positif, distribusi nol untuk kemiripan kosinus adalah distribusi dari hasil kali titik antara dua vektor satuan acak yang saling bebas. Distribusi ini memiliki rata-rata (mean) nol dan variansi sebesar 1/n (di mana n adalah jumlah dimensi), dan meskipun distribusinya dibatasi antara −1 dan +1, seiring membesarnya n, distribusi ini akan semakin mendekati distribusi normal. Pada jenis data lain seperti aliran bit (*bitstream*), yang hanya mengambil nilai 0 atau 1, distribusi nol-nya mengambil bentuk yang berbeda dan mungkin memiliki rata-rata bukan nol.

## Ketaksamaan segitiga untuk kemiripan kosinus
Ketaksamaan segitiga biasa untuk berbagai sudut (yaitu, panjang busur pada sebuah bola berdimensi tinggi (*hypersphere*) satuan) memberikan kita perumusan bahwa
:|~\angle{AC} - \angle{CB}~| \le ~\angle{AB}~ \le ~\angle{AC}~ + ~\angle{CB}~.
Oleh karena fungsi kosinus menurun seiring dengan meningkatnya sudut dalam rentang radian , arah ketaksamaan ini menjadi terbalik saat kita mengambil nilai kosinus dari masing-masing nilai tersebut:
:\cos(\angle{AC} - \angle{CB}) \ge \cos(\angle{AB}) \ge \cos(\angle{AC} + \angle{CB}).
Dengan menggunakan rumus penambahan dan pengurangan kosinus, kedua ketaksamaan ini dapat ditulis dalam bentuk kosinus aslinya,
:\cos(A,C) \cdot \cos(C,B) + \sqrt{\left(1-\cos(A,C)^2\right)\cdot\left(1-\cos(C,B)^2\right)} \geq \cos(A,B),
:\cos(A,B) \geq \cos(A,C) \cdot \cos(C,B) - \sqrt{\left(1-\cos(A,C)^2\right)\cdot\left(1-\cos(C,B)^2\right)}.

Bentuk ketaksamaan segitiga ini dapat digunakan untuk memberikan batasan pada kemiripan minimum dan maksimum antara dua objek A dan B jika kemiripan terhadap objek referensi C telah diketahui. Pendekatan ini digunakan, misalnya, dalam pengindeksan data metrik, tetapi juga telah digunakan untuk mempercepat *[[Pengklasteran k rata-rata|k-means clustering]]* sferis (berbentuk seperti bola) dengan cara yang sama seperti ketaksamaan segitiga Euklides yang telah digunakan untuk mempercepat *k-means* reguler.

## Ukuran kosinus lunak
Kosinus lunak atau (kemiripan "lunak") di antara dua vektor mempertimbangkan kemiripan di antara pasangan fitur. Kemiripan kosinus tradisional menganggap fitur-fitur model ruang vektor (*vector space model*, VSM) bersifat independen atau sepenuhnya berbeda, sedangkan ukuran kosinus lunak mengusulkan untuk turut mempertimbangkan kemiripan fitur dalam VSM, yang pada akhirnya membantu menggeneralisasikan konsep kosinus (dan kosinus lunak) serta gagasan mengenai kemiripan (lunak).

Sebagai contoh, dalam bidang pengolahan bahasa alami (PBA), kemiripan antarfitur cukup intuitif. Fitur-fitur seperti kata, ''n''-gram, atau *n*-gram sintaksis bisa jadi sangat mirip, meskipun secara formal dianggap sebagai fitur yang berbeda di dalam VSM. Misalnya, kata "bermain" dan "permainan" merupakan kata yang berbeda sehingga dipetakan ke titik yang berbeda di VSM; padahal keduanya saling terhubung secara semantik. Dalam kasus *n*-gram atau *n*-gram sintaksis, jarak Levenshtein dapat diaplikasikan (bahkan, jarak Levenshtein juga dapat diaplikasikan pada kata-kata tunggal).

Untuk menghitung kosinus lunak, matriks  digunakan untuk mengindikasikan kemiripan antarfitur. Ini dapat dihitung lewat jarak Levenshtein, kemiripan WordNet, atau ukuran kemiripan lainnya. Kemudian, kita hanya perlu mengalikannya dengan matriks ini.

Diberikan dua vektor berdimensi-, yakni a dan b, kemiripan kosinus lunaknya dihitung sebagai berikut:

:\begin{align}
    \operatorname{soft\_cosine}_1(a,b)=
    \frac{\sum\nolimits_{i,j}^N s_{ij}a_ib_j}{\sqrt{\sum\nolimits_{i,j}^N s_{ij}a_ia_j}\sqrt{\sum\nolimits_{i,j}^N s_{ij}b_ib_j}},
\end{align}


di mana .

Jika tidak ada kemiripan di antara fitur (,  untuk ), persamaan tersebut akan setara dengan rumus kemiripan kosinus konvensional.

Kompleksitas waktu dari ukuran ini bersifat kuadratik, yang membuatnya dapat diterapkan pada berbagai tugas di dunia nyata. Perlu dicatat bahwa kompleksitas ini dapat dikurangi menjadi subkuadratik. Implementasi efisien dari kemiripan kosinus lunak semacam ini sudah disertakan di dalam pustaka sumber terbuka (*open-source*) Gensim.

## Lihat pula
* Koefisien Sørensen–Dice
* Jarak Hamming
* Korelasi
* Indeks Jaccard
* SimRank
* Temu balik informasi

## Referensi

## Pranala luar
* Weighted cosine measure
* A tutorial on cosine similarity using Python