Seb*_*idz 6 cluster-analysis machine-learning 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
Run Code Online (Sandbox Code Playgroud)
我想在群集应用程序中使用此相似性度量.我经常需要比较这些载体.也是[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])=?等等
Ano*_*sse 15
如果你有0个向量,余弦是你的应用程序的错误相似性函数.
余弦距离基本上等于L_2归一化数据上的欧几里德距离的平方.即,您将每个向量标准化为单位长度1,然后计算平方欧几里德距离.
余弦的另一个好处是性能 - 在非常稀疏的高维数据上计算它比欧几里德距离更快.它受益于广场的稀疏性,而不仅仅是线性的.
虽然你显然可以尝试将相似性破解为0,当一个为零时,并且当它们相同时最大值,它将无法真正解决潜在的问题.
不要通过您可以轻松计算的距离来选择距离.
而是选择距离,使结果对您的数据有意义.如果值未定义,则没有意义......
有时,无论如何,它可能会将常数0数据丢弃为无意义的数据(例如,分析Twitter噪音,并且看到所有数字,没有单词的推文).有时却没有.