协同过滤算法(例题理解)

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

        协同过滤算法是一种推荐系统算法,它利用用户对物品的评价数据来预测用户对未评价物品的喜好程度。该算法基于一个简单的思想:如果两个用户在过去对某些物品的评价很相似,那么在未来他们对这些物品的评价也很可能相似。因此,协同过滤算法将用户之间的相似度作为预测用户对物品的评价的依据,从而实现对用户兴趣的预测。该算法分为基于用户的协同过滤和基于物品的协同过滤两种类型。

一、基于用户的协同过滤

        基于用户的协同过滤算法是一种推荐系统算法,其基本思想是根据用户历史行为数据,找到和当前用户兴趣相似的其他用户,然后利用这些用户的行为数据来预测当前用户的兴趣,从而向其推荐物品。

具体来说,基于用户的协同过滤算法包括以下步骤:

  1. 确定目标用户,即需要为其推荐物品的用户。

  2. 找到和目标用户相似的其他用户,可以通过计算用户之间的相似度来实现。常用的相似度计算方法包括余弦相似度、皮尔逊相关系数等。

  3. 选取一定数量的相似用户作为邻居集合,可以根据相似度进行排名,选取前k个相似用户作为邻居。

  4. 预测目标用户对未评价过的物品的评分,可以通过加权平均或加权和等方法来计算。具体来说,可以将目标用户对邻居用户已评价过的物品的评分作为权重,进行加权平均或加权和运算。

  5. 为目标用户推荐未评价过的物品,可以根据预测的评分进行排序,选取前n个物品作为推荐结果。

        基于用户的协同过滤算法的优点是能够利用用户的历史行为数据进行推荐,具有较好的个性化效果。但是也存在一些缺点,比如对于新用户,无法准确预测其兴趣,需要等待其产生足够的历史行为数据;同时也存在冷启动问题,即对于新加入的物品,无法在初始阶段进行有效的推荐。

二、基于物品的协同过滤算法

        基于物品的协同过滤算法是一种推荐算法,它利用用户对物品的评分数据来发现物品之间的相似度,从而给用户推荐与其历史兴趣相似的物品。该算法的核心思想是基于物品的相似度,预测用户对物品的评分。

具体而言,基于物品的协同过滤算法的过程如下:

1、计算每对物品之间的相似度。常用的计算方法包括余弦相似度和皮尔逊相关系数等。

2、找到用户历史评分过的物品,对于给定的目标用户,需要找到其历史评分过的物品集合。

3、计算每个物品的加权评分

4、给用户推荐物品

        基于物品的协同过滤算法相比于基于用户的协同过滤算法,其优点在于可以在物品数量较多的情况下快速计算出相似度矩阵,且推荐结果更为稳定和准确。

三、关键公式

皮尔逊相关系数:

在这里插入图片描述

余弦相似度:

在这里插入图片描述

        皮尔逊相关系数和余弦相似度是用于衡量向量之间相似性的两种常用方法。它们在计算方式和应用场景上存在一些区别。

1、计算方式:

        皮尔逊相关系数是通过计算两个向量的协方差除以它们的标准差的乘积来度量它们之间的相似性。其取值范围为[-1,1],其中1表示完全正相关,-1表示完全负相关,0表示不相关。

        余弦相似度是通过计算两个向量的夹角余弦值来度量它们之间的相似性。其取值范围为[-1,1],其中1表示完全相似,-1表示完全相反,0表示无相似性。

2、应用场景:

        皮尔逊相关系数常用于处理具有数值属性的数据,如评分数据,以及在时间序列分析中。它可以度量两个变量之间的线性相关性,适用于连续变量

        余弦相似度常用于处理文本数据和其他稀疏数据,如推荐系统中的物品推荐。它可以度量两个向量之间的角度和方向,适用于处理大规模稀疏数据。

计算预测分值:

在这里插入图片描述

分子是对n个不同用户对同一商品的分析,而分母则是把每个用户单独的拿出来,分析不同商品

