参考资料
- 《百面机器学习》
- https://www.it1352.com/1689274.html
- https://blog.csdn.net/m0_37890477/article/details/80413344
余弦距离
定义
对于两个向量AAA和BBB,余弦距离=1−cos(A,B)余弦距离=1-cos(A,B)余弦距离=1−cos(A,B),其中,cos(A,B)cos(A,B)cos(A,B)为余弦相似度,计算公式为:
cos(A,B)=A⋅B∥A∥2∥B∥2cos\left ( A,B\right )=\frac{A\cdot B}{\left \| A\right \|_{2}\left \| B\right \|_{2}}cos(A,B)=∥A∥2∥B∥2A⋅B
余弦距离 v.s. 欧式距离
-
总的来说,欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异。
-
余弦距离在高维情况下依然保持[0, 2]的范围,而欧式距离的数值则受维度的影响,范围不固定,含义也比较模糊。
-
如果向量模长经过归一化,欧式距离与余弦距离有着单调的关系,如Word2Vec中的向量。
余弦距离不是严格定义的距离
距离的定义
在一个集合中,如果每一对元素均可唯一确定一个实数,使得三条公理(正定性,对称性,三角不等式)成立,则该实数可称为这对元素之间的距离。
余弦距离的正定性
根据余弦距离的定义,有
dist(A,B)=1−cosθ⩾0dist\left ( A,B\right )=1-cos\theta \geqslant 0dist(A,B)=1−cosθ⩾0
当且仅当A=BA=BA=B时,dist(A,B)=0dist\left ( A,B\right )=0dist(A,B)=0。因此,余弦距离满足正定性
余弦距离的对称性
根据余弦距离的定义,有
dist(A,B)=∥A∥2∥B∥2−AB∥A∥2∥B∥2=∥B∥2∥A∥2−AB∥B∥2∥A∥2=dist(B,A)dist\left ( A,B\right )=\frac{\left \| A\right \|_{2}\left \| B\right \|_{2}-AB}{\left \| A\right \|_{2}\left \| B\right \|_{2}}=\frac{\left \| B\right \|_{2}\left \| A\right \|_{2}-AB}{\left \| B\right \|_{2}\left \| A\right \|_{2}}=dist\left ( B,A\right )dist(A,B)=∥A∥2∥B∥2∥A∥2∥B∥2−AB=∥B∥2∥A∥2∥B∥2∥A∥2−AB=dist(B,A)
因此,余弦距离满足对称性
余弦距离的三角不等式
举一个反例,A=(1,0)A=(1,0)A=(1,0),B=(1,1)B=(1,1)B=(1,1),C=(0,1)C=(0,1)C=(0,1),则有
dist(A,B)+dist(B,C)=2−2<1=dist(A,C)dist(A,B)+dist(B,C)=2-\sqrt{2}< 1=dist(A,C)dist(A,B)+dist(B,C)=2−2<1=dist(A,C)
因此,余弦距离不满足三角不等式。
代码示例
from sklearn.metrics.pairwise import pairwise_distances
from sklearn.metrics.pairwise import euclidean_distances
X = [[1,3,2],[2,2,1]]
cosine_dist = pairwise_distances(X, metric="cosine")
euclidean_dist = euclidean_distances(X)
print(cosine_dist)
print(euclidean_dist)
本文介绍了余弦距离和欧式距离的概念,探讨了它们在数值和方向差异上的区别。余弦距离不受维度影响,保持在[0,2]范围内,而欧式距离受维度影响,范围不固定。在高维向量归一化后,两者有特定关系。然而,余弦距离不满足三角不等式。通过代码示例展示了如何使用sklearn计算这两个距离。

1260

被折叠的 条评论
为什么被折叠?



