推荐算法之协同过滤

article/2025/10/30 9:28:19

一、协同过滤算法简介

所谓协同过滤算法,其基本思想就是根据用户之前的喜好及其他兴趣相近的用户的选择来给用户推荐物品(基于对用户历史行为数据的挖掘发现用户的喜好偏向, 并预测用户可能喜好的产品进行推荐)。

目前应用广泛的协同过滤算法是基于邻域的方法,而这种方法主要有下面两种算法:

  • 基于用户的协同过滤算法(UserCF): 给用户推荐和他兴趣相似的其他用户喜欢的产品
  • 基于物品的协同过滤算法(ItemCF): 给用户推荐和他之前喜欢的物品相似的物品

二、基于用户的协同过滤

基于用户的协同过滤算法主要包括两个步骤:

  • 找到和目标用户相似的用户
  • 找到这个集合中用户喜欢的,且目标用户没有听说过的物品推荐给用户。

一个例子:

在这里插入图片描述
对用户推荐商品的过程可以形象化未一个猜测用户对商品打分的任务。上图就是5个用户对5个商品的打分情况,可以理解未用户对商品的喜欢程度(可以通过用户的购买,收藏,浏览时间来判断)。

根据上图,我们现在的任务变成了判断应不应该将商品5推荐给Alice,也就是推测Alice对商品5的打分情况。

基于用户的协同过滤算法:

  1. 首先根据前面的这些打分情况(或者说已有的用户向量)计算一下Alice和用户1, 2, 3, 4的相似程度, 找出与Alice最相似的n个用户
  2. 根据这n个用户对物品5的评分情况和与Alice的相似程度会猜测出Alice对物品5的评分, 如果评分比较高的话, 就把物品5推荐给用户Alice, 否则不推荐

这就需要解决两个问题:

  • 用户之间的相似度如何计算
  • 选出与Alice最相似的n个用户后如何根据他们的习惯进行推荐。

2.1 计算两个向量的相似度

  1. 杰卡德相似系数
    这个是衡量两个集合的相似度一种指标。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。

