协同过滤推荐

推荐系统中的个性化推荐一定要有用户模型或用户记录。需要获取用户信息,有两种获取途径显式获取和隐式获取。

协同过滤(CF,Collaborative Filtering)

协同过滤推荐方法的主要思想是,利用已有用户群过去的行为或意见预测当前用户最可能喜欢哪些东西或对哪些东西感兴趣。

输入数据只有用户-物品评分矩阵,输出数据有1)当前用户对物品喜欢或不喜欢程度的预测数值2)n项推荐物品的列表top-n。

协同过滤的常见问题:

  • 如何发现与我们要推荐的用户有着相似偏好的用户?
  • 如何衡量相似度
  • 如何处理还没有购买经历的新用户?
  • 如果只有很少的评分该怎么办

纯粹的协同过滤方法不会利用或要求任何有关物品本身的知识。

基于用户的最近邻推荐

给定一个评分数据集和当前用户的ID作为输入,找出与当前用户过去有相似偏好的其他用户,这些用户有时也被称为对等用户或最近邻;然后对当前用户没有见过的每个产品p,利用其近邻对p的评分计算预测值。这种方法的潜在假设是1)如果用户过去有相似的偏好,那么他们未来也会有相似的偏好。2)用户偏好不会随时间而变化。

用户集(U={u_{1},...,u_{n}})和物品集(P={p_{1},...,p_{m}})可以组成一个评分矩阵(R_{n×m})矩阵。(r_{ij})表示用户i为物品j的评分。

相似用户系数

推荐系统中通用的方法是Pearson相关系数。给定评分标准R,用户a和b的相似度sim(a,b)可以用以下公式来表示。符号(overline r_{a})代表用户a的平均评分。

[sim(a,b) = frac {sum_{p in P}(r_{a,p}- overline r_{a})(r_{b,p}- overline r_{b})}{sqrt {sum_{p in P}(r_{a,p}- overline r_{a})^2} sqrt {sum_{p in P}((r_{b,p}- overline r_{b})^2}} ]

Pearson相关系数从+1正相关到-1负相关。选择相关系数最高的用户,可以解释为两个用户最相似。追求其线性相关性。

下面公式考虑最相似的N个近邻与用户a的平均评分(overline r_{a})的偏差,计算用户a对物品p的预测值:(最相似N与总用户数有一个自适应调整过程)

[pred(a,p)= {overline r_{a}}+ frac {sum_{b in N}sim(a,b)*(r_{b,p}-overline r_{b})}{sum_{b in N}sim(a,b)} ]

也可以用余弦相似度、Spearman秩相关系数或均方差等其他方法来计算用户间的接近程度。对于基于用户的推荐系统,Pearson相关系数比其他方法更好。基于物品的推荐技术,余弦相似度方法比Pearson相关度量更好。

基于近邻评分的预测方法在遇到当前用户只为非常少的共同物品评分时会出错,导致不准的预测。(冷启动问题)当评分数据集很小时,很难找到多个有共同评分物品的用户。通过赋权因子修改,来提高预测准确率,提升很明显,但还存在问题。

文献研究

Herlocker et al.(1999)通过方差权重因子调整了物品权重。应该注重用户有争议的物品,对于热门物品要降低权重,达到个性化推荐。Herlocker et al.1999通过重要性赋权,另一种复权因子,解决了用户对很少物品评分的问题。Breese et al.1998通过调整预测权重,调高前面正相关的用户,降低后面相关性不强的用户。

基于物品的最近推荐

基于用户的最近邻推荐很难做到实时计算预测值。而基于物品的推荐,适合线下预处理,做到实时计算推荐。

主要思想是利用物品间相似度,而不是用户间相似度来计算预测值。前面用Pearson系数表示用户相似度,这里用余弦相似度测算物品相似度。

两个物品a,b用对应的评分向量(vec a,vec b)来表示,相似度公式如下:

[sim(vec a,vec b) = frac {vec a cdot vec b} {|vec a|*|vec b|} ]

相似度结余0和1之间,越接近1越相似。基本的余弦方法不会考虑用户评分的平均值差异,改进版的能够解决这个问题。在评分中减去平均值。

评分

显式和隐式

显式评分时用户主动为物品评分,用户很可能由于看不到好处二不愿意提供。较难获得。

隐式评分,比如讲用户购买行为、较长时间的浏览行为当做正向评分。

某些领域,隐式反馈比显式评分更能得到精确的用户模型。

数据稀疏和冷启动问题

评分矩阵的疏密程度是选择对应推荐算法或者处理方法的关键。在实际的应用过程中,由于很多用户在生活中只会对少部分商品进行浏览、购买或者评价,对于大部分的商品都会视而不见、置之不理,因此这样就会导致最终形成的评分矩阵过于稀疏。在设计推荐系统的时候,就会面临一个挑战:使用相对较少或者根本不够的有效评分数据来完成一个相对比较准确的预测。

面对这种评分矩阵过于稀疏的问题,最直接的办法就是利用用户或者物品的额外属性数据,对这些数据进行分类和整合操作,来求解相对应的相似用户或者物品列表。

通常情况,评分矩阵都很稀疏。可以利用性别、年龄等场外信息对用户做一个过滤,得到较不稀疏的评分矩阵。

Breese et al.1998缺省投票描述另一种用来处理稀疏评分数据的技术。给那些只有一两个用户评分的物品赋予缺省值,减少个别巧合因素对相似度的影响。

在推荐系统详解里已经有了相对应的解决办法,也就是完成一个非个性化推荐。大部分都是使用热销物品或者榜单数据来完成推送,或者在首页弹出窗口来询问用户的喜好和兴趣,根据用户点击的模块来完成推荐。

改进方法

矩阵因子分解SVD

利用用户和物品的额外特征属性对数据分类整合,SVD矩阵因子分解。很多用户很少对物品进行评分或者没有评分,但是他们的确又有相同的兴趣爱好,这样就会导致推荐算法的覆盖范围受到限制和影响。为解决这一问题,引出了SVD矩阵因子分解推荐算法,它是根据已有用户对物品的评分情况,分析出评分的用户对各个物品的因子喜好程度,以及各个物品对于这些因子的包含程度,最后再反过来根据最终的分析结果预测评分。

矩阵因子分解对提高推荐系统的预测准确性有帮助。推荐系统使用矩阵因子分解从评分模式抽取一组潜在的因子,通过这些因子向量描述用户和物品。

Sarwar et al.2000;Goldberg et al.2001;Canny 2002在推荐系统中引入SVD奇异值分解和主成分分析等矩阵因子分解。

SVD算法

将给定的评分矩阵R分解为三个矩阵(USV^T)的乘积。其中UV分别为左右奇异向量。即用户和物品的因子矩阵,对角线上的值称为奇异值。

SVD求解过程

缺陷:

  • 很难实时计算
  • 计算复杂度高

FunkSVD算法用于推荐

参考博客

关联规则挖掘

可以把关联规则挖掘加入协同推荐。规则挖掘算法Apriori,其目标是自动发现这样的规则,并计算这些规则的质量。衡量标准是支持度和可信度。

研究小结

许多研究者将他们的测试结果与来自Breese et al.1998的结论做比较,公布更准确的结果。鉴于过去十年里提出的几十种不同技术,我们迫切需要更新的对比基准。不太清楚最近几年,协同过滤算法的对比基准是哪个?需要阅读最新相关文献的实验来判断。

Empirical Analysis of Predictive Algorithms for Collaborative Filtering.

优秀综述性论文:

  • Collaborative Filtering Recommender Systems.
原文地址:https://www.cnblogs.com/chenshaowei/p/13391170.html