余弦相似性python问题

时间:2014-09-24 23:11:44

标签: python information-retrieval cosine-similarity dot-product

您好我正在尝试计算我的查询与我在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] 

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

1 个答案:

答案 0 :(得分:0)

1)volumes from不能大于1.

-1 <= cos_sim <= 1

2)由于浮点数据类型,您得到的结果大于1。

  

浮点数在计算机硬件中表示为基数2   (二元)分数。

     

在运行Python的典型机器上,有53位精度   可用于Python浮动

如果Python要打印存储为0.1的二进制近似值的真实十进制值,则必须显示

>>> 0.1
0.1000000000000000055511151231257827021181583404541015625

浏览Cosine similarity链接以了解有关python中浮点数的更多信息。