目录

一、什么是协同过滤算法

二、相似度的计算

2.1杰卡德(Jaccard)相似度

2.2余弦相似度(Cosine Similarity)

2.3皮尔逊相关系数(Pearson Correlation Coefficient)

 2.4欧氏距离(Euclidean Distance)

2.5对比欧氏距离和余弦相似度

三、基于用户(user)的协同过滤

四、基于物品(item)的协同过滤

五、UserCF和ItemCF的对比

5.1区别

5.2共同缺点


一、什么是协同过滤算法

        协同过滤算法是一种推荐系统算法,它根据用户对物品的历史行为以及多个用户之间的相似度,来预测用户对某个物品的评分或喜欢程度。简而言之,协同过滤算法就是根据用户群体的行为,来推测其未来行为的一种算法

协同过滤算法分为两种类型:基于用户(User)的协同过滤算法和基于物品(item)的协同过滤算法。

二、相似度的计算

        相似度是指两个对象在某些特征上的相同程度,通常用于比较文本、图像、音频等数据。相似度的计算方法因对象类型和应用场景不同而不同。

相似度的计算一般主要有一下四种:

2.1杰卡德(Jaccard)相似度

Jaccard相似系数通常用于比较两个集合的相似程度。Jaccard相似系数是指两个集合交集的大小与并集的大小之比。Jaccard相似系数的取值范围为[0,1],值越接近1表示越相似,取值为0表示完全不同

集合A和B的Jaccard相似系数计算公式为:

J(A,B) = |A∩B| / |A∪B|

其中,|A∩B|表示A和B的交集大小,|A∪B|表示A和B的并集大小。

2.2余弦相似度(Cosine Similarity)

余弦相似度是将两个向量映射到高维空间中,计算它们的夹角余弦值。余弦相似度的取值范围为[-1, 1],值越接近1表示越相似,取值为0表示无关,取值为-1表示完全不同。也就是说,夹角越小,说明相似度越大。

其中,向量 i 和 j 的余弦相似度计算公式为:

其中,i 和 j 分别表示两个向量,i·j 表示A和B的内积,| i |和| j |分别表示i和j的模长。

比较常用,效果不差。

局限性:

对于【评分数据不规范】的时候,也就是说,存在有的用户喜欢打高分,有的用户喜欢打低分情况的时候,有的用户喜欢乱打分的情况,这时候余弦相似度算出来的结果可能就不是那么准确了

比如:


这时候,如果用余弦相似度进行计算,会发现用户d和用户f此较相似,而实际上,如果看这个商品喜好的一个趋势的话,其实d和e比较相近,只不过e比较喜欢打低分,d比较喜欢打高分。所以对于这种用户评分偏置的情况,余弦相似度就不是那么好了,可以考虑使用下面的皮尔逊相关系数。


2.3皮尔逊相关系数(Pearson Correlation Coefficient)

        皮尔逊相关系数用来衡量两个变量之间的相关性,通常用于比较数据之间的相似性。皮尔逊相关系数的取值范围为[-1,1],值越接近1表示越相似,取值为0表示无关,取值为-1表示完全不同。(相当于归一化的操作)

        是非常常用的一种计算相似度的一种方式,相比余弦相似度,皮尔逊相关系数通过使用用户平均分对个独立评分进行修正,减少了用户评分偏置的影响。简单的说,其实pearson做的就是把两个向量都减去他们的均值,然后再计算consine值。用pearson来计算用户相似进行推荐的话,效果还是好于consine的。公式如下:
 

 

2.4欧氏距离(Euclidean Distance)

        欧氏距离是两点间的距离,表示在空间中两个点之间的实际距离。欧氏距离在计算相似度时通常被用来表示两个向量之间的差异程度。欧氏距离越小,表示两个向量越相似

向量A和B的欧氏距离计算公式为:

d(A,B) = √(∑(A_i-B_i)^2)

其中,A_i和B_i分别表示向量A和B的第i个元素,∑(A_i-B_i)^2表示所有元素差的平方和,√表示求平方根。

2.5对比欧氏距离余弦相似度

为什么在一些场景中要使用余弦相似度而不是欧式距离呢?
总体的来说,欧式距离体现数值上的绝对差异,而余弦距离体现方向上的相对差异
余弦相似度强调夹角,欧氏距离强调绝对数值

举例:
如果要统计两部剧的用户观看行为,用户A的观看向量(0,1),用户B为(1,0),此时二者余弦距离很大而欧式距离很小。

我们分析两个用户对于不同视频的偏好,更关注相对
差异,显然应当用余弦距离。
举例


而当我们分析用户活跃度,以登录次数和平均观看时长作为特征时,余弦距离会认为(1,10)和(10,100)两个用户距离很近,但显然这两个用户活跃度是有着极大差异的。此时我们关注的是数值绝对差异,应当使用欧式距离。

三、基于用户(user)的协同过滤

基于用户的协同过滤(User-based Collaborative Filtering)是推荐系统中常用的一种方法。其主要思想是通过分析用户之间的相似性来进行商品、服务或内容的推荐。

