协同过滤推荐
协同过滤算法用于给用户推荐物品(商品、音乐、新闻等等),主要分为基于用户的推荐和基于物品的推荐。
推荐算法涉及到两个业务对象:用户和物品。我们需要弄清楚推荐的目的:推荐是为了给用户推荐他想要的物品,为了描述用户,我们需要获取用户画像,比如用户的年龄、性别、职业、收入、偏好等等,同时为了描述物品,需要对物品进行描述。
1. 基于用户的推荐
- 首先统计每个用户所关联的物品,得到用户和他关注的物品之间的关系,用户对商品的收藏、点赞、评论、浏览等。比如用户1关联了商品1、2、5,那么用户1和商品1、2、5的系数可以直接用1来表示或者用用户和商品之间的相关程度(收藏为最大5,浏览为最小2),所以用户1至6可以用商品向量来表示:
item1 | item2 | item3 | item4 | item5 | item6 | |
user1 | 4 | 3 | 5 | |||
user2 | 5 | 4 | 4 | |||
user3 | 4 | 5 | 3 | 4 | ||
user4 | 3 | 5 | ||||
user5 | 4 | |||||
user6 | 2 | 4 | 5 |
- 然后计算用户在物品上的相似度,直接用物品向量来计算,计算方法采用余弦距离:
A,B分别表示两个用户在物品维度的向量
- 这样我们就能得到所有用户间的相关系数。如果要给用户1推荐商品,我们取和用户1最相似的K个用户所关联的商品,去除用户1关联的,剩余的就是推荐商品。
user1 | user2 | user3 | user4 | user5 | user6 | |
user1 | 1 | 0.27 | 0.79 | 0.32 | 0.98 | 0 |
user2 | 0.27 | 1 | 0 | 0 | 0.34 | 0.65 |
user3 | 0.79 | 0 | 1 | 0.69 | 0.71 | 0.18 |
user4 | 0.32 | 0 | 0.69 | 1 | 0.32 | 0.49 |
user5 | 0.98 | 0.34 | 0.71 | 0.32 | 1 | 0 |
user6 | 0 | 0.65 | 0.18 | 0.49 | 0 | 1 |
2. 基于物品的推荐
基于物品的推荐算法流程和基于用户的类似,不同的地方在于,操作的对象变为了物品,我们用每个物品所关联的用户来描述这个物品,然后依次计算物品之间的相似度。当我们需要为某个用户推荐时,可以找到和用户关联物品K个最相似的物品进行推荐。
3. 协同过滤缺点
-
依赖于用户评分(用户和物品之间的关联)或者说是冷启动问题:算法有效的前提是物品和用户之间存在某种关联,但是对于一些新的用户和物品,他们和现有的用户、商品之间并没有任何关联,这时候算法对于这些用户和物品无法做推荐;
-
在生命周期短的系统中,由于物品存在时间短(比如说广告、新闻),用户和物品之间的关联十分少,导致最后的相似度矩阵稀疏,不利于推荐。