协同过滤算法概述

主要内容:

不同算法类的简单介绍,各自的适用场景以及面临的挑战;
和其他算法的比较。

一.简介

协同过滤是最早提出,同时也是研究的最多,实际应用也最多的一种推荐技术。对于协同过滤算法的分类,主要有两种分类方式。有学者考虑算法是否基于基本概率模型,将协同过滤算法分为非概率性算法和概率性算法。还有将算法分为基于内存的协同过滤算法和基于模型的协同过滤算法。本文采用前一种来阐述。

二.非概率性算法

2.1基于用户的协同过滤算法

下面是基于用户的协同过滤算法的简单流程:
协同过滤算法概述
流程说明:
1)用户-物品评分矩阵。如果用到我们的头条中的话,那么,一个用户就用一个维度是物品的向量来表示,每维对应一个物品,0表示未点击过,1表示点击过。
2) 用户间的相似度计算。计算两个特征向量 的相似度。相似度计算方法很多,比如,余弦相似度,皮尔逊相关系数等。
3)邻居集。确定topn个最相似的用户作为最近邻。
4)预测用户对每个物品的评分。预测公式:
协同过滤算法概述
其中,userSim(u,n)为u和n的相似度。neighbors(u)为u的最近邻。rni为n对物品i的评分。
5)按评分对物品排序,取topn作为最后的推荐列表。
存在的挑战:
1)相关性倾斜。哪些评价物品交集很少,但评分基本匹配的用户更可能被选为邻居。而可能交集很大,但评分有匹配,也有少数不匹配的用户,计算的相似度可能会相对低。事实上,这些用户更应该作为邻居。
2)在热门流行的物品上达成一致,并不能判断这两个用户兴趣就相似。但相似度算法并不能区分这点。针对这一点,有学者提出过算法,这些算法在计算用户的相似度值,会考虑物品的流行度,对于判断用户的相似度,赋予流行的物品更低的权值。
3)这种算法非常耗时和耗空间。相似度计算中,候选用户是所有活跃用户,每个用户的向量的维度是物品总量;评分预测的候选帖子是所有评论过的帖子。有哪些优化办法呢?
抽样;
聚类;
这种算法容易和两种其他算法混淆:
1)基于标签(人口属性等)的最近邻推荐算法。两种算法都涉及到找最近邻,但协同过滤是基于用户表现出来的行为,而基于人口属性是基于用户固有的属性。
2)基于社交网络的推荐算法。同样是找最近邻。基于社交网络是通过实际网络上获取到的用户间的社交关系来判断用户的相似度。

2.2基于物品的协同过滤算法

基于物品的协同过滤算法与基于用户的协同过滤算法的区别是:基于物品的协同过滤算法是计算物品的相似度,进而基于最相似的物品来预测用户对物品的评分。
流程上,对比基于用户的来看,
1)用户-物品评分矩阵。和基于用户的协同过滤相同
2) 物品间的相似度计算。物品向量的每维是用户,所以维度是用户总数。
3)邻居集。确定topn个最相似的物品作为物品的最近邻。
4)预测用户对每个物品的评分。预测公式:
协同过滤算法概述
其中,itemSim(u,n)为u和n的相似度。ratedItems(u)为u评论过的物品集。rui为u对物品i的评分。
5)按评分对物品排序,取topn作为最后的推荐列表。

存在的挑战:
1)相关性倾斜;

很多人容易把基于基于物品的协同过滤和基于内容的推荐算法混淆。从上面的流程,相比能够清楚的区分了:虽然都存在计算物品间的相似度,但基于物品的协同过滤是基于行为的,而基于内容是基于物品本身的内容属性。

2.3非概率的降维算法

上面的两种算法,得到的用户物品评分存在两个明显的缺陷:1)维度可能非常大;2)数据很稀疏。针对这两个问题,有不少算法通过将物品映射到更低的“潜在维度”来降低复杂度。这种更小的“潜在”维度有效的降低了运行时性能,并且解决了数据稀疏性问题。这种技术实际上是将用户对物品的评分映射成了用户潜在的兴趣。这类型的技术通常是基于矩阵方面的操作。比较常见的有:支持向量分解;主成分分析以及因式分解等。
存在的挑战:
1)线下训练非常的复杂。尽管有证据表明,在准确性方面表现部署。

