基于用户的协同过滤算法
概念
首先用一个词就能很好的解释什么叫做基于用户的协同过滤算法:【臭味相投】。虽然是贬义词,但也说明了,具有类似特征的人群,他们喜欢的东西很多也是一样的。因此,在推荐系统中,假设要为A用户推荐物品,可以通过寻找他的“邻居”——与A具有相似兴趣的用户。把那些用户喜欢的,而A用户却不曾听说的东西推荐给A。
相似度算法
那么问题来了,我们如何判断A用户与哪些用户相似呢?关键就是根据用户过去的行为轨迹,计算用户相似度。
目前较多的相似度算法有:
计算用户与用户的相似度
Jaccard公式为我们提供了简单地计算两用户兴趣相似度的方法:
【N(u)表示用户u感兴趣的物品集合,N(v)表示用户v感兴趣的物品集合】
为了照顾某些数学全忘光了的同学,解释一下这个公式,分母是两个集合的绝对值相乘,分子是集合的交集的绝对值,集合绝对值是这个集合中元素的个数。假设A用户喜欢{a,b,d},B用户喜欢{a,c},则他俩相似度计算如下:
倒排法
但是这么简单粗暴是有问题的,因为很多用户其实完全没有共同喜好的,也就是分子会为0。这么多无意义的计算会给我们增加很大的开销,所以我们应该先做一个预处理,把有关联的用户筛选出来,只计算这些有关联的用户的兴趣相似度。倒排法有效的为我们解决了这个问题:
- 首先将用户--物品表转化为物品--用户表(倒排表)
- 根据倒排表画出相似度矩阵(比如倒排表第一行说明AB BC AC有关联,就在矩阵中置1,第二行说明AC有关联,又加1变为了2)
矩阵中为0的我们就不需要去计算它们的兴趣相似度了。
得到用户相似度之后,我们开始计算用户对物品的兴趣度。
计算用户对物品的兴趣度
用户u对物品i的感兴趣程度公式如下:
S(u, K)是与用户u兴趣最接近的K个用户的集合, N(i)是对物品i有过行为的用户集合,既然要判断u对物品i的兴趣程度,当然是要从兴趣最接近的K个用户中挑出对i有过行为的,所以取交集。 是用户u和用户v的兴趣相似度, 代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以另其等于1。
上图中,用户B对物品b和d没有过行为,我们来计算用户B对物品b和d的感兴趣程度。
- 计算B 与 A C D的用户相似度,取前两名,显然是用户C(W=0.5)与用户A(W=0.41)
- 计算B对物品b的兴趣度:用户A和C都对b有过行为,所以累加,结果0.5+0.41=0.91
- 计算B对物品d的兴趣度:只有A对d有过行为,因此S(u, K)交N(i)只剩下A,结果0.41
Top-N分析法
得到用户对物品的兴趣度后,我们使用Top-N推荐。
TOP-N分析法就是通过TOP-N算法从研究对象中得到所需的N个数据,并从排序列表中选取最大或最小的N个数据,这就是一个TOP-N算法。即对所有物品进行P(u,i)计算兴趣度后进行降序,取前N个物品推荐给用户。
缺陷和改进
看似很完美了~其实还有个问题~
试问:我和XXX都买了英语六级教程,那能说明咱们兴趣一样吗?不一定吧,买六级只是考试必备,对大部分人而言是一种无奈的操作。。。因此,我们要精确判断两人兴趣一样,不应该拿这些热门的物品做决策。冷门的产品更能说明问题。比如,我和XXX都买了java教程,那么应该就能说明我们有共同的兴趣了。所以有了一个更精确的公式:
1/log1+|N(i)| 惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响,使得结果更为精确。
基于物品的协同过滤算法
概念
假设某天你购买了机器学习书籍,那么淘宝会给你推荐python书籍。因为机器经过判断得出这两者相似度很高,你既然会喜欢机器学习那么理应喜欢python。
基于物品的协同过滤算法就是给用户推荐那些和他们之前喜欢的物品相似的物品。
不过, ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B。
计算物品与物品的相似度
N(i)表示喜欢i物品的用户集合,N(j)表示喜欢j物品的用户集合。Wij其实就是说明:喜欢i物品的用户中有多少也喜欢j物品,从而得出i和j的相似度。但是如果j是热门商品呢?前面我们说过,以热门商品做决策是不科学的,因此我们应该降低j的权重,所以得出改进的公式:
喜欢j的人越多,分母越大,权重更低。
倒排法
跟上面一样,我们要过滤出物品i和j完全没关系的,不做不必要的计算。因为上面详细解释过,这里就粗略的画一下结果图,省略了中间那个物品对用户的图。
通过计算得到Wab=0.82,Wac=0.58,Wad=0.58
计算用户对物品的兴趣度
用户u对物品j的感兴趣程度计算公式:
此公式与上面基于用户的公式非常相像。S(j,K)表示与j物品最相似的k个物品的集合。N(u)表示用户喜欢的物品集合。Wji表示物品之间的相似度。rui是用户u对物品i的兴趣。(对于隐反馈数据集,如果用户u对物品i有过行为,即可令rui=1。)
Top-N分析
计算出Puj之后,对其排序,取前几名作为推荐物品推荐给用户。盗一张《推荐系统实践》的图,形象的解释下。