mapreduce实现推荐系统(UserCF-基于用户的协同过滤算法)

博客说明:

博客内容用于学习与分享,有问题欢迎大家讨论留言。

关于作者:
程序员:杨洪(ellende)
blog: http://blog.csdn.net/ellende
email: yangh.personal@qq.com

转载请注明出处,引用部分网上博客,若有侵权还请作者联系与我。



用户推荐协同过滤算法(UserCF)原理说明


基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。


1.原始数据输入

1,101,5.0

1,102,3.0

1,103,2.5

2,101,2.0

2,102,2.5

2,103,5.0

2,104,2.0

3,101,2.5

3,104,4.0

3,105,4.5

3,107,5.0

4,101,5.0

4,103,3.0

4,104,4.5

4,106,4.0

5,101,4.0

5,102,3.0

5,103,2.0

5,104,4.0

5,105,3.5

5,106,4.0 


2.构成矩阵

     101 102 103 104 105 106 107

[1,] 5.0 3.0 2.5 0.0 0.0   0   0

[2,] 2.0 2.5 5.0 2.0 0.0   0   0

[3,] 2.5 0.0 0.0 4.0 4.5   0   5

[4,] 5.0 0.0 3.0 4.5 0.0   4   0

[5,] 4.0 3.0 2.0 4.0 3.5   4   0 


3.欧氏相似矩阵转换

          [,1]      [,2]      [,3]      [,4]      [,5]

[1,] 0.0000000 0.6076560 0.2857143 1.0000000 1.0000000

[2,] 0.6076560 0.0000000 0.6532633 0.5568464 0.7761999

[3,] 0.2857143 0.6532633 0.0000000 0.5634581 1.0000000

[4,] 1.0000000 0.5568464 0.5634581 0.0000000 1.0000000

[5,] 1.0000000 0.7761999 1.0000000 1.0000000 0.0000000


计算方式:

相似度=n/(1+sqrt(sum((Xi-Yi)^2)))

即需要对两个向量元素做差值并平方再求和再开方,开方后加1,最后n是有效向量差值个数。

如用户1和用户2的相似度计算:

(5.0-2.0)^2 + (3.0-2.5)^2 + (2.5-5.0)^2 = 15.5  //之所以只有3个向量元素做差值 是因为要两个向量元素都为非0值才做差值计算

3/(1+sqrt(15.5)) = 0.607656


如用户1和用户4的相似度计算:

(5.0-5.0)^2 + (2.5-3.0)^2 = 0.25

2/(1+sqrt(0.25)) = 1.333333 因大于1 取相似度为1.000000(程序里去掉了这个限制)


4.最近邻矩阵

根据欧氏相似矩阵找出用户相似度最高的前2个用户,如下所示:

     top1 top2

[1,]    4    5

[2,]    5    3

[3,]    5    2

[4,]    1    5

[5,]    1    3 


如用户1相似度排序:4[1.0],5[1.0],2[0.607],3[0.285],1[0.0]


5.以用户1为例的推荐矩阵

用户1前2个最高相似度是用户4和用户5,分别列出对应评分矩阵:

   101  102  103  104  105  106  107

1  5.0  3.0  2.5  0.0  0.0  0.0  0.0

4  5.0  0.0  3.0  4.5  0.0    4    0

5  4.0  3.0  2.0  4.0  3.5    4    0 

去掉用户1已经买过的物品,即101,102,103,剩下用户1未买过的物品进行推荐,推荐矩阵如下:

   101  102  103  104  105  106  107

4    0    0    0  4.5  0.0    4    0

5    0    0    0 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值