当一个向量全为零时,余弦相似性

时间:2014-11-02 13:13:26

标签: machine-learning cluster-analysis data-mining cosine-similarity

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

当其中一个向量全为零时?

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

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

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

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]对[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])=?等

2 个答案:

答案 0 :(得分:14)

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

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

余弦的另一个好处是性能 - 计算它非常稀疏,高维数据比欧几里德距离更快。它受益于广场的稀疏性,而不仅仅是线性的。

虽然你明显可以尝试将相似性破解为0,当一个为零时,并且当它们相同时最大化,它将无法真正解决底层问题。

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

相反,选择距离使得结果对数据具有含义。如果值未定义,则没有意义......

有时,无论如何,将常数0数据作为无意义的数据丢弃可能会有效(例如,分析Twitter噪音,并且看到所有数字,没有单词的推文)。有时它没有。

答案 1 :(得分:2)

未定义。

认为你有一个向量C,它的零向量不是零。乘以epsilon> 0并让epsilon运行为零。结果将取决于C,因此当其中一个向量为零时,函数不连续。