协同过滤算法

article/2025/10/19 16:01:01

目录

一、什么是协同过滤算法

二、相似度的计算

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


http://chatgpt.dhexx.cn/article/JZy0SArc.shtml

相关文章

协同过滤推荐算法

一、协同过滤思想简介 二、协同过滤算法原理介绍 三、基于用户的协同过滤算法描述 四、基于物品的协同过滤算法 基于物品的协同过滤算法的优缺点 一、协同过滤思想简介 协同过滤,从字面上理解,包括协同和过滤两个操作。首先我们在外出和朋友吃饭的时候肯…

推荐系统之协同过滤算法

1、介绍 协同过滤算法(Collaborative Filtering) 是比较经典常用的推荐算法,从1992年一直延续至今。所谓协同过滤算法,基本思想是根据用户的历史行为数据的挖掘发现用户的兴趣爱好,基于不同的兴趣爱好对用户进行划分并…

oracle数据库中spool的作用,Oracle中Spool命令如何使用 Oracle中Spool命令使用方法

Oracle中Spool命令如何使用?本篇文章小编给大家分享一下Oracle中Spool命令使用方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。 方法/步骤 首先需要明白Spool是Oracle的命令而不是sql语句。 Spool命…

oracle的Spool命令

使用spool命令实行将sql*plus中的输出的结果复制到一个指定的文件中,或者把查询的结果 发送到打印机中,直接使用spool off命令为止。 spool命令的语法如下: spool [file_name [create|replace|append] off|out] 其中file_name指定一个操作…

Oracle数据导出spool用法详解

Oracle数据导出spool用法详解 spool可导出select查询的结果集以emp表为例spool命令参数 spool可导出select查询的结果集 在实际的工作中,很多时候我们需要将Oracle中查询的数据导出来,生成excel格式的表以便于处理。虽然plsql可以导数据,但是…

oracle spool命令

1.spool的作用是什么? spool的作用可以用一句话来描述:在sqlplus中用来保存或打印查询结果。 通过spool 命令,可以将select 数据库的内容写到文件中,通过在sqlplus设置一些参数,使得按指定方式写到文件中。 spool 是…

spool命令的使用

(一)SPOOL是sqlplus中的命令 转自:https://blog.csdn.net/wangnan537/article/details/20706555 可作如下用途: 1)可使用SPOOL保存查询的结果集 [sql] view plain copy SPOOL "C:\test.txt" --生成test.txt文件 ...…

spooling

SPOOLing的含义是什么?试述SPOOLing系统的特点、功能以及控制过程。答:SPOOLing是Simultaneous Peripheral Operation On-Line (即外部设备联机并行操作)的缩写 SPOOLING ,它是关于慢速字符设备如何与计算机主机交换信…

SPOOLing技术

1.什么是SPOOLing 脱机输入、脱机输出技术。 该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。 引入了多道程序技术后,可以利用进程来模拟脱机输入时的外围控制机功能。这样,外围操作…

SoapUI接口测试-基本操作

SoapUI:http接口测试 GET请求: 1、打开SoapUI工具,点击左上角REST,新建一个REST项目。(一般的http接口文档中会有声明此接口遵循RESTful API的设计规范),弹出的框中提示输入接口地址&#xff0c…

SoapUI-一款强大的Rest和Soap测试工具

文章目录 SoapUI-一款强大的Rest和Soap测试工具1.什么是SoapUI2.SoapUi基本使用-Http2.1 构建一个项目2.2 确定项目名2.3 创建测试用例以及用例组2.4 创建一个http请求的测试用例,这里我们用一个天气测试接口测试2.5 运行接口测试 3.SoapUi基本使用-Web Service3.1 …

接口测试工具--SoapUI下载安装教程

接口测试工具--SoapUI下载安装教程: 作为一个初学测试的小白,当然是从下载熟悉各种测试工具开始了,现在写一下SoapUI的下载安装过程,以便日后使用。 我是直接在松勤网的网站上找的下载资源:链接:ht…

SoapUI基本使用

SoapUI是用java开发的测试web service的工具。 SoapUI基本使用: 主要用其来查看web service提供的接口,以及返回的结果,以便进一步的利用,但是SoapUI的功能远不止这些,其可以对web service进行功能上和性能上的测试。…

soapui 自动化教程(四)

上一节介绍到了使用groovy实现接口自动化测试的基本功能。 本节将介绍groovy执行用例动态参数、参数回传、参数加密、soapui引入第三方jar包、生成随机参数(绕过业务逻辑中的一些唯一校验阻碍自动化),以适应更真实、复杂的场景。 soapui引入…

soapUI 5.7.0使用

soapUI 5.7.0使用 公司有接口是webService的,用的是soap协议类型,这时候使用postman就不好使了,所以这边要使用SoapUI来进行测试,以下是SoapUI的使用流程首先,新建一个SOAP项目 将webService的地址填入其中&#xff0c…

soapui 自动化教程(二)

soapui 之 groovy 基础 本教程需要一些groovy基础,不会也没关系,会任意一门编程语言就能看懂代码。 上一节介绍了soapui如何创建测试用例,本节介绍groovy脚本如何执行测试用例。 新建一个script测试用例存放脚本 新增一个step&#xff…

使用SoapUI测试webservice接口详细步骤

如题所示,当我们写好webservice接口以后,在正式发布使用之前总是需要测试下接口是否好用,使用SoapUI这个软件可以很方便地对我们写的接口进行测试。下面我以SoapUI测试一个SOAP类型的接口来举例说明: (1)S…

【工具】Soap UI注意事项

【工具】Soap UI注意事项 一. 字体大小调整二. 中文乱码 一. 字体大小调整 1.配置里: File->preferences->editor settings->select font 2.使用兼容性格式,高DPI缩放 效果: 二. 中文乱码 找到bin\SoapUI-5.4.0-EB.vmoptions文…

使用SoapUI 测试Web Service

如何测试写好的Webservice?你当然可以写代码来测试,但还是太麻烦,你得花时间去学习各语言的关于Webservice调用的相关API。这里推荐一个Webservice开发的必备工具- SoapUI,无须了解底层细节,就能快速测试你的Webservic…

SoapUI基础使用教程

目录 一、HTTP接口调用 1、创建项目 2、输入http请求地址 3、选择对应项目的request,输入信息发送请求 二、Webservice接口调用 2.1先来看soap风格的webservice接口调用的步骤 2.2再来看rest风格调用webservice接口的步骤 三、报文乱码 一、HTTP接口调用 1…