博客说明:
博客内容用于学习与分享,有问题欢迎大家讨论留言。
关于作者:
程序员:杨洪(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