Python学习系列文章: 目录
一、概述
三角函数,相信大家在初高中都已经学过,而这里所说的余弦相似度(Cosine Distance)的计算公式和高中学到过的公式差不多。
在几何中,夹角的余弦值可以用来衡量两个方向(向量)的差异;因此可以推广到机器学习中,来衡量样本向量之间的差异。
因此,我们的公式也要稍加变换,使其能够用向量来表示。
二、计算公式
① 二维平面上的余弦相似度
假设 二维平面 内有两向量:
A
(
x
1
,
y
1
)
A(x_{1},y_{1})
A(x1,y1) 与
B
(
x
2
,
y
2
)
B(x_{2},y_{2})
B(x2,y2)
则二维平面的
A
A
A、
B
B
B 两向量的余弦相似度公式为:
c
o
s
(
θ
)
=
a
⋅
b
∣
a
∣
∣
b
∣
cos(theta)=frac{acdot b}{|a| |b|}
cos(θ)=∣a∣∣b∣a⋅b
c
o
s
(
θ
)
=
a
⋅
b
∣
a
∣
∣
b
∣
=
x
1
x
2
+
y
1
y
2
x
1
2
+
y
1
2
x
2
2
+
y
2
2
begin{aligned} cos(theta)&=frac{acdot b}{|a| |b|}\ &=frac{x_{1}x_{2}+y_{1}y_{2}}{sqrt{x_{1}^2+y_{1}^2}sqrt{x_{2}^2+y_{2}^2}} end{aligned}
cos(θ)=∣a∣∣b∣a⋅b=x12+y12x22+y22x1x2+y1y2
② n维空间上的余弦相似度
推广到 n 维空间的两个向量
A
(
x
11
,
x
12
,
.
.
.
,
x
1
n
)
A(x_{11},x_{12},…,x_{1n})
A(x11,x12,...,x1n) 与
B
(
x
21
,
x
22
,
.
.
.
,
x
2
n
)
B(x_{21},x_{22},…,x_{2n})
B(x21,x22,...,x2n),则有余弦相似度为:
c
o
s
(
θ
)
=
a
⋅
b
∣
a
∣
∣
b
∣
=
∑
k
=
1
n
x
1
k
x
2
k
∑
k
=
1
n
x
1
k
2
∑
k
=
1
n
x
2
k
2
begin{aligned} cos(theta)&=frac{acdot b}{|a| |b|}\ &=frac{sum_{k=1}^n x_{1k} x_{2k}}{sqrt{sum_{k=1}^nx_{1k}^2}sqrt{sum_{k=1}^nx_{2k}^2}} end{aligned}
cos(θ)=∣a∣∣b∣a⋅b=∑k=1nx1k2∑k=1nx2k2∑k=1nx1kx2k
③ 注意
- 余弦相似度的取值范围为
[
−
1
,
1
]
[-1,1]
- 余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。
- 当两个向量的方向重合时余弦取最大值
1
1
−
1
-1
暂无评论内容