定义
- UserCF:基于用户的协同过滤算法
- ItemCF:基于物品的协同过滤算法
什么是协同过滤算法
协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。
其中,基于用户和基于物品的协同过滤成为基于近邻的协同过滤,还有基于模型的协同过滤
UserCF原理
- 找到和目标用户兴趣相似的用户集合
- 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户
步骤一的关键就是计算两个用户的兴趣相似度。
这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度或者通过余弦公式:
Jaccard公式:
余弦公式:
计算u对物品i的感兴趣程序:
上述推荐算法缺陷:
如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们兴趣相似,因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文①中提出了如下公式,根据用户行为计算用户的兴趣相似度:
N(i)是对物品i有过行为的用户集合,越热门,N(i)越大
ItemCF原理
举例,用户A对物品a、b、d有过行为,用户B对物品b、c、e有过行为,等等;
依此构建用户——物品倒排表:物品a被用户A、E有过行为,等等;
建立物品相似度矩阵C:
其中,C[i][j]记录了同时喜欢物品i和物品j的用户数,这样我们就可以得到物品之间的相似度矩阵W。
计算物品相似度,一般使用余弦值:

根据物品的相似度和用户的历史行为给用户生成推荐列表;
其中,Puj表示用户u对物品j的兴趣,N(u)表示用户喜欢的物品集合(i是该用户喜欢的某一个物品),S(i,k)表示和物品i最相似的K个物品集合(j是这个集合中的某一个物品),Wji表示物品j和物品i的相似度,Rui表示用户u对物品i的兴趣(这里简化Rui都等于1)。
该公式的含义是:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
UserCF和ItemCF代码实现
请移步到本人github:https://github.com/coder-zrl/Collaborative-Filtering
UserCF和ItemCF优缺点的对比
指标 | UserCF | ItemCF |
---|---|---|
性能 | 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大 | 适用于物品数明显小于用户数的场合,如果物品很多(网页),计算物品相似度矩阵代价很大 |
领域 | 时效性较强,用户个性化兴趣不太明显的领域 | 长尾物品丰富,用户个性化需求强烈的领域 |
实时性 | 用户有新行为,不一定造成推荐结果的立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 |
冷启动 | 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的 | 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品 |
推荐 | 新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户 | 但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户 |
推荐理由 | 很难提供令用户信服的推荐解释 | 利用用户的历史行为给用户做推荐解释,可以令用户比较信服 |
UserCF和ItemCF的选择
同样是协同过滤,UserCF和ItemCF两种方式如何抉择呢?
ItemCF的应用场景:
基于物品的协同过滤(ltem-CF)推荐机制是Amazon在基于用户的机制上改良的一种策略。
因为在大部分的Web站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似
度相对比较稳定,而且物品相似度可以直接计算好
,同时基于物品的机制比基于用户的实时性更好一些,所以Item-CF成为了目前推荐策略的主流。例如:电商、视频、电影
UserCF的应用场景:
设想一下在一些新闻推荐系统中,也许物品——也就是新闻的个数可能大于用户的个数,
且新闻的更新程度也有很快,所以它的相似度依然不稳定,这时用User-CF可能效果更好。例如:新闻
基于模型的协同过滤思想
基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐。
- 用户具有一定的特征,决定着他的偏好选择;
- 物品具有一定的特征,影响着用户需是否选择它;
- 用户之所以选择某一个商品,是因为用户特征与物品特征相互匹配;
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发掘物品的潜在特征;这样的模型被称为隐语义模型(Latent Factor Model,LFM)
基于协同过滤的推荐有什么优缺点
基于协同过滤的推荐机制的优点:
- 它不需要对物品或者用户进行严格的建模,而且不要求对物品特征的描述是机器可理解的,所
以这种方法也是领域无关的 - 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏
存在的问题:
- 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题
- 推荐的效果依赖于用户历史偏好数据的多少和准确性
- 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的
问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等 - 对于一些特殊品味的用户不能给予很好的推荐