【问题标题】:some questions on cosine similarity关于余弦相似度的一些问题
【发布时间】:2014-10-15 20:08:00
【问题描述】:

昨天了解到余弦相似度,定义为

可以有效地衡量两个向量的相似程度。

我发现这里的定义使用L2-norm来规范化AB的点积,我感兴趣的是为什么不使用AB的L1-norm在分母中?

我的老师告诉我,如果我在分母中使用 L1 范数,那么如果 A=B,余弦相似度就不会为 1。然后,我进一步问他,如果我修改余弦相似度定义如下,修改后的模型与原模型相比有哪些优缺点?

sim(A,B) = (A * B) / (||A||1 * ||B||1) 如果 A!=B

sim(A,B) = 1 如果 A==B

如果有人能给我更多解释,我将不胜感激。

【问题讨论】:

    标签: cluster-analysis distance data-mining similarity cosine-similarity


    【解决方案1】:

    如果您使用 L1 范数,您将不再计算余弦

    余弦是一个几何概念,而不是随机定义。它附有一整套数学。 如果您使用 L1,则不再测量角度

    另请参阅:Wikipedia: Trigonometric functions - Cosine

    请注意,余弦在 L2 归一化向量上与欧几里得距离是单调的

    Euclidean(x,y)^2 = sum( (x-y)^2 ) = sum(x^2) + sum(y^2) - 2 sum(x*y)
    

    如果 x 和 y 被 L2 归一化,然后 sum(x^2)=sum(y^2)=1,然后

    Euclidean(x_norm,y_norm)^2 = 2 * (1 - sum(x_norm*y_norm)) = 2 * (1 - cossim(x,y))
    

    因此,使用余弦相似度本质上意味着将您的数据标准化为单位长度。但也有与此相关的计算优势,因为 sum(x*y) 计算稀疏数据的成本更低。

    如果您对数据进行 L2 标准化,那么

    Euclidean(x_norm, y_norm) = sqrt(2) * sqrt(1-cossim(x,y))
    

    对于您问题的第二部分:修复 L1 规范并不容易。考虑向量 (1,1) 和 (2,2)。显然,这两个向量具有相同的角度,因此应该具有余弦相似度1。

    使用您的方程式,它们将具有相似性(2+2)/(2*4) = 0.5

    查看向量 (0,1) 和 (0,2) - 大多数人都认为它们应该具有与上述示例相似的相似性(并且余弦确实给出了相同的相似性),您的等式得出(0+2)/(1+2) = 0.6666...。所以你的相似性不符合任何直觉,是吗?

    【讨论】:

    • 感谢您的解释。我觉得可以使用 L1 norm 是基于以下示例:Doc1 has (I, love, you) and Doc2 has (you)。我觉得(你)是Doc1和Doc2之间的共同词。 Doc1 选择(你)的概率是 1/3。那么 Doc1 和 Doc2 之间的相似性对我来说似乎是 1/3,但如果使用 cosine sim,相似性将是 1/sqrt(3)。你能告诉我为什么在我的例子中 1/sqrt(3) 比 1/3 好吗?谢谢。
    • 嗯,这就是定义 (0,0,1) 和 (1,1,1) 之间的角度的方式...如果您想要不同的距离度量 - 例如 Jaccard - 那就是美好的;但它不再是一个角度,而是例如设置交叉点大小;或者如果您对概率距离(“Doc1 选择的概率...”)感兴趣,请查看散度度量和 \chi^2 距离。这些存在,但它们有不同的直觉和名称。
    猜你喜欢
    • 2011-02-21
    • 2011-02-20
    • 2014-11-19
    • 2020-08-12
    • 2013-05-29
    • 2011-01-01
    • 2017-12-12
    • 2013-02-12
    相关资源
    最近更新 更多