推荐算法综述2--协同过滤CF

来源:互联网 发布:淘宝特卖商城 编辑:程序博客网 时间:2024/06/05 06:32

2.协同过滤

上一节我们主要讨论了典型的推荐算法优缺点,这一节我们详细阐述一下协同过滤算法,通过讨论他们的优缺点得到一个更加深刻的认识。
Collaborative filtering (CF)算法试图找到一种通过用户行为为其提供一种具体建议的模型。他依据用户的行为数据,比如用户对读过书本的评分来判断他们对这本书的喜爱程度,关键问题在于如果有两个用户对其他物品有相似的评分那么其中一个用户对未评分的商品评分跟另一个用户应该是相近的,值得注意的是,这并没有涉及到商品的其他信息(如,商品描述),也没涉及到用户的其他信息(如,兴趣、人口统计数据)。协同过滤可以分为两类:基于邻域(内存)和基于模型的协同过滤,用户-商品评分对直接用于预测新商品的评分。
基于邻域的协同过滤又分为:基于用户的协同过滤(user-based CF)和基于物品的协同过滤(item-based CF)。

  • User-based CF 推荐自己没有而有相同购买习惯用户有的商品
  • Item-based CF 推荐有被相似购买经历的物品,买商品X的同时购买Y

2.1 User-based CF

我们先来看看基于用户的协同过滤,然后再看基于商品的协同过滤。
如图1,矩阵是用户对商品的一个评级列表,横轴是商品(书本),纵轴是用户,对应的值是用户对商品的评级,最高5分,最低1分,评级越高说明用户对该商品越喜爱,空则代表用户没有对商品进行评级。
这里写图片描述
图1
在user-based CF算法的第一个工作就是计算每个用户与其他用户在商品评分上的相似性,或者说是兴趣的相似性。我们先来讨论第一个用户。每个用户都可以用一个向量表示,比如第一个用户的向量表示为(4,3,0,0,5,0),由此很容易计算各用户之间的相似度(这里使用余弦近似),由下面的计算结果可以看出,第一个用户和前两个用户的相似度高而和最后一个用户完全不相似。
这里写图片描述
以此类推,我们可以计算每个用户与其他用户的相似度,得到下面的对称矩阵,红色越深代表越相似。
这里写图片描述
现在就可以用user-based CF算法给第一个用户推荐商品了,首先找到最相似的前n个用户(这里取n=2),去掉与目标用户有相同购买记录的商品;然后计算商品的加权评分。下图是计算的过程与结果,可以看到第一个用户推荐的商品应该是书本3(4.5’)和书本4(3’)。
这里写图片描述
目前为止,我们使用user-based CF给第一个用户做了推荐,并且效果看起来是那么合理。下面我们继续使用图1这个评分表介绍item-based CF算法。

2.2 Item-based CF

与User-based CF 相似,Item-based CF算法计算商品之间的相似度,每个商品同样也可以用向量表示,计算第一个商品与其他商品的相似度如下图所示
这里写图片描述
相似度矩阵如下图所示,同样也是对称矩阵,红色越深则越相似。
这里写图片描述
同样的,我们计算第一个用户的推荐商品,第一个用户购买商品的近似商品的加权评分,最终得到推荐商品为书本3(4.5’)和书本6(3’)。
这里写图片描述

可以看到,user-based CF和item-based CF是很类似的,但是他们的结果却不同,即使是他们的原始数据一样。在实际使用时需要考虑到这个问题。

2.3 Model-based CF

由于基于邻域(user,item)的方法简单性和有效性,他们能够产生准确的个性化的推荐,而这个推荐往往是比较流行的产品。同时,还受到规模的限制,因为需要计算用户之间或商品之间的相似度,最差的情况时间复杂度为O(m*n),一般情况下为O(m+n).在大规模数据下,用户的评分是个稀疏的,只有很少比例的用户或者商品有评分.比如,在Mendeley中,有百万级文章而用户可能只读过其中的几百篇.假设两个用户每人读100篇文章那么也只有0.0002的占比.
基于模型的协同过滤算法能一定程度上克服基于领域方法的限制,与基于领域的方法直接使用user-item评分来预测新的item的评分不同的是基于模型的方法利用评分学习出一个有效的模型,利用机器学习的方法对user-item交互关系进行学习得到一个模型,一般来说,基于模型的协同过滤方法是一种比较好的建立协同过滤的推荐系统方法。有很多机器学习方法可以用于建立模型,比如,贝叶斯网、聚类、分类、回归、矩阵分解、受限玻尔兹曼机等,有些方法在获得Netflix Prize的解决方案中用到过。
矩阵分解Matrix factorisation,如singular value decomposition(SVD), SVD++,将商品和用户分解到可以表示user-item隐性关系的空间中,矩阵因子的背后就是隐性特征如何去表示用户对商品的评分,这样我们就可以估计用户没有评分商品的评分。
这里写图片描述

2.4 总结

协同过滤算法只需要用户数据以及很小的工程量就能得到不错的结果,当然也有限制。比如,CF趋向于推荐比较流行的商品,很少会考虑到冷门的商品(那些被评级极少的商品),这个问题可以通过基于内容的推荐来解决;另一个重要的问题就是“冷启动问题”,比如新用户问题(关于用户的数据较少甚至没有,可以通过流行度popularity与混合方法hybrid approaches解决),新商品问题(关于商品的数据较少甚至没有,可以通过基于内容的推荐和multi-armed bandits (i.e. explore-exploit)解决)。

0 0
原创粉丝点击