(说明一种降维算法——后续补充)

2.4关联规则挖掘

(持续补充)

三.概率性算法

一般的概率性模型如下所示:
大数据应用组 > 协同过滤算法综述 > image2017-5-26 17:1:6.png
其中为目标用户u对待预测物品i的预测分。Iu表示u已评价物品集。评分的取值范围为0到n。
概率性算法非常的多。
为了计算概率,文献[4]提出了两种概率模型:聚类模型和贝叶斯网络。文献[6]提出了一个统计模型,以及比较了估计模型参数的几种不同算法,比如k均值聚类和吉布斯采样。文献[7]提出了一个贝叶斯模型,在计算用户相似度时,假定用户能够按照评分概率分布分到不同的子类中去,进而基于子类的后验分布和相关的评分概率来预测未知评分的分布。其他的基于模型的协同过滤方法还包括概率关系模型[8], 最大熵模型[9]和线性回归模型[3]等。此外,基于模型的协同过滤还使用了信息检索和机器学习方面的其他一些技术,比如神经网络,潜在语义索引等。
下面介绍贝叶斯网络算法。
(补充。。。)

四.比较

与基于内容的推荐算法相比,
优点:
1)协同过滤算法无需用户和物品的明确属性,所以是领域独立的(任务领域都可以使用协同过滤);(电影,音乐就很难用基于内容的,因为内容分析困难)
2)因为不会仅仅考虑用户个人在内容上的历史兴趣,所以,协同过滤在推荐的多样性和新颖性上会表现的更好。
3)基于内容的推荐会推荐跟用户过去感兴趣的内容给用户,不会考虑内容的质量。协同过滤是基于一种类似的“口口相传”,只有被用户看过的内容才可能推给其他用户,并且,越是受越多用户更喜好,被推荐的概率更大,所以推荐的内容的质量更有保障。
缺点:
1)稀疏性;用户-物品行为矩阵通常都是非常稀疏的。
2)冷启动问题严重。基于内容的推荐存在用户冷启动的问题。而协同过滤不仅存在用户冷启动,还存在物品冷启动。物品冷启动对于那些经常会更新新内容的系统是个非常严重的问题。
没有绝对好的算法,也没有绝对差的算法,只有更合适的算法。协同过滤由于存在(物品)冷启动问题,所以并不适合新帖的推荐。

五.协同过滤的适用场景

从三个方面来考虑:
1.数据分布
1)有足够的物品;物品太少的话,用户自己就能去判断该选什么,无需算法支持。
2)物品应该有足够的评分(包括点击、评论等)
3)用户的评分记录要多于要推荐的物品数。
4)用户给很多物品评了分。如果一个用户仅仅评价了一个物品,那仅仅是提供了一些统计信息,对关联物品没帮助。
2、深层含义
1)群体中的用户都有和他相同需求和爱好的用户。如果用户的品味是独特的,就找不到给它分享(推荐)信息的用户。每个用户越能够找到更多的相同品味的用户,协同过滤越适用。
2)同类物品。音乐、书籍、帖子等都适合。但百货超市的商品推荐就不适合。
3、数据的持久性
1)物品的持久性。这个其实就是说,新的物品不适合用协同过滤。其实也就是物品冷启动问题。
2)品味的持久性。协同过滤适合的前提就是用户的品味是长期的。比如电影,书籍,用户喜欢那种类型的,一般持续比较长。而对于衣服,可能过几年喜欢的就不一样了。这样用户之前的行为就变的没有意义。自然协同过滤不合适。

六.实际工程实践问题

1.针对评分少的调整
1)丢弃评分太少的实例。设定一个阈值k。如果共同评分项低于k,就放弃将用户作为邻居集。这种方法简单,但会降低覆盖率。
2)对于评分太少的实例,调整计算。比如,如果评分项太少,相似度调整到接近0。困难在于要调整参数非常困难,不稳定。
3)融入先验知识。比如考虑到用户的评分可能遵循某个概率分布,那就基于这个分布生成一些人工的评分。

总结

协同过滤算法是一个整的算法族。在学术上也是发展最早,最成熟的一种技术。目前在上商业界,主要用在一些大公司。算法无好坏,只是适合性问题。协同过滤适合的推荐物品主要有:音乐,电影,书籍等。