昨天我了解到余弦相似度,定义为
可以有效地测量两个向量的相似程度。
我发现这里的定义使用L2范数来标准化A
和B
的点积,我感兴趣的是为什么不使用{{1的L1范数分母和A
分母?
我的老师告诉我,如果我在分母中使用L1范数,那么如果B
,则余弦相似度不会为1。然后,我进一步问他,如果我修改余弦相似度定义如下,与原始模型相比,修改后的模型有哪些优缺点?
sim(A,B)=(A * B)/(|| A || 1 * || B || 1)如果A!= B
如果A == B ,则sim(A,B)= 1
如果有人能给我一些解释,我将不胜感激。
答案 0 :(得分:8)
如果你使用了L1-norm,你不再计算余弦。
余弦是几何概念,而不是随机定义。附有一整串数学。 如果使用了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) - 其中大多数人都认为它们应该具有与上述示例相似的相似性(并且余弦确实给出相同的相似性),你的等式产生{{1} }。所以你的相似性与任何直觉都不匹配,是吗?