关于余弦相似性的一些问题

Joh*_*ith 3 cluster-analysis distance similarity data-mining cosine-similarity

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

在此输入图像描述

可以有效地测量两个向量的相似程度.

我发现这里的定义使用L2范数来标准化和的点积,AB我感兴趣的是为什么不使用AB分母中的L1范数?

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

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

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

如果有人能给我一些解释,我将不胜感激.

Ano*_*sse 8

如果你使用L1-norm,你就不再计算余弦.

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

另请参阅:维基百科:三角函数 - 余弦

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

Euclidean(x,y)^2 = sum( (x-y)^2 ) = sum(x^2) + sum(y^2) - 2 sum(x*y)
Run Code Online (Sandbox Code Playgroud)

如果 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))
Run Code Online (Sandbox Code Playgroud)

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

如果L2对数据进行了规范化,那么

Euclidean(x_norm, y_norm) = sqrt(2) * sqrt(1-cossim(x,y))
Run Code Online (Sandbox Code Playgroud)

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

使用你的等式,他们会有相似之处 (2+2)/(2*4) = 0.5

看看向量(0,1)和(0,2) - 其中大多数人都认为它们应该具有与上面的例子类似的相似性(并且余弦确实给出相同的相似性),你的等式产生(0+2)/(1+2) = 0.6666....所以你的相似性与任何直觉都不匹配,是吗?