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中的浮點數的信息。