ตัวอย่าง Cosine Distance ระหว่าง 1-D arrays หรือระหว่าง Vector แต่ละคู่

บทความโดย ผศ.ดร.ณัฐโชติ พรหมฤทธิ์
ภาควิชาคอมพิวเตอร์
คณะวิทยาศาสตร์
มหาวิทยาลัยศิลปากร

Cosine Distance คือค่าที่ใช้วัดความไม่คล้ายกันระหว่างเวกเตอร์สองตัวในพื้นที่เวกเตอร์โดยใช้ Cosine Similarity ในการคำนวณความไม่คล้ายกัน (Dissimilarity) ซึ่งมีสูตรดังนี้:

Cosine Similarity = A⋅B/∥A∥∥B∥

A⋅B คือ dot product ระหว่างเวกเตอร์ A และ B
∥A∥ คือความยาว (magnitude) ของเวกเตอร์ A
∥B∥ คือความยาว (magnitude) ของเวกเตอร์ B

Cosine Distance=1−Cosine Similarity

ให้เวกเตอร์ A=[1,2,3] และ B=[4,5,6]

คำนวณ Dot Product
A⋅B=1∗4+2∗5+3∗6=4+10+18=32

คำนวณ Magnitude ของเวกเตอร์ A
∥A∥=sqrt(1^2+2^2+3^2​=sqrt(1+4+9​)=sqrt(14)

คำนวณ Magnitude ของเวกเตอร์ B
∥B∥=sqrt(4^2+5^2+6^2)​=sqrt(16+25+36)​=sqrt(77​)

คำนวณ Cosine Similarity
Cosine Similarity=32/sqrt(14)*​sqrt(77)≈0.9746

การคำนวณ Cosine Distance
Cosine Distance=1−0.9746≈0.0254

import plotly.express as px
from nltk.cluster.util import cosine_distance
cosine_distance([1,2,3], [4,5,6])

0.025368153802923787

fig = px.scatter(x=[3, 3, 0, 2], y=[14, 0, 16, 0])
fig.add_shape(type='line', x0=0, y0=0, x1=0, y1=16, line=dict(color='Red'))
fig.add_shape(type='line', x0=0, y0=0, x1=3, y1=14, line=dict(color='Red'))
fig.add_shape(type='line', x0=0, y0=0, x1=3, y1=0, line=dict(color='Red'))

fig.update_layout(
    yaxis=dict(scaleanchor="x", scaleratio=1),
    xaxis=dict(constrain="domain"),
    width=800,  
    height=600
)

fig.show()
cosine_distance([0,16], [3,14])

0.02219758592259058

cosine_distance([3,14], [3,0])

0.7904709112691265

cosine_distance([3,14], [2,0])

0.7904709112691266

cosine_distance([0,16], [2,0])

1.0

cosine_distance([0,16], [3,0])

1.0