余弦相似度和余弦距离的区别

use*_*890 12 python scipy cosine-similarity scikit-learn

它看起来像 scipy.spatial.distance.cdist 余弦相似距离:

链接到 cos 距离 1

1 - u*v/(||u||||v||)
Run Code Online (Sandbox Code Playgroud)

与 sklearn.metrics.pairwise.cosine_similarity 不同,后者是

cos相似度2的链接

 u*v/||u||||v||
Run Code Online (Sandbox Code Playgroud)

有人知道不同定义的原因吗?

mak*_*kis 18

好问题,但是是的,这是两个不同的东西,但通过以下等式连接:

Cosine_distance = 1 - cosine_similarity


为什么?

通常,人们使用余弦相似度作为向量之间的相似度度量。现在,距离可以定义为 1-cos_similarity。

这背后的直觉是,如果 2 个向量完全相同,那么相似度1(角度=0),因此距离0(1-1=0)。

同样,您可以为结果相似度值范围定义余弦距离。

余弦相似度范围: ?1 表示完全相反,1 表示完全相同,0 表示正交。


参考资料Scipy wolfram

来自 scipy

  • @user1700890请参阅第一个要点[此处](https://en.wikipedia.org/wiki/Distance#General_metric),对于某个*距离*,它必须满足*“d(x,y) = 0如果并且仅当 x = yie 从一点到其自身精确为零时“*。余弦*距离*满足这一点,余弦*相似度*则不满足。因此就有了这个术语。 (2认同)
  • 看一下[本文](https://en.wikipedia.org/wiki/Similarity_measure)中的第二句话,虽然严格来说不是一个数学度量,但在统计中相似性通俗地称为度量,因为它们扮演相似的角色。sklearn 的指标更像是测量(通俗地说)。 (2认同)