一、基本原理
基于物品的 CF 的原理和基于用户的 CF 类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。图 3 给出了一个例子,对于物品 A,根据所有用户的历史偏好,喜欢物品 A 的用户都喜欢物品 C,得出物品 A 和物品 C 比较相似,而用户 C 喜欢物品 A,那么可以推断出用户 C 可能也喜欢物品 C。
图 3.基于物品的 CF 的基本原理
二、算法实现
首先计算物品之间的相似度,然后根据物品的相似度和用户的历史行为给用户生成推荐列表
步骤
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
针对这样一个原始数据,我们采取以下处理方式,按步骤获取用户3的推荐列表:
第一,我们整理出物品评分矩阵,这其实是原始数据。
第二,我们整理出物品同现矩阵,这是item CF的思想所在:同现高的物品,相关性高。
第三,我们整理出用户评分矩阵,这显示了用户偏好。
第四,我们使用物品的相似度,与用户当前的浏览记录进行关联,计算得到推荐列表。
这样就计算得到了用户3的物品待推荐物品及评分,我们可以根据实际情况按得分降序选择推荐物品。
从上面我们可以看出,Item CF算法对新用户是友好的,只要用户偏好矩阵不为0,即用户有历史偏好记录,就能够很快得到推荐。但对新物品不友好,因为新物品没有历史数据,难以得到推荐。这可以应用到音乐项目中,因为音乐曲库相对来说比较固定,新物品相对较少,这可以使得新用户快速获得符合自己口味的音乐。