如果您使用了L1范数,则不再计算余弦相似度。
余弦是一个几何概念,而不是随意的定义。它有一整套附加的数学理论。如果您使用了L1范数,就不再测量角度了。
另请参阅:
维基百科:三角函数-余弦
请注意,余弦函数在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...
。所以您的相似度并不符合直觉,对吗?