关于机器学习:向量之一为全零时的余弦相似度

Cosine similarity when one of vectors is all zeros

如何表达余弦相似度(http://en.wikipedia.org/wiki/Cosine_similarity)

向量之一为全零时是什么?

v1 = [1,1,1,1,1]

v2 = [0,0,0,0,0]

当我们根据经典公式进行计算时,除以零:

1
2
3
4
5
6
7
8
9
10
Let d1 = 0 0 0 0 0 0
Let d2 = 1 1 1 1 1 1
Cosine Similarity (d1, d2) =  dot(d1, d2) / ||d1|| ||d2||dot(d1, d2) = (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) + (0)*(1) = 0

||d1|| = sqrt((0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2 + (0)^2) = 0

||d2|| = sqrt((1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2 + (1)^2) = 2.44948974278

Cosine Similarity (d1, d2) = 0 / (0) * (2.44948974278)
                           = 0 / 0

我想在集群应用程序中使用这种相似性度量。
而且我经常需要比较这些向量。
同样[0,0,0,0,0] vs. [0,0,0,0,0]

您有经验吗?
由于这是一个相似性(而不是距离)度量,因此我应该对

使用特殊情况

d([1,1,1,1,1]; [0,0,0,0,0])= 0

d([0,0,0,0,0]; [0,0,0,0,0])= 1

关于

d([1,1,1,0,0]; [0,0,0,0,0])=?等


如果您有0个向量,则余弦是您的应用程序错误的相似性函数。

余弦距离基本上等于L_2归一化数据的平方欧几里德距离。 IE。您可以将每个向量归一化为单位长度1,然后计算平方的欧几里得距离。

余弦的另一个好处是性能-在非常稀疏的高维数据上进行计算,比欧几里得距离要快。它得益于对正方形的稀疏性,而不仅仅是线性。

虽然您显然可以尝试将相似性在正好为1的情况下归为0,而当它们相同时则为最大值,但这并不能真正解决潜在的问题。

不要通过您可以轻松计算的距离来选择距离。

请选择距离,以使结果对您的数据有意义。如果该值未定义,则没有意义...

有时候,将常量0数据作为无意义的数据丢弃可能是可行的(例如,分析Twitter噪音,并看到一条全数字,无字的Tweet)。有时不是。


未定义。

认为您在零向量处有一个不为零的向量C。将其乘以epsilon> 0,然后将epsilon设为零。结果将取决于C,因此,当向量之一为零时,该函数将不连续。