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,因此,当向量之一为零时,该函数将不连续。