motivation
在計算兩個特徵之間的相似程度的時候經常會用到余弦相似度公式,這個公式以前在高中學過,不高好像已經基本還給老師了,今天再這裡補充一下。在nlp中經常需要對特徵表徵之後的高維向量之間計算相似度,有向量a
\mathrm a
a和向量b
\mathrm b
b,a=(x
1,x2
,...
,xn)
\mathrm a=(x_1,x_2,...,x_n)
a=(x1
,x2
,...
,xn
),b=(x
1′,x
2′,.
..,x
n′)\mathrm b=(x'_1,x'_2,...,x'_n)
b=(x1′
,x2
′,.
..,x
n′)
,則向量a
\mathrm a
a和b\mathrm b
b之間的余弦相似度為
c os
b>=a
⋅b∣a
∣∣b∣
=x1x
1′+x
2x2′
+,..
.,+x
nxn′
x1²+
x2²+
,...
,+xn
²x1′
²+x2
′²+,
...,
+xn′
²=ut
v∣∣u
∣∣2∣
∣v∣∣
2cos=\frac=\frac\sqrt}=\fraccos
b>=∣
a∣∣b
∣a⋅b
=x1
²+x
2²+
,...
,+xn
²x
1′²
+x2′
²+,
...,
+xn′
²x
1x1
′+x
2x2
′+,
...,
+xn
xn′
=∣∣
u∣∣2
∣∣v
∣∣2
utv
2.derivation proof
首先需要該公式來之於兩向量的數量積公式a⋅b
=∣a∣
∣b∣c
osb>
\mathrm a·\mathrm b=|\mathrm a||\mathrm b|cos
a⋅b=∣a
∣∣b∣cos
b>
該公式的推導如下:
在中有c=a
−b\mathrm c = \mathrm a - \mathrm b
c=a−
b,(注:為了表示的方便我們在二維的平面上表示向量,實際上特徵的維度一般可以達到幾百甚至幾千維)由餘弦定理可以得到如下公式
c ²=
a²+b
²−2∣
a∣∣b
∣cos
b>
①c²=\mathrm a²+\mathrm b²-2|\mathrm a||\mathrm b|cos①
c²=a²+
b²−2
∣a∣∣
b∣co
sb>①把c=a
−b\mathrm c = \mathrm a - \mathrm b
c=a−
b帶入到公式①中化簡之後便可以得到數量積公式。
a ⋅b
=∣a∣
∣b∣c
osb>
\mathrm a·\mathrm b=|\mathrm a||\mathrm b|cos
a⋅b=∣a
∣∣b∣cos
b>
補充:關於餘弦定理的幾何證明方法如下:
如圖所示,在△abc中,bc=a,ac=b,ab=c,
作ad⊥bc於d,則ad=c*sinb,dc=a-bd=a-c*cosb
在rt△acd中,
b²=ad²+dc²=(c*sinb)²+(a-c*cosb)²
=c²sin²b+a²-2ac*cosb+c²cos²b
=c²(sin²b+cos²b)+a²-2ac*cosb
=c²+a²-2ac*cosb
余弦相似度
余弦距離 歐氏距離和傑卡德相似性度量的對比分析 1 余弦距離 余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。向量,是多維空間中有方向的線段,如果兩個向量的方向一致,即夾角接近零,那麼這兩個向量就相近。而要確定兩個向量方向是否一致,這就要用到餘弦定理...
余弦相似度
基於餘弦定理計算相似度的應用很多,比如推薦系統中的協同過濾,計算文字的相似性等等。它用計算兩者空間向量的夾角來表示兩者的相似性。先看一下餘弦定理的公式 wu v u ivi u2i v 2i 上訴公式表示uv兩者的相似度,ui表示u在i緯度的數值。在使用者行為資料 使用者只有操作和未操作兩種狀態,也...
余弦相似度
余弦距離,也稱為余弦相似度,是用向量空間中兩個向量夾角的余弦值作為衡量兩個個體間差異的大小的度量。相比距離度量,余弦相似度更加注重兩個向量在方向上的差異,而非距離或長度上。公式如下 python實現如下 import numpy as np from scipy.spatial.distance i...