余弦相似度
问题内容:
我计算了两个文档的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通常具有稀疏表示,您只需要存储非零条目,就可以更快地计算范数和点。