gpt4 book ai didi

machine-learning - 我有两个计算 'cosine similarity' 的公式,有什么区别?

转载 作者:行者123 更新时间:2023-11-30 09:42:50 25 4
gpt4 key购买 nike

我正在做一个关于电影数据集余弦相似度的项目,我对计算余弦相似度的公式感到困惑。

enter image description here

但是我上网查了一下,有些文章显示分母是这样的: sqrt(A1^2+B1^2) * sqrt(A2^2+B2^2) * ... * sqrt(Ai^2+ Bi^2)

我很困惑,有什么区别吗?哪一个是正确的还是两者都正确?

最佳答案

您的图片上的内容是正确的。在二维中,它源自 Law of cosines它将三角形的一条边的长度与另外两条边的长度以及对角 c、theta 联系起来:

c^2==a^2+b^2-2*b*c(cos(theta))

您可以通过多种方式证明这一点,一个很好的验证是知道当 cos(gamma)==0 (a 边和 b 边正交)时,您就得到了毕达哥拉斯定理。要获得图像上的公式,您必须将其转换为解析几何(向量)

范数(A-B)^2==范数(A)^2+范数(B)^2−2*范数(A)*范数(B)*cos(θ)

并通过使用范数(A-B)^2 根据定义 (A-B)*(A-B) 并展开我们得到

范数(A-B)^2 ==范数(A)^2+范数(B)^2-2*A*B

因此,使两个表达式相等并进行取消,得到

范数(A)*范数(B)*cos(theta) = A*B

这是您的定义的(重新排列的)公式(以及 norm(v) = sqrt(v*v))。对于 n 维,您可以证明这是有效的,因为旋转欧几里得空间可以保留范数和内积,并且因为向量跨越的 2D 平面恰好只是 xy 平面的旋转。

一个好的健全性检查是,正交性会产生 0 的余弦,并且余弦介于 0 和 1 之间(此 is the Cauchy Schwarz theorem )

更新:在您的评论中提到的示例中,您可以通过运行来查看博客的结果

import sklearn.metrics.pairwise as pw
print(pw.cosine_similarity([[4,3]],[[5,5]]))
print(pw.cosine_similarity([[4,3,5]],[[5,5,1]]))

请注意,如果您运行:

from sklearn.metrics.pairwise import pairwise_distances
print(pairwise_distances([[4,3,5]],[[5,5,1]],metric='cosine'))

您得到 0.208 而不是 0.792,这是因为使用pairwise_distance余弦度量以 1-cos(theta) 形式给出(请参阅 0.208 + 0.792 为 1)。您进行此转换是因为当您谈论距离时,您希望从一个点到其自身的距离为 0。

关于machine-learning - 我有两个计算 'cosine similarity' 的公式,有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56604737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com