协同过滤算法_推荐系统之基于用户的协同过滤算法UserCF

步骤有2:

  1. 找到与目标用户T兴趣相似的用户集U。
  2. 找到U中用户喜欢的,且T没听说过的物品,并将其推荐给T。

先计算用户之间的相似度。

设有用户u、v,N(u)为用户u产生过正反馈关系(浏览过、收藏关注过、加入购物车过、点赞过、购买过等等)的物品集,N(v)亦如是。

相似度计算公式有2:

  • Jaccard相似系数:
cc1bf6af0eaaebb39f8affc58c0d2879.png

Jaccard相似系数

即两用户物品集的交集与并集绝对值之比。

  • 余弦相似系数:
14ee7267f33fbe08867acad5da361535.png

余弦相似系数

设用户ABCD对a~f物品有过关联,如下:

A:acdB:cefC:abD:bf

则A与BCD的相似度计算如下(绝对值符号就不写出来了):

W(A,B)={a,c,d}∩{c,e,f}/√{a,c,d}*{c,e,f}=1/3W(A,C)=1/√6W(A,D)=0

注意以上公式,当用户量很大的时候,对两两用户都要进行计算,且涉及到除法、开方运算,是比较耗费计算及性能的。

如果我们先将N(u)∩N(V)=0,即并无共同感兴趣物品的用户排除掉,则会大大节省运算时间,如上例中的A、D用户。


在这里要构建一个物品-用户倒排表,在基于此构建用户相似度矩阵W。

步骤如下:

设用户ABCD、物品abcdef。

用户-物品关系:

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

物品-用户关系:

a:A,Bb:C,Dc:A,Bd:A,Ce:A,B,Df:B,D

用户相似度矩阵:

72e0cc964c5749006232f16f00f16ea8.png

用户相似度矩阵-分子

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

6bf8b9f4db0e2bdd394dd4b54068a63b.png

用户相似度矩阵

基于以上数据,我们可以根据下面的公式求出用户对物品感兴趣的程度:

7f75d83c76dc8900e68ee0628c0b90b8.png

UserCF

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

下面我们计算A对其他物品感兴趣的程度。

1、根据已知条件,我们得出未与A发生联系的物品有b、f。

2、设K=3。选取与物品b、f有过联系的用户集中相似度最高的3个用户。在本例中,其实只有2个用户。

3、根据公式可计算:

P(A,b)=W(AC)+W(AD)=1/√3P(A,f)=W(AB)+W(AD)=2/√3

可得相比较物品b,A会对f更感兴趣。


接下来谈谈改进。

整个算法最关键的就是要计算用户的相似度。两用户产生联系的相同物品越多,二人的相似度就越高,但实际中并非如此,举例如下。

有用户ABC,分别购买了:

A:10件婴儿用品,3件手办模型。B:10件婴儿用品,3件汽车用品。C:5件手办模型。

作为人类来看,立刻得知AC兴趣相似,AB虽然都买了婴儿用品,只说明二人可能都有孩子,并不代表兴趣相似。

但在算法中,因为相同物品数量较多,计算下来AB相似度较高。为了将两用户共同物品列表中,热门物品对相似度的影响降低,公式有了如下改进:

ba5d85bf4b1b573c3f9727673559ea6b.png

用户相似度公式

i是用户u、v有过共同关联的物品。N(i)是与物品i有过关联的用户数。

下期讲基于物品的协同过滤算法ItemCF。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值