余弦相似度


问题内容

我计算了两个文档的tf / idf值。以下是tf / idf值:

1.txt
0.0
0.5
2.txt
0.0
0.5

这些文件就像:

1.txt = > dog cat
2.txt = > cat elephant

如何使用这些值来计算余弦相似度?

我知道我应该计算点积,然后找到距离并除以点积。如何使用我的值来计算?

还有一个问题: 两个文档的字数相同是否重要?


问题答案:
            a * b
sim(a,b) =--------
           |a|*|b|

a * b是点积

一些细节:

def dot(a,b):
  n = length(a)
  sum = 0
  for i in xrange(n):
    sum += a[i] * b[i];
  return sum

def norm(a):
  n = length(a)
  for i in xrange(n):
    sum += a[i] * a[i]
  return math.sqrt(sum)

def cossim(a,b):
  return dot(a,b) / (norm(a) * norm(b))

是。在某种程度上,a和b必须具有相同的长度。但是a和b通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数和点。