参考:https://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy2/
http://blog.fens.me/mahout-recommendation-api/
一、基本原理
基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图 3 给出了一个例子,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。
图 3.基于物品的 CF 的基本原理
![图 3 基于物品的 CF 的基本原理](https://i-blog.csdnimg.cn/blog_migrate/0b00e0630f7b034454bf8f82765f3b89.png)
基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。
从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。
上图给出了一个例子,对于物品A,根据所有用户的历史偏好,喜欢物品A 的用户都喜欢物品C,得出物品A 和物品C 比较相似,而用户C 喜欢物品A,那么可以推断出用户C 可能也喜欢物品C。
二、算法实现
首先计算物品之间的相似度,然后根据物品的相似度和用户的历史行为给用户生成推荐列表
步骤
1. 建立物品的同现矩阵
2. 建立用户对物品的评分矩阵
3. 矩阵计算推荐结果
拿Mahout In Action中的案例说明
测试数据:
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
数据说明:用户ID,物品ID,评分
转化为矩阵:
步骤1:建立物品的同现矩阵
按用户分组,找到每个用户所选的物品,单独出现计数及两两一组计数。即统计任一两个物品同时被评分的人的个数,首行首列和对角线值相同代表物品单独出现的次数,例如对于101商品1、2、3、4、5用户都有评分即其本身出现了5次所有(101,101)为5,(101,102)代表同时对101和102评分的用户个数即1、2、5号用户共三个人所以(101,102)为3.
步骤2:建立用户对物品的评分矩阵
对于3号这个用户就是标黄了的
步骤3:矩阵计算推荐结果 其中对3号用户的计算为同现矩阵与3号用户对物品的评分矩阵相乘
对于3用户推荐其没有评分的的102、103、106中的103,103的26.5值最高,和计算结果一致
1 [104:1.280239,106:1.1462644,105:1.0653841,107:0.33333334]
2 [106:1.560478,105:1.4795978,107:0.69935876]
3 [103:1.2475469,106:1.1944525,102:1.1462644]
4 [102:1.6462644,105:1.5277859,107:0.69935876]
5 [107:1.1993587]