步骤有2:
- 找到与目标用户T兴趣相似的用户集U。
- 找到U中用户喜欢的,且T没听说过的物品,并将其推荐给T。
先计算用户之间的相似度。
设有用户u、v,N(u)为用户u产生过正反馈关系(浏览过、收藏关注过、加入购物车过、点赞过、购买过等等)的物品集,N(v)亦如是。
相似度计算公式有2:
- Jaccard相似系数:
![cc1bf6af0eaaebb39f8affc58c0d2879.png](https://i-blog.csdnimg.cn/blog_migrate/4ee9d75e7d756dab47d4c9993bcb7c9b.jpeg)
Jaccard相似系数
即两用户物品集的交集与并集绝对值之比。
- 余弦相似系数:
![14ee7267f33fbe08867acad5da361535.png](https://i-blog.csdnimg.cn/blog_migrate/dfaa02f0ddc5826282bb9d05ec8ac7b5.jpeg)
余弦相似系数
设用户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](https://i-blog.csdnimg.cn/blog_migrate/ba8e927ee41fe4f247990017c5212039.jpeg)
用户相似度矩阵-分子
以上是分子部分,最终结果如下:
![6bf8b9f4db0e2bdd394dd4b54068a63b.png](https://i-blog.csdnimg.cn/blog_migrate/b7f8e805cdbc061fa02aa6310e9d4c54.jpeg)
用户相似度矩阵
基于以上数据,我们可以根据下面的公式求出用户对物品感兴趣的程度:
![7f75d83c76dc8900e68ee0628c0b90b8.png](https://i-blog.csdnimg.cn/blog_migrate/6f23b0bbaeee0e2c7a3650c6945b017f.jpeg)
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](https://i-blog.csdnimg.cn/blog_migrate/4d2d600186a9bd612cab1a7ff48e199a.jpeg)
用户相似度公式
i是用户u、v有过共同关联的物品。N(i)是与物品i有过关联的用户数。
下期讲基于物品的协同过滤算法ItemCF。