2

您好我想要计算我的查询和我的信息检索程序在Python中返回的文档之间的余弦相似度。余弦相似度python问题

余弦相似度我使用这个实现:

import math 
def cosine_similarity(v1,v2): 

    sumxx, sumxy, sumyy = 0, 0, 0 
    for i in range(len(v1)): 
     x = v1[i]; y = v2[i] 
     sumxx += x*x 
     sumyy += y*y 
     sumxy += x*y 
    return sumxy/math.sqrt(sumxx*sumyy) 

,我发现这个网站上的这一解决方案,但我有一些问题。 我TF * IDF权重和每个文档的向量,这是一个文档向量 的一个例子,查询向量:

D: [0.028239449664633154, 0.05559373180364792, 0.02798439181455718] 
Q: [0.3746433655507998, 0.526816791853616, 0.618765996788542] 

好,所以问题是,有时磨i执行余弦相似性,所述结果大于1,这怎么可能?余弦不能大于1?我的推理是否正确? 在这种情况下做余弦相似性是否正确? 请帮帮我,谢谢

+0

什么输入给你一个大于1的结果? – jwodder 2014-09-24 23:15:07

+0

d:0.009063952392358061,0.01055107112621112] 问:[0.5619650483261998,0.6541664098250894] – 2014-09-24 23:24:23

+0

butit给我1.0000000000000002的结果,并有较高的权重是得到一个劣质的相似性文件 – 2014-09-24 23:28:38

回答

0

1)Cosine similarity不能大于1

-1 <= cos_sim <= 1 

2)你所得到的结果大于1,可能是因为浮点数据类型。

浮点数在计算机硬件中以基数2 (二进制)分数表示。

在运行的Python典型的机器,有精度 53个比特可用于一个Python浮子

如果Python的是打印保存为0.1的二进制近似的真实十进制值,它必须display

>>> 0.1 
0.1000000000000000055511151231257827021181583404541015625 

请通过this链接了解更多关于python中的浮点数的信息。