推荐系统:寻找相近用户——欧几里德距离评价

所谓欧几里德距离,通俗的来讲就是两个物体之间各个维度的差的平方和,然后再开方。这样,我们可以通过两个用户对若干本书的评价分数,我们可以求得两个用户的相近程度。具体算法思路是,先求得两个用户都评价的书籍,然后求同一本书的评分差的平方,并把各差的平方相加,其实可以同时完成,即在求共同评价的书籍的时候就可以求差的平方和。为了比较容易衡量,也是为了和其他评价标准相同,我们规定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

你可能感兴趣的:(推荐系统:寻找相近用户——欧几里德距离评价)