余弦相似度和余弦距离之间的差异

Posted

技术标签:

【中文标题】余弦相似度和余弦距离之间的差异【英文标题】:Difference between cosine similarity and cosine distance 【发布时间】:2020-02-11 07:59:37 【问题描述】:

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

link to cos distance 1

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

不同于 sklearn.metrics.pairwise.cosine_similarity 是

link to cos similarity 2

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

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

【问题讨论】:

您标记为“链接到cos相似度1”的链接是不是余弦相似度,在链接中没有这样称呼。它是余弦距离。 想一个小例子:distance(X, X)应该是0,因为XX的距离i> 为 0。similarity(X, X) 应该是衡量相似度的函数的最大值(在本例中为 1),因为 XX 是两件事最相似的地方。 @WarrenWeckesser,谢谢,我改好了名字。 【参考方案1】:

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

Cosine_distance = 1 - cosine_similarity


为什么?

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

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

同样,您可以为生成的相似值范围定义余弦距离。

余弦相似度范围: -1 表示完全相反,1 表示完全一样,0 表示正交。


参考文献:Scipywolfram

【讨论】:

感谢您的解释。术语有点混乱。我觉得余弦距离应该简称为余弦。余弦相似距离应该称为余弦距离。 我同意,但这是工程/数学社区的定义。 是的,现在改变它没有意义。 @user1700890 请参阅第一个要点here,对于要成为 距离 的事物,它必须满足 "d(x,y) = 0 当且仅如果 x = yie 从一个点到它自己正好为零”。余弦距离满足这一点,余弦相似度不满足。因此是术语。 看看this article 中的第二句话,虽然不是严格的数学指标,但在统计数据中,相似性通常被称为指标,因为它们扮演着相似的角色。 sklearn 的指标更像是测量(通俗地)。

以上是关于余弦相似度和余弦距离之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

Spark笔记(1) :余弦相似度计算

计算两个向量的余弦相似度

计算两个向量的余弦相似度

余弦相似度

几种相似性/距离(杰卡德距离和余弦距离)与其matlab实现

距离公式汇总以及Python实现