同现相似度:

        其中,分母是喜欢物品i的用户数,而分子则是同时喜欢物品i和物品j的用户数。因此,下述公式可用理解为喜欢物品i的用户有多少比例的用户也喜欢j  (和关联规则类似)

在这里插入图片描述

分母|N(i)|是喜欢物品 i 的用户数,而分子|N(i)∩N(j)|是同时喜欢物品 i 和j 的用户,但是如果物品 j 很热门,就会导致 Wij 很大接近于 1。因此避免推荐出热门的物品,我们使用下面的公式:

在这里插入图片描述

用户 u 对于物品 j 的兴趣:

四、实例

4-1  基于用户的协同过滤----余弦相似度

在这里插入图片描述

用户间相似度计算:

        用户A与用户B的相似度=(5*0+1*0+0*4.5+0*3)/(SQRT(5^2+1^2+0^2+0^2)*SQRT(0^2+0^2+4.5^2+3^2)) =0

        用户A与用户C的相似度=(5*1+1*4+0*0+0*4)/(SQRT(5^2+1^2+0^2+0^2)*SQRT(1^2+4^2+0^2+4^2)) =0.307254934

        用户B与用户C的相似度=(0*1+0*4+4.5*0+3*4)/(SQRT(0^2+0^2+4.5^2+3^2)*SQRT(1^2+4^2+0^2+4^2)) =0.38624364

计算喜爱度:

用户A对商品3的喜爱度=用户A与用户B的相似度*用户B对商品3的评分+用户A与用户C的相似度*用户C对商品3的评分=0*4.5+0.307254934*0=0

用户A对商品4的喜爱度=用户A与用户B的相似度*用户B对商品4的评分+用户A与用户C的相似度*用户C对商品4的评分=0*3+0.307254934*4=1.22901974

用户B对商品1的喜爱度=用户B与用户A的相似度*用户A对商品1的评分+用户B与用户C的相似度*用户C对商品1的评分=0*5+0.38624364*1=0.38624364

4-2  基于用户的协同过滤----皮尔逊系数

 在这里插入图片描述

 计算相似度:(用户C 商品4 为例)

 只有用户 A 和用户 D 对商品 4 评过分,因此候选邻居只有 2 个,分别为用户 A 和用户 D。

在这里插入图片描述

在这里插入图片描述

 计算预测分值:

在这里插入图片描述

 其它手写推导:

用户A:

 用户B:

 用户D:

 用户E:

4-3 基于物品的协同过滤----余弦相似度

在这里插入图片描述

商品余弦相似度计算结果如下

商品1与商品2的相似度=(5*1+0*0+1*4)/(SQRT(5^2+0^2+1^2)*SQRT(1^2+0^2+4^2))=0.428086345

商品1与商品3的相似度=(5*0+0*4.5+1*0)/(SQRT(5^2+0^2+1^2)*SQRT(0^2+4.5^2+0^2))=0

....

计算喜爱度:

用户A对商品3的喜爱度=商品1与商品3的相似度*用户A对商品1的评分+商品2与商品3的相似度*用户A对商品2的评分+商品4与商品3的相似度*用户A对商品4的评分=0*5+0*1+0.6*0=0

用户A对商品4的喜爱度=商品1与商品4的相似度*用户A对商品1的评分+商品2与商品4的相似度*用户A对商品2的评分+商品3与商品4的相似度*用户A对商品4的评分=0.156892908*5+0.776114*1+0.6*0=1.560578541

用户B对商品1的喜爱度=商品1和商品2的相似度*用户B对商品2的评分+商品1和商品3的相似度*用户B对商品3的评分+商品1与商品4的相似度*用户B对商品4的评分=0.47067872

另一个例子:

共现矩阵C表示同时喜欢两个物品的用户数,是根据用户物品对应关系表计算出来的。

 相似矩阵

补充:

