余弦距离是否是严格意义上的距离?

首先,不是的!!!

分析如下:

距离三要素

  • 非负性
  • 正定性
  • 对称性
  • 三角不等式

余弦相似度计算公式为

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 cos = \frac{a·b}{||a|| * ||b||} = \frac{x_1x_2+y_1y_2}{\sqrt{x_1^2+y_1^2} · \sqrt{x_2^2+y_2^2}} cos=abab=x12+y12 x22+y22 x1x2+y1y2

余弦距离计算公式为

d i s t = 1 − c o s = ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 − a b ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 dist = 1-cos = \frac{||a||_2||b||_2-ab}{||a||_2||b||_2} dist=1cos=a2b2a2b2ab

1. 非负性 - 距离本身必须是非负的

c o s cos cos取值为[-1, 1], d i s t dist dist取值为[0, 2], d i s t > = 0 dist >= 0 dist>=0恒成立。

2. 正定性 - 如果A与B的距离是零,那么A与B相等

d i s t = 0 = > ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 = a b = > a = b dist = 0 => ||a||_2||b||_2 = ab => a=b dist=0=>a2b2=ab=>a=b

3. 对称性 - A点到B点的距离等于B点到A点的距离

d i s t ( a , b ) = ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 − a b ∣ ∣ a ∣ ∣ 2 ∣ ∣ b ∣ ∣ 2 = ∣ ∣ b ∣ ∣ 2 ∣ ∣ a ∣ ∣ 2 − b a ∣ ∣ b ∣ ∣ 2 ∣ ∣ a ∣ ∣ 2 = d i s t ( b , a ) dist(a,b)=\frac{||a||_2||b||_2-ab}{||a||_2||b||_2} = \frac{||b||_2||a||_2-ba}{||b||_2||a||_2} = dist(b,a) dist(a,b)=a2b2a2b2ab=b2a2b2a2ba=dist(b,a)

三角不等式 - A到B的距离+B到C的距离>=A到C的距离

单位圆⭕️上,欧式距离与余弦距离存在:

e u c = 2 ( 1 − c o s ) = 2 d i s t euc = \sqrt{2(1-cos)} = \sqrt{2dist} euc=2(1cos) =2dist

可以得到

d i s t = e u c 2 2 dist = \frac{euc^2}{2} dist=2euc2

单位圆上,欧式距离与余弦距离的范围都是[0, 2],欧式距离是合法距离,但余弦距离与欧式距离存在二次关系,自然不满足三角不等式。

例:a、b、c非常近,欧式距离为 δ \delta δ,三点在圆弧上近似在一条直线上(b在a和c之间),所以a与c的欧式距离接近2 δ \delta δ,因此a与b,b与c的余弦距离为 δ 2 2 \frac{\delta ^2}{2} 2δ2,a与c的余弦距离接近 2 δ 2 2\delta^2 2δ2,大于a与b,b与c的余弦距离之和。

欢迎关注微信公众号(算法工程师面试那些事儿),本公众号聚焦于算法工程师面试,期待和大家一起刷leecode,刷机器学习、深度学习面试题等,共勉~

算法工程师面试那些事儿

おすすめ

転載: blog.csdn.net/qq_40006058/article/details/121090911