图像上的一个是正确的。在二维中,它是根据余弦定律得出的,该定律将三角形的一侧的长度与另一两侧的长度以及与c相反的角度theta关联起来:
c^2==a^2+b^2-2*b*c(cos(theta))
您可以通过多种方式证明这一点,一个很好的验证方法是知道当cos(gamma)==0
(边a和b正交)时,您将得到勾股定理。要在图像上获取公式,必须将其转换为解析几何(矢量)
norm(A-B)^2==norm(A)^2+norm(B)^2−2*norm(A)*norm(B)*cos(theta)
通过使用norm(AB)^ 2是定义(AB)*(AB)并扩展我们得到
norm(A-B)^2 ==norm(A)^2+norm(B)^2-2*A*B
因此,将两个表达式均等,然后进行抵消,得出
norm(A)*norm(B)*cos(theta) = A*B
这是您定义(和norm(v) = sqrt(v*v)
)上的(重新安排的)公式。对于n维,您可以展示出这种效果,这是因为旋转欧几里得空间会保留范数和内积,并且由于矢量所覆盖的2D平面恰好是xy平面的旋转。
一个很好的完整性检查是,正交性产生的余弦为0,并且该余弦在0和1之间(这是柯西·施瓦兹定理)
更新:在评论中提到的示例中,您可以通过运行以下命令查看博客的结果
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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句