您的当前位置:首页正文

推荐算法—CB和CF

2020-12-29 来源:好走旅游网
推荐算法—CB和CF

⼀、基于内容的推荐(CB,Content-based Recommendations)

基于内容的推荐CB应该算是最早被使⽤的推荐⽅法,它根据⽤户过去喜欢的产品(本⽂统称为 item),为⽤户推荐和他过去喜欢的产品相似的产品。如,⼀个推荐饭店的系统可以依据某个⽤户之前喜欢很多的烤⾁店⽽为他推荐烤⾁店。 CB最早主要应⽤在信息检索系统当中,所以很多信息检索及信息过滤⾥的⽅法都能⽤于CB中。   CB的过程⼀般包括以下三步:

(1)Item Representation:为每个item抽取出⼀些特征(也就是item的content了)来表⽰此item;

(2)Profile Learning:利⽤⼀个⽤户过去喜欢(及不喜欢)的item的特征数据,来学习出此⽤户的喜好特征(profile);

(3)Recommendation Generation:通过⽐较上⼀步得到的⽤户profile与候选item的特征,为此⽤户推荐⼀组相关性最⼤的item。 ⼆、基于协同过滤推荐(CF,Collaborative Filtering Recommendations )  常见的协同过滤推荐可以分为三类:(基于⽤户、基于物品、基于模型)  1.基于⽤户的协同过滤(User CF,User based Collaborative Filtering)

  基于⽤户的协同过滤推荐算法先使⽤统计技术寻找与⽬标⽤户有相同喜好的“邻居”,然后根据⽬标⽤户的邻居的⾏为,向⽬标⽤户进⾏推荐。基本原理就是利⽤⽤户访问⾏为的相似性来互相推荐⽤户可能感兴趣的资源。在⼀般应⽤中采⽤计算“k近邻”,然后基于这K个邻居的历史偏好信息,为当前⽤户进⾏推荐。

  ⼀般UserCF和ItemCF都是⽤上⾯的描述,其实真正实现的时候上⾯的描述只是第⼀步。真正实现的时候⼀般还是将问题分解为三步:  (1)计算⽤户之间的相似度;

  (2)根据⽤户的相似度和⽤户的历史⾏为填补User-Item评分矩阵;  (3)根据评分矩阵进⾏推荐(选⾼分)。

  具体的例⼦可以看ItemCF,UserCF只是换了表⽰的意义,⽐如下⾯公式(1)中N(i)和N(j)就变成了与⽤户i,j交互过的物品数量。  相似度计算使⽤Jaccard公式或pearson相似度以及余弦相似度、欧式距离。  2.基于物品的协同过滤(Item CF,Item based Collaborative Filtering)  算法核⼼思想:给⽤户推荐那些和他们之前喜欢的物品相似的物品。

  这⾥看起来是不是和基于内容的推荐的核⼼思想很相像?(ItemCF和CB的区别?)

  确实很像,但是也是有很⼤差别的。⽐如,⽤户A之前买过《数据挖掘导论》,该算法会根据此⾏为给你推荐《机器学习》。但是

ItemCF算法并不利⽤物品的内容属性计算物品之间的相似度,它主要通过分析⽤户的⾏为记录计算物品之间的相似度,然后根据相似度和⽤户打分结合,算出⽤户可能会对⼀些未接触过的物品给出的打分,进⽽进⾏推荐。⽽CB则是利⽤物品的内容属性计算物品之间的相似度,然后根据训练得到的⽤户的profile,找最相似的进⾏推荐。  基于物品的协同过滤算法主要分为三步:  (1)计算物品之间的相似度;

  (2)根据物品的相似度和⽤户的历史⾏为填补User-Item评分矩阵;  (3)根据评分矩阵进⾏推荐(选⾼分)。  具体如下:    (1)

  ⾸先使⽤公式(1)计算物品之间的相似度。其中,|N(i)|是喜欢物品i的⽤户数,|N(j)|是喜欢物品j的⽤户数,|N(i)∩N(j)|是同时喜欢物品i和物品j的⽤户数。当物品ab完全⼀致(是同⼀个物品)时,那么N(a)和N(b)应该完全相等,那么wij就为1。即w越接近1,ab越相似。w为0时,说明从⽤户物品交互⾓度来看,ab不相似。

  如图表⽰ ⽤户A对abd三个物品感兴趣,以此类推。  那么物品a和b的相似度即为:

  之后使⽤公式(2)预测⽤户对与他没有交互的物品的评分:  (2)

  其中puj表⽰⽤户u对物品j的兴趣(可能的打分),rui则表⽰⽤户u对物品i已有的打分(explicit feedback中为打分,⽐如0-5分,implicitfeedback中为有交互1,⽆交互0)。i可取⾃全集,也可挑选和j⽐较相似的⼏个物品(设⽴相似度阈值进⾏判断)。  下⾯是⼀个书中的例⼦,帮助理解ItemCF过程:

  不⽌ItemCF,其实UserCF,CB的第⼆步,计算带推荐物品的分数(填补User-Item矩阵)的⽅法都是如图的⽅法。  3.基于模型的协同过滤

  ItemCF和UserCF可以被归为基于记忆的模型,即依赖简单的相似性度量(⽐如余弦相似性、⽪尔森相关系数等)来把相似的⽤户或物品匹配起来。如果有⼀个矩阵,那么其中每⼀⾏是⼀个⽤户,每⼀列代表⼀个物品,那么基于记忆的⽅法就是对这⼀矩阵的⾏或列使⽤相似性度量来获得⼀个相似度值,进⽽推荐。

  ⽽与基于记忆的CF相对的,是基于模型的协同过滤。

  基于模型的协同过滤作为⽬前最主流的协同过滤类型,其相关算法可以写⼀本书了,当然我们这⾥主要是对其思想做有⼀个归类概括。我们的问题是这样的m个物品,m个⽤户的数据,只有部分⽤户和部分数据之间是有评分数据的,其它部分评分是空⽩,此时我们要⽤已有的部分稀疏数据来预测那些空⽩的物品和数据之间的评分关系,找到最⾼评分的物品推荐给⽤户。

  对于这个问题,⽤机器学习的思想来建模解决,主流的⽅法可以分为:⽤关联算法,聚类算法,分类算法,回归算法,矩阵分解,神经⽹络,图模型以及隐语义模型等来解决,我们就不具体展开了。

  基于模型的协同过滤和基于记忆的协同过滤思想是⼀致的,都是想办法对缺失的UI(user-item)矩阵进⾏填补,进⽽进⾏推荐。

  基于记忆的CF利⽤简单的相似性度量,以及线性加权组合进⾏填补。⽽基于模型的CF则利⽤各种更复杂的模型或⽅法,对UI矩阵进⾏填补,⽐如矩阵分解、隐向量的思想(隐语义模型)、SVD、SVD++等。  我们平常时常接触的隐语义模型、矩阵分解,都是基于模型的协同过滤算法。

因篇幅问题不能全部显示,请点此查看更多更全内容