J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J (A,B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB

  1. 余弦相似度
    它衡量了用户向量i ii和j jj之间的向量夹角的大小, 夹角越小, 说明相似度越大, 两个用户越相似
    s i m ( i , j ) = cos ⁡ ( i , j ) = i ⋅ j ∣ ∣ i ∣ ∣ ⋅ ∣ ∣ j ∣ ∣ sim (i,j) = \cos (i,j) = \frac{i \cdot j}{||i|| \cdot ||j||} sim(i,j)=cos(i,j)=ijij

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

s i m ( i , j ) = ∑ p ∈ P ( R i , p − R ‾ j ) ( R j p − R ‾ j ) ∑ p ∈ P ( R i , p − R ‾ i ) 2 ∑ p ∈ P ( R i , p − R j ‾ ) 2 sim (i,j) = \frac{\sum_{p \in P}(R_{i,p}-\overline{\text{R}}_{j})(R_{jp} -\overline{\text{R}}_j )}{\sqrt{\sum_{p \in P}(R_{i,p}-\overline{R}_{i})^2}\sqrt{\sum_{p \in P}(R_{i,p}-\overline{R_{j}})^2}} sim(i,j)=pP(Ri,pRi)2 pP(Ri,pRj)2 pP(Ri,pRj)(RjpRj)
这个式子里面其实就是每个向量先减去了它的平均值, 然后在计算余弦相似度.

from scipy.stats import pearsonri = [1, 0, 0, 0]
j = [1, 0.5, 0.5, 0]
pearsonr(i, j)

2.2 最终预测结果

通过以上几种方法,可以计算出用户之间的相似度,也就可以计算出与Alice最相似的几个用户。

然后我们可以利用用户相似度和相似用户的评价加权平均获得用户的评价预测, 用下面式子表示:
R u , p = ∑ s ∈ S ( w u , s ⋅ R s , p ) ∑ s ∈ S w u , s R_{u,p} = \frac{\sum_{s \in S}(w_{u,s}\cdot R_{s,p})}{\sum_{s\in S}{w_{u,s}}} Ru,p=sSwu,ssS(wu,sRs,p)

其中 w u , s w_u,s wu,s是用户u与用户s的相似度, R s , p R_{s,p} Rs,p是用户s对物品p的评分,这种方式没有考虑有的用户喜欢打高分,有的用户喜欢打低分的情况。

因此我们采用下面这种公式进行计算:

P i , j = R ‾ i + ∑ k = 1 n ( S i , k ( R k , j − R ‾ k ) ) ∑ k = 1 n S i , k P_{i,j} = \overline{R}_i+\frac{\sum_{k=1}^{n}(S_{i,k}(R_{k,j} - \overline{R}_k))}{\sum_{k=1}^{n}S_{i,k}} Pi,j=Ri+k=1nSi,kk=1n(Si,k(Rk,jRk))

这种方式考虑的更全面,虽然依然是用户相似度作为权值,但后面不单纯的是其他用户对物品的评分, 而是该物品的评分与此用户的所有评分的差值进行加权平均, 这时候考虑到了有的用户内心的评分标准不一的情况, 即有的用户喜欢打高分, 有的用户喜欢打低分的情况。

2.3 一个例子
在这里插入图片描述
还是这个例子,计算Alice对物品5的打分:

这里我们使用,皮尔森相关系数。使用同样的方式,计算其他用户之间的相似度,从而可以构造一个所有用户之间的相似度矩阵:

在这里插入图片描述
从这里看出, Alice用户和用户2, 用户3, 用户4的相似度是0.7, 0, -0.79。 所以如果n=2, 找到与Alice最相近的两个用户是用户1, 和Alice的相似度是0.85, 用户2, 和Alice相似度是0.7。

然后我们就可以根据相似度矩阵,来计算Alice对各物品的推荐:
P A l i c e , 物 品 5 = R ‾ A l i c e + ∑ k = 1 2 ( S A l i c e , u s e r k ( R u s e r k , 物 品 5 − R ‾ k ) ) ∑ k = 1 2 S A l i c e , u s e r k = 4 + 0.85 ∗ ( 3 − 2.4 ) + 0.7 ∗ ( 5 − 3.8 ) 0.85 + 0.7 = 4.87 P_{Alice,物品5} = \overline{R}_{Alice}+\frac{\sum_{k=1}^{2}(S_{Alice,userk}(R_{userk,物品5} - \overline{R}_k))}{\sum_{k=1}^{2}S_{Alice,userk}} = 4+\frac{0.85*(3-2.4)+0.7*(5-3.8)}{0.85+0.7} = 4.87 PAlice,5=RAlice+k=12SAlice,userkk=12(SAlice,userk(Ruserk,5Rk))=4+0.85+0.70.85(32.4)+0.7(53.8)=4.87

之后有了得分情况,对物品的推荐就可以随便推了。

三、基于物品的协同过滤

基于物品的协同过滤(ItemCF)的基本思想是预先根据所有用户的历史偏好数据计算物品之间的相似性,然后把与用户喜欢的物品相类似的物品推荐给用户。比如物品a和c非常相似,因为喜欢a的用户同时也喜欢c,而用户A喜欢a,所以把c推荐给用户A。ItemCF算法并不利用物品的内容属性计算物品之间的相似度, 主要通过分析用户的行为记录计算物品之间的相似度, 该算法认为, 物品a和物品c具有很大的相似度是因为喜欢物品a的用户大都喜欢物品c

在这里插入图片描述
基于物品的协同过滤算法主要分为两步:

  • 计算物品之间的相似度
  • 根据物品的相似度和用户的历史行为给用户生成推荐列表(购买了该商品的用户也经常购买B商品)

如果要想知道Alice给物品5打多少分,基于物品的协同过滤算法会这样做:

  1. 计算各商品的相似性,可以采用余弦相似性或者皮尔森系数
  2. 找出与物品5最相似的n个物品
  3. 根据Alice对最相近的n个物品的打分去计算出物品5的打分情况

下面我们就可以具体计算一下, 首先是步骤1:

在这里插入图片描述
P A l i c e , 物 品 5 = R ‾ 物 品 5 + ∑ k = 1 2 ( S 物 品 5 , 物 品 k ( R A l i c e , 物 品 k − R ‾ 物 品 k ) ) ∑ k = 1 2 S 物 品 5 , 物 品 k = 13 4 + 0.97 ∗ ( 5 − 3.2 ) + 0.58 ∗ ( 4 − 3.4 ) 0.97 + 0.58 = 4.6 P_{Alice,物品5} = \overline{R}_{物品5}+\frac{\sum_{k=1}^{2}(S_{物品5,物品k}(R_{Alice,物品k} - \overline{R}_{物品k}))}{\sum_{k=1}^{2}S_{物品5,物品k}} = \frac{13}{4}+\frac{0.97*(5-3.2)+0.58*(4-3.4)}{0.97+0.58} = 4.6 PAlice,5=R5+k=12S5,kk=12(S5,k(RAlice,kRk))=413+0.97+0.580.97(53.2)+0.58(43.4)=4.6


http://chatgpt.dhexx.cn/article/4QlPFwMm.shtml

相关文章

传统推荐模型——协同过滤

文章目录 UserCF:基于用户的协同过滤什么是CF用户相似度计算最终结果的排序 ItemCF:基于物品的协同过滤UserCF和ItemCF的适用场景CF存在的几个缺点代码实践数据集Python代码 协同过滤,Collaborative Filtering,CF,可以…

协同过滤

协同过滤 什么是协同过滤 协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系 统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行 推荐不同,协同过滤分析用户兴趣,在用户群中找…

协同过滤(Collaborative Filtering)

协同过滤,顾名思义就是协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程。 协同过滤是推荐系统的重要模型之一,推荐系统是用来向用户推荐物品的。协同过滤分为两种: 1.基于用…

数字签名的简单理解

数字签名的简单化理解TOC 数字签名的简单化理解! 对于数字签名,网上有很多大神解释的很详细了,我在这里解释的方法更加通俗易懂,更适用于入门级理解,已经尽可能的浅显,希望可以对大家有用! 评…

浅谈程序的数字签名

理论基础 数字签名它是基于非对称密钥加密技术与数字摘要算法技术的应用,它是一个包含电子文件信息以及发送者身份,并能够鉴别发送者身份以及发送信息是否被篡改的一段数字串。 一段数字签名数字串,它包含电子文件经过Hash编码后产生的数字…

数字签名及应用

内容介绍 常用加密方式数字签名颁发数字证书机构CA 常用加密方式 对称加密 对称加密也称为密钥加密或单向加密,就是使用同一套密钥来进行加密和解密。 常用算法:DES、3DES、AES 优点:算法公开、简单,加密解密容易,加密…

数字签名的过程详解

数字签名的过程详解 1. 数字证书的概念2. 数字签名的过程3. 加密的过程4. 数字签名两大特性5. 用到的部分名词解释 1. 数字证书的概念 数字证书又叫“数字身份证”、“网络身份证”,是由证书认证中心CA发放并经认证中心数字签名,包含公开密钥拥有者以及…

数字签名是什么?

今天,我读到一篇好文章。 它用图片通俗易懂地解释了,"数字签名"(digital signature)和"数字证书"(digital certificate)到底是什么。 我对这些问题的理解,一直是模模糊糊…

数字签名技术及加密算法

最近由于需要使用数字签名,于是了解一下各种算法的利弊及实现 数字签名流程图: ---------BASE64----------- 常见于邮件、http加密,截取http信息,你就会发现登录操作的用户名、密码字段通过BASE64加密的。 BASE加密后产生的字节…

数字签名系列一:签名简介与RSA签名算法

数字签名系列一 写在前面数字签名作用数字签名发展史带属性的数字签名RSA数字签名方案 写在前面 学了一年的数字签名方案,一直都在一个点进行专研,虽然还是有所收获,总感觉还差点感觉,上了一年研究生,还没有对数字签名…

密码学---数字签名和认证协议---数字签名标准

数字签名标准 DSS的基本方式RSA签名过程DSS签名过程 数字签名算法DSA全局公钥用户私钥x用户公钥y用户为待签消息选取的秘密数k签名过程验证过程 数字签名标准(Digital Signature Standard,DSS)是美国公布的联邦信息处理标准,采用SHA和一种新的签名技术的…

数字签名与签名验证过程

1.1 生成数字签名 1 利用RSA算法生成公钥、私钥。私钥由密钥持有者自主保存,公钥可对外发布。 2 准备好待签名的文档。 3 利用哈希算法(HASH),生成待签名文档的摘要。(文档摘要) 4 利用签名者的私钥&am…

什么是数字签名?其安全性从何而来?

一、数字签名简介 数字签名是基于公钥密码体制(非对称密钥密码体制)的。 1.1.基本特征 数字签名必须保证以下三点: 报文鉴别——接收者能够核实发送者对报文的签名;报文的完整性——接收者不能伪造对报文的签名或更改报文内容。…

数字签名的工作原理

数字签名是公钥基础结构的基础部分。当我们说PKI时,一般想到的是数字证书,证书颁发机构(CA),银行使用的Key,以及SSL通信等等。 数字证书,一般都是成对存在的,包含证书的公钥,和证书…

网络安全之数据加密和数字签名技术

一、计算机网络面临的安全性威胁和解决办法 1、计算机网络上的通信面临以下两大类威胁:被动攻击和主动攻击,如下图所示: 2、解决办法,由上图可知: 对于主动攻击,可以采取适当措施加以检测。 对于被动攻击…

一文了解数字签名、数字证书、自签证书

参考 关于自签SSL证书的一些小知识汇总 对于ssl中的pem文件和key 文件的理解 openssl 生成证书 ca.pem client.pem server.pem SSL:证书文件 数字证书原理 数字签名是什么? 数字签名和数字证书的原理解读(图文) 数字签名和数字证书有哪些区别与联…

数字签名算法实现

一、实验目的   掌握利用Hash算法对要传送信息提取消息摘要的方法,理解数字签名的作用及数字签名算法的工作原理,了解多种非对称加密算法都可以用来设计数字签名算法。综合运用前面实验掌握的知识和技术,利用C语言或Java语言设计并实现数字…

数字签名——

数字签名和公钥加密的区别 公钥加密: Alice采用Bob的公钥对消息加密,传给Bob,Bob用自己的私钥解密 数字签名: Alice采用自己的私钥对消息m签名,Alice将消息m和签名发送给Bob收到m和签名后,Bob用Alice的公钥来验证签名的有效性 数…

安全技术 数字签名

(一)介绍 数字签名是一种将相当于现实世界中的盖章、签字的功能在计算机世界中进行实现的技术。使用数字签名可以识别篡改和伪装,还可以防止否认。 通过消息认证码,我们可以识别消息是否被篡改或者发送者身份是否被伪装&#xf…

数字签名技术简介

数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名是非对称密钥加密技术与数字摘要技术的应用数字签名机制作为保障网络信息安全的…