协同过滤算法_推荐系统之基于物品的协同过滤算法ItemCF

步骤有2:

  1. 计算物品间的相似度。
  2. 根据相似度以及用户的历史行为给用户生成推荐列表。

相似度计算公式:

设N(i)、N(j)为喜欢或购买等与物品i、j发生正反馈行为的用户数量。

W(i,j)是i、j的相似度。

92deee68c9778fe32d17782e80d19d02.png

即:同时喜欢i、j的用户数量与喜欢i用户数量之比。

当然,考虑到长尾分布、为避免马太效应,有必要将热门物品降重,相似度公式可以为:

94fc31584e189d965ab649e682afcda4.png

还记得《推荐系统之基于用户的协同过滤算法UserCF》讲UserCF时,有个物品-用户倒排表么,在ItemCF中,也可以构建一个用户-物品倒排表。

设有用户ABCD,物品a~f,二者关系如下:

A:a,c,d,eB:c,e,fC:a,b,dD:b,e,f

则物品相似度矩阵:

23ba47017d2bdc0f216b2b461da6ee09.png

以上是分子部分,最终结果:

2610164f806bcb3a546f5fb565df5aa4.png

计算用户u对物品j的兴趣度公式如下,设:

P(u,j)为用户u对物品j的兴趣度。W(j,i)为物品j、i的相似度。r(u,i)为u对i的兴趣度,例如购买过代表10,加入购物车8,收藏6,点赞4,浏览1等等。也可以是用户对物品的评分,比如电影评分等。本文为了描述简单,统一设为1。N(u)为u喜欢的物品集。S(j,K)为与j最相似的K个物品集。
ae9d0e97c2feaaf064724cd3b9d71d38.png

以前面给出的数据进行计算,给用户A推荐物品,K=3。

未与A发生关联的物品为b、f,分别计算A对二者的兴趣度。

A喜欢的物品N(A)={a,c,d,e}。

b最相似的3个物品S(b,3)={a,d,f}。

P(A,b)=W(b,a)+W(b,d)=1P(A,f)=W(f,c)+W(f,e)=0.5+2/√6>1

给A推荐f。


优化

通过物品相似度公式可知,两个物品出现在越多的用户兴趣列表中,则相似度越高。

也即每个用户的兴趣列表都会对物品相似度产生影响。但这些影响的权重不应相同。

同前文之例,A用户买了10件婴儿用品,3件手办模型,难道尿不湿与高达模型就很相似吗?用户C购买手办的时候就要给他推荐奶粉?

所以用户A(活跃度高)对购买物品两两相似度的影响权重应小于C(活跃度低)。公式如下:

13ace2e53fcad70dad247d4193a4f976.png

此即ItemCF-IUF

当然了,如果有些人过于活跃,比如A用户是一位大酒店的采购员,基本上能把菜市场90%的东西都买了,这种用户的兴趣列表在计算相似度时,一般不计入计算了。


归一化

还拿之前的例子说明。

我们知道婴儿用品中,奶粉和尿不湿等的相似度很高,假设为0.8。但在手办模型中,高达和初音未来的相似度就不那么高了,假设为0.4。

那么有用户买了10件婴儿用品,10件手办。如果给他推荐两个物品的话,理应是婴儿用品、手办模型各1。但现在只会给他推荐两个婴儿用品,因为婴儿用品间的相似度大于手办模型间的相似度。这样一来覆盖率就变低了。

为此我们要将不同种类物品的相似度,进行归一化。公式如下:

ed57c929505e99af7d8516a13887513d.png

这就是ItemCF-Norm

我们举个例子进行说明。

设有婴儿物品:尿不湿(简称:湿)、奶粉(粉)、奶瓶(瓶)、童装(装)。

手办模型:高达(高)、初音未来(初)、明日香(明)。

相似度矩阵如下:

0467d0861bf7e236e84f16b282acdf44.png

婴儿用品间的相似度很高,手办模型则相对偏低。

设有用户A的兴趣列表{湿,粉,高,明},则待推荐的物品有{瓶,装,初}。

设K=3。

S(瓶,3)={湿,粉,装}S(装,3)={湿,粉,瓶}S(初,3)={高,明,粉}
P(A,瓶)=W(瓶,湿)+W(瓶,粉)=1.6P(A,装)=W(装,湿)+W(装,粉)=1.2P(A,初)=W(初,明)+W(初,高)+W(初,粉)=1.1

推荐奶瓶、童装

接着我们进行归一化,结果矩阵如下:

7727d6017fecd6537b0a31cb1f03a5de.png
P(A,瓶)=W(瓶,湿)+W(瓶,粉)=2P(A,装)=W(装,湿)+W(装,粉)=1.5P(A,初)=W(初,明)+W(初,高)=2

推荐奶瓶,初音未来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值