1、共现矩阵(同时喜欢两个物品用户的人数)

 2、相似度算法改进

        从前面的讨论可以看到,在协同过滤中两个物品产生相似度是因为它们共同出现在很多用户的兴趣列表中。换句话说,每个用户的兴趣列表都对物品的相似度产生贡献。那么是不是每个用户的贡献都相同呢?
假设有这么一个用户,他是开书店的,并且买了当当网上80%的书准备用来自己卖。那么他的购物车里包含当当网80%的书。假设当当网有100万本书,也就是说他买了80万本。从前面对ItemCF的讨论可以看到,这意味着因为存在这么一个用户,有80万本书两两之间就产生了相似度,也就是说,内存里即将诞生一个80万乘80万的稠密矩阵

        John S. Breese在论文1中提出了一个称为IUF(Inverse User Frequence),即用户活跃度对数的倒数的参数,他也认为活跃用户对物品相似度的贡献应该小于不活跃的用户,他提出应该增加IUF参数来修正物品相似度的计算公式:

上述公式对活跃用户做了一种软性的惩罚,但是对于很多过于活跃的用户,比如上面那位买了当当网80%图书的用户,为了避免相似度矩阵过于稠密,我们在实际计算中一般直接忽略他的兴趣列表,而不将其纳入到相似度计算的数据集中。

3、相似度矩阵归一化处理

        Karypis在研究中发现如果将ItemCF的相似度矩阵按最大值归一化,可以提高推荐的准确率。其研究表明,如果已经得到了物品相似度矩阵w,那么可以用如下公式得到归一化之后的相似度矩阵w':

实验表明,归一化的好处不仅仅在于增强推荐的准确度,还可以提高推荐的覆盖率和多样性。

(2条消息) 基于用户的协同过滤算法(userCF)_overlordmax的博客-CSDN博客

https://blog.csdn.net/qq_52358403/article/details/112768902

协同过滤算法 | JIANG-HS

「Hive」协同过滤推荐系统-余弦相似度 - 知乎 (zhihu.com)

基于物品的协同过滤算法(ItemCF)原理以及代码实践 - 简书 (jianshu.com)


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

相关文章

python实现协同过滤算法

协同过滤算法常用于商品推荐或者类似的场合,根据用户之间或商品之间的相似性进行精准推荐 协同过滤算法分为: 基于用户的协同过滤算法(UserCF算法)(适合社交化应用)基于商品的协同过滤算法(It…

java 协同过滤算法_推荐系统中协同过滤算法实现分析

最近研究Mahout比较多,特别是里面协同过滤算法;于是把协同过滤算法的这个实现思路与数据流程,总结了一下,以便以后对系统做优化时,有个清晰的思路,这样才能知道该如何优化且优化后数据亦能正确。 推荐中的协…

协同过滤算法理解

一、协同过滤思想介绍 顾名思义,协同过滤算法的核心思想就是“物以类聚,人以群分”,通过用户对物品的评价和意见,将物品和人聚成几类,从各自的类中挑选出用户可能感兴趣的的物品进行推荐,而代替从直接从海量…

协同过滤推荐算法的原理及实现

一、协同过滤算法的原理及实现 二、基于物品的协同过滤算法详解 一、协同过滤算法的原理及实现 协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户…

协同过滤算法详解

一、协同过滤算法简介 协同过滤算法是一种较为著名和常用的推荐算法,它基于对用户历史行为数据的挖掘发现用户的喜好偏向,并预测用户可能喜好的产品进行推荐。也就是常见的“猜你喜欢”,和“购买了该商品的人也喜欢”等功能。它的主要实现由…

协同过滤算法

目录 一、什么是协同过滤算法 二、相似度的计算 2.1杰卡德(Jaccard)相似度 2.2余弦相似度(Cosine Similarity) 2.3皮尔逊相关系数(Pearson Correlation Coefficient) 2.4欧氏距离(Euclidea…

协同过滤推荐算法

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

推荐系统之协同过滤算法

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引入…