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

21

看起来像是使用scipy.spatial.distance.cdist计算余弦相似度距离:

cos距离1的链接

1 - u*v/(||u||||v||)

不同于sklearn.metrics.pairwise.cosine_similarity,后者是cos similarity 2的链接

 u*v/||u||||v||

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


你标记为“link to cos similarity 1”的链接不是余弦相似度,而且在链接中也没有这样称呼。它是余弦距离。 - Warren Weckesser
2
考虑特殊情况:distance(X, X) 应该为0,因为从 XX 的距离是0。similarity(X, X) 应该是测量相似度的函数的最大值(在这种情况下为1),因为 XX 是两个物体之间最相似的。 - Warren Weckesser
@WarrenWeckesser,谢谢您,我已经修正了名称。 - user1700890
1个回答

36

很好的问题,但是是的,它们是两个不同的东西,但通过以下等式相互关联:

余弦距离 = 1 - 余弦相似度


为什么呢?

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

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

类似地,您可以为结果相似度范围定义余弦距离。

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


参考资料: Scipy wolfram

From scipy


感谢您的解释。术语有点令人困惑。我觉得余弦距离应该被称为余弦,而余弦相似度距离应该被称为余弦距离。 - user1700890
1
我同意,但这是工程/数学界定义的方式。 - seralouk
是的,现在改变它没有意义。 - user1700890
1
@user1700890,看这里的第一条要点(https://en.wikipedia.org/wiki/Distance#General_metric),为了成为“距离”,它必须满足“d(x,y)= 0当且仅当x = y.即从一个点到自身的距离是零”。余弦“距离”满足此条件,而余弦“相似度”则不满足。因此有了这个术语。 - Dan
@Dan 谢谢你,Dan。你的解释很有道理。有趣的是 cosine_similaritysklearn.metrics 下,却不是度量标准。 - user1700890
1
看一下这篇文章中的第二句话,虽然它不是严格的数学度量标准,但在统计学中,相似性通常被称为度量标准,因为它们填补了类似的角色。 sklearn的度量更像是测量(口语上)。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接