所谓欧几里德距离,通俗的来讲就是两个物体之间各个维度的差的平方和,然后再开方。这样,我们可以通过两个用户对若干本书的评价分数,我们可以求得两个用户的相近程度。具体算法思路是,先求得两个用户都评价的书籍,然后求同一本书的评分差的平方,并把各差的平方相加,其实可以同时完成,即在求共同评价的书籍的时候就可以求差的平方和。为了比较容易衡量,也是为了和其他评价标准相同,我们规定0代表两用户无共同爱好,1代表完全相同。实现详见代码
from math import sqrt
def sim_distance(prefs,person1,person2):
si={}
for item in prefs[person1]:
if item in prefs[person2]:
si[item]=1;
if len(si)==0:
return 0
sum_of_squares=sum([pow(prefs[person1][item]-prefs[person2][item],2)
for item in si])
#print 1/(1+sqrt(sum_of_squares))
return 1/(1+sqrt(sum_of_squares))
参考文献:Programming Collective Intelligence by Toby Segaran. Copyright 2007 Toby Segaran,978-0-596-52932-1
本文介绍了如何使用欧几里德距离来衡量两个用户之间的相似度。通过计算两个用户对共同评价过的书籍评分的差值平方和并开方,得到一个能够反映用户兴趣相似性的数值。数值越接近1表示用户兴趣越相似。
4383

被折叠的 条评论
为什么被折叠?



