基于协同过滤的推荐算法(用户协同、物品协同、模型协同)
基于协同过滤的推荐算法(用户协同、物品协同、模型协同)
基于协同过滤的推荐算法
协同过滤是一种常用的推荐算法,主要分为基于用户的协同过滤、基于物品的协同过滤和基于模型的协同过滤三种类型。
1. 基于用户的协同过滤推荐
基于用户的协同过滤推荐的基本原理是,根据所有用户对物品或者信息的偏好,发现与当前用户口味和偏好相似的“邻居”用户群。基于邻居的历史偏好信息,为当前用户进行推荐。
即:归类相似用户ABC,推荐用户BC的物品给用户A
2. 基于项目(物品)的协同过滤推荐
基于项目的协同过滤推荐的基本原理是,使用所有用户对物品或者信息的偏好,发现物品和物品之间的相似度,然后根据用户的历史偏好信息,将类似的物品推荐给用户。
即:归类相似物品ABC,推荐物品BC给购买了物品A的用户
详细区别见下表:
特征 | 基于用户的协同过滤 | 基于物品的协同过滤 |
---|---|---|
主要关注点 | 用户相似性 | 物品相似性 |
推荐解释 | “某某和你有相似兴趣的人也看了这本书” | “这本书和你以前看的某本书相似” |
适用场景 | 社交性强的网站 | 任意场景 |
3. 基于模型的协同过滤推荐
基于模型的协同过滤推荐就是基于样本的用户喜好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测,计算推荐。
优点:
- 不需要对物品或者用户进行严格的建模。
- 推荐是开放的,可以共用他人的经验。
缺点:
- 用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。
- 方法更新迭代慢。
实现步骤
1. 用户协同过滤和物品协同过滤的实现方法
1)收集用户偏好
将不同的行为进行分组:
- 用户行为:查看、推荐、购买、借还、收藏等
- 物品行为:被查看、被推荐、被购买等
然后基于不同的行为,计算不同的用户 / 物品相似度。类似于
“查看了这本图书的人还查看了A …”
“没有搜到此书,但为您推荐类似图书B”
“和你同一专业的人都在看这些书”
加权操作:
根据不同行为反映用户喜好的程度将它们进行加权,得到用户对于物品的总体喜好。一般来说,显式的用户反馈比隐式的权值大,但比较稀疏,毕竟进行显示反馈的用户是少数;同时相对于“查看”,“购买”行为反映用户喜好的程度更大,但这也因应用而异。
收集了用户行为数据之后需要对数据进行预处理,主要就是减噪和归一化。
减噪:
用户行为数据是用户在使用应用过程中产生的,它可能存在大量的噪音和用户的误操作,可以通过一些算法过滤掉行为数据中的噪音。
归一化:
将各个行为的数据统一在一个相同的取值范围中。最简单的归一化处理,就是将各类数据除以此类中的最大值,以保证归一化后的数据取值在 [0,1] 范围中。
进行的预处理后,根据不同应用的行为分析方法,可以选择分组或者加权重处理,之后可以得到一个用户偏好的二维矩阵,一维是用户列表,另一维是物品列表,值是用户对物品的偏好,一般是 [0,1]或者[-1, 1]的浮点数值。
最后形成如下的 用户偏好表 或者 物品偏好表
2)计算用户或物品的相似度
采用余弦相似度算法比较相似性(余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上)。
计算形成如下相似度表
相似度权值归一化在[0,-1]或者[-1,1]之间
3)推荐
相似度矩阵 x 偏好矩阵 = 推荐列表
ps:矩阵相乘前需要先将缺失值补充为所有权值的平均值,否则相乘后的推荐矩阵会倾向于评价人数多的物品,而不是评价结果高的物品。如果不想对权值进行补充,可以单独计算不使用矩阵相乘的方法。
根据上面的相似度表查询出相似用户或相似物品 结合不同场景进行推荐