比如上图:如果两个人的爱好相似,左边的用户喜欢短袖、裤子和帽子,而右边的喜欢短袖、裤子、帽子和皮鞋,那么基于用户的协同过滤算法,就会将皮鞋推荐给左边的用户。

该方法的主要步骤包括:

  1. 确定相似性度量方法:该方法需要确定一个用户之间相似性的度量方法,通常使用余弦相似度或 Pearson(皮尔逊) 相关系数等方法。

  2. 计算相似性:根据相似性度量方法,计算出每个用户与其他用户之间的相似度。具体而言,可以将每个用户的历史行为(包括购买记录、评分、点击历史等)视为一个向量,并使用相似性度量方法计算向量之间的相似度。

  3. 选择邻居用户:根据相似性,选择与目标用户相似度最高的 K 个用户进行推荐。一般来说,K 的取值需要根据实际情况进行调整。

  4. 推荐商品:根据邻居用户的喜好记录,为目标用户推荐潜在感兴趣的商品、服务或内容。

例1(采用Pearson(皮尔逊) 相关系数):

 计算用户C与用户A的相关系数 和用户C与用户D 的相关系数:

 预测评分计算公式:

 预测用户 C 对商品 4 的评分。 根据上述评分预测公式,计算用户 C 对商品 4 的评分,如下所示:

 缺点

1、数据稀疏性

一个大型的电子商务推荐系统一般有非常多的物品,用户可能买的其中不到1%的物品,不同用户之间买的物品重叠性较低,导致算法无法找到一个用户的邻居,即偏好相似的用户,即使找到了,准确性也可能不会太高。这导致UserCF不适用于那些正反馈获取较困难的应用场景(如酒店预订,大件商品购买等低频应用)

2、用户相似度矩阵维护难度大
存储空间随着用户数量的增加而增加,不适合用户数据量大的情况中

基于用户的协同过滤方法优点是易于实现和解释,同时往往能够提供较好的推荐效果。然而,该方法也存在一些问题,例如容易受到数据稀疏性的影响,同时用户的兴趣偏好可能会随时间改变,需要及时更新推荐模型。因此,在实际应用中需要根据具体情况进行选择和调整。

应用场景:常适于用户少,物品多,时效性较强的场合,比如,微博热搜,新闻推荐等。

四、基于物品(item)的协同过滤

      基于物品的协同过滤(Item-based Collaborative Filtering)是推荐系统中一种常见的算法。其基本思想是:找出具有相似兴趣爱好的用户,根据这些用户之间的相似性和他们的行为历史,预测出某个用户对某个物品的兴趣,并给该用户推荐相应的物品。
与基于用户的协同过滤(User-based Collaborative Filtering)相比,基于物品的协同过滤更加灵活,因为它不需要考虑用户的行为历史和兴趣爱好,而是考虑物品之间的相似性。具体来说,该算法主要分为以下几个步骤(与基于用户的类似):

1.收集数据
首先,需要收集用户对不同物品的评分或者行为历史数据,例如购买、浏览、收藏、评分等。
2.计算物品之间的相似度
对于每一对物品,通过计算它们的相似度,来衡量它们之间的相似程度。常用的相似度计算方法包括余弦相似度、皮尔逊相关系数等。
3.找出相似物品
对于每个物品,找出和它最相似的 k 个物品,可以通过对它们的相似度进行排序来实现。
4.给用户推荐物品
对于每个用户,找出他/她喜欢过的物品中与未评分的物品最相似的 k 个物品,根据这些物品的评分预测出用户对未评分物品的兴趣程度,并将这些物品推荐给用户。

基于物品的协同过滤算法有许多改进和优化方法,例如基于矩阵分解的方法、基于标签的方法等。在实际应用中,我们需要根据具体的情况选择合适的算法进行推荐。

优点:

1、Item-based算法的预测结果比User-based算法的质量要高一点。
2、由于Item-based算法可以预先计算好物品的相似度,所以在线的预测性能要比User-based算法的高。

缺点:

1、数据稀疏性
使用场景:适用于电商平台等User数量远远大于Item数量的应用场景

 行数越多,相似度大于0的列数就越多∶
如: item1跟item6原本相似度为0,User多了之后,相似度突破0

2、物品相似度矩阵维护难度大

适用场景:
适用于兴趣变化较为稳定的应用,更接近于个性化的推荐,适合物品少,用户多,用户兴趣固定持久,物品更新速度不是太快的场合
比如推荐艺术品,音乐,电影

五、UserCF和ItemCF的对比

5.1区别

5.2共同缺点

1.不能彻底解决数据稀疏性问题

2.泛化能力弱:热门物品具有很强的头部效应,容易跟大量物品产生相似,而尾部物品由于特征向量稀疏,导致很少被推荐。(为解决这一问题,矩阵分解技术被提出)

3.无法利用更多的信息:一般是仅仅基于用户的行为数据(评价、购买、下载等),而不依赖于项的任何附加信息或者用户的任何附加信息,比如不依赖物品自身特征、用户年龄,性别等。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