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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值