一、基本概念
定义:协同过滤, 基本思想是根据用户之前的喜好以及其他兴趣相近的用户的选择来给用户推荐物品(基于对用户历史行为数据的挖掘发现用户的喜好偏向, 并预测用户可能喜好的产品进行推荐),一般是仅仅基于用户的行为数据(评价、购买、下载等),而不依赖于项的任何附加信息(物品自身特征)或者用户的任何附加信息(年龄, 性别等)。
算法分类:目前应用比较广泛的协同过滤算法是基于邻域的方法, 而这种方法主要有下面两种算法:
1. 基于用户的协同过滤算法(UserCF): 给用户推荐和他兴趣相似的其他用户喜欢的产品
2. 基于物品的协同过滤算法(ItemCF): 给用户推荐和他之前喜欢的物品相似的物品
不管是UserCF还是ItemCF算法, 非常重要的步骤之一就是计算用户和用户或者物品和物品之间的相似度。
二、相似性度量方法
1. 杰卡德(Jaccard)相似系数 这个是衡量两个集合的相似度一种指标。两个用户u 和 v交互商品交集的数量占这两个用户交互商品并集的数量的比例,称为两个集合的杰卡德相似系数,用符号 simuv表示,其中 n(u)、n(v)分别表示用户 u和用户 v交互商品的集合。由于杰卡德相似系数一般无法反映具体用户的评分喜好信息, 所以常用来评估用户是否会对某商品进行打分, 而不是预估用户会对某商品打多少分。
![](https://img.haomeiwen.com/i20356914/6c66232ae1fb9ad0.png)
补充集合知识:设有限集合A={x|x=ai,i≤n,i∈N+,n∈N+},S=a1+a2+…+an-1+an,则S叫做集合A的模,记作|A|;
2. 余弦相似度
余弦相似度衡量了两个向量的夹角,夹角越小越相似。首先从集合的角度描述余弦相似度,相比于Jaccard公式来说就是分母有差异,不是两个用户交互商品的并集的数量,而是两个用户分别交互的商品数量的乘积,公式如下:
![](https://img.haomeiwen.com/i20356914/2e802b6fd7314e55.png)
从向量的角度进行描述,令矩阵a 为用户-商品交互矩阵(因为是TopN推荐并不需要用户对物品的评分,只需要知道用户对商品是否有交互就行),即矩阵的每一行表示一个用户对所有商品的交互情况,有交互的商品值为1没有交互的商品值为0,矩阵的列表示所有商品。若用户和商品数量分别为 、n的话,交互矩阵 就是一个 m行 n列的矩阵。此时用户的相似度可以表示为(其中 u.v指的是向量点积):
补充向量点积知识:两个向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的点积定义为:a·b=a1b1+a2b2+……+anbn。
![](https://img.haomeiwen.com/i20356914/8b013bf0131f1afc.png)
上述用户-商品交互矩阵在现实情况下是非常的稀疏了,为了避免存储这么大的稀疏矩阵,在计算用户相似度的时候一般会采用集合的方式进行计算。理论上向量之间的相似度计算公式都可以用来计算用户之间的相似度,但是会根据实际的情况选择不同的用户相似度度量方法。
3. 皮尔逊相关系数
皮尔逊相关系数的公式与余弦相似度的计算公式非常的类似,首先对于上述的余弦相似度的计算公式写成求和的形式,其中rui、rvi 分别表示用户u 和用户v 对商品 i是否有交互(或者具体的评分值):
![](https://img.haomeiwen.com/i20356914/f226c026ba15f4bb.png)
补充求和公式知识:
![](https://img.haomeiwen.com/i20356914/0cb6c7ca209cbb13.png)
如下是皮尔逊相关系数计算公式,其中rui、rvi 分别表示用户u 和用户v 对商品 i是否有交互(或者具体的评分值),ru、rv分别表示用户u 和用户 v交互的所有商品交互数量或者具体评分的平均值。
![](https://img.haomeiwen.com/i20356914/7cedf097253b0fb5.png)
所以相比余弦相似度,皮尔逊相关系数通过使用用户的平均分对各独立评分进行修正,减小了用户评分偏置的影响。
三、基于用户的协同过滤
定义:当一个用户A需要个性化推荐的时候, 我们可以先找到和他有相似兴趣的其他用户, 然后把那些用户喜欢的, 而用户A没有听说过的物品推荐给A。
![](https://img.haomeiwen.com/i20356914/ba3c4eb1696c2c82.png)
UserCF算法主要包括两个步骤:
1. 找到和目标用户兴趣相似的集合(基于前面给出的相似性度量的方法找出与目标用户兴趣相似的用户)
2. 找到这个集合中的用户喜欢的, 且目标用户没有听说过的物品推荐给目标用户。(依赖于目标用户对相似用户喜欢的物品的一个喜好程度来对目标用户进行推荐)
![](https://img.haomeiwen.com/i20356914/ed7d29e00552d747.png)
给用户推荐物品的过程可以形象化为一个猜测用户对商品进行打分的任务,上面表格里面是5个用户对于5件物品的一个打分情况,就可以理解为用户对物品的喜欢程度
应用UserCF算法的两个步骤:
1. 首先根据前面的这些打分情况(或者说已有的用户向量)计算一下Alice和用户1, 2, 3, 4的相似程度, 找出与Alice最相似的n个用户
2. 根据这n个用户对物品5的评分情况和与Alice的相似程度会猜测出Alice对物品5的评分, 如果评分比较高的话, 就把物品5推荐给用户Alice, 否则不推荐。
1.利用用户相似度和相似用户的评价加权平均获得用户的评价预测
![](https://img.haomeiwen.com/i20356914/159bf110ee466c4c.png)
![](https://img.haomeiwen.com/i20356914/570f71dec62d9e8e.png)
2.还有一种方式如下, 这种方式考虑的更加前面, 依然是用户相似度作为权值, 但后面不单纯的是其他用户对物品的评分, 而是该物品的评分与此用户的所有评分的差值进行加权平均, 这时候考虑到了有的用户内心的评分标准不一的情况, 即有的用户喜欢打高分, 有的用户喜欢打低分的情况。
![](https://img.haomeiwen.com/i20356914/e43fbdacefc5bce6.png)
![](https://img.haomeiwen.com/i20356914/639574812fc2af20.jpg)
![](https://img.haomeiwen.com/i20356914/ad04edce43254a06.jpg)
1.从这里看出, Alice用户和用户2,用户3,用户4的相似度是0.7,0, -0.79。 所以如果n=2, 找到与Alice最相近的两个用户是用户1, 和Alice的相似度是0.85, 用户2, 和Alice相似度是0.7
2. 根据相似度用户计算Alice对物品5的最终得分
用户1对物品5的评分是3, 用户2对物品5的打分是5, 那么根据上面的计算公式, 可以计算出Alice对物品5的最终得分是
![](https://img.haomeiwen.com/i20356914/ee85e2619209c947.png)
3.根据用户评分对用户进行推荐
这时候, 我们就得到了Alice对物品5的得分是4.87, 根据Alice的打分对物品排个序从大到小:
物 品1 >物 品 5>物 品3 =物 品4 物 品>2这时候,如果要向Alice推荐2款产品的话, 我们就可以推荐物品1和物品5给Alice
网友评论