基于用户(UserCF)和基于物品(ItemCF)协同过滤算法原理

简介: 大数据的典型应用之一就是推荐系统,淘宝、亚马逊、facebook等等大企业都在使用推荐系统,且推荐系统是它们盈利的相当大的来源。而基于用户的协同过滤算法和基于物品的协同过滤算法是推荐系统中最基本的算法,本文将用非常浅显易懂的语言对这两种算法进行原理剖析。

基于用户的协同过滤算法

概念

首先用一个词就能很好的解释什么叫做基于用户的协同过滤算法:【臭味相投】。虽然是贬义词,但也说明了,具有类似特征的人群,他们喜欢的东西很多也是一样的。因此,在推荐系统中,假设要为A用户推荐物品,可以通过寻找他的“邻居”——与A具有相似兴趣的用户把那些用户喜欢的,而A用户却不曾听说的东西推荐给A

相似度算法

那么问题来了,我们如何判断A用户与哪些用户相似呢?关键就是根据用户过去的行为轨迹,计算用户相似度
目前较多的相似度算法有:
_3

计算用户与用户的相似度

Jaccard公式为我们提供了简单地计算两用户兴趣相似度的方法:
image
【N(u)表示用户u感兴趣的物品集合,N(v)表示用户v感兴趣的物品集合】

为了照顾某些数学全忘光了的同学,解释一下这个公式,分母是两个集合的绝对值相乘,分子是集合的交集的绝对值,集合绝对值是这个集合中元素的个数。假设A用户喜欢{a,b,d},B用户喜欢{a,c},则他俩相似度计算如下:
image

倒排法

但是这么简单粗暴是有问题的,因为很多用户其实完全没有共同喜好的,也就是分子会为0。这么多无意义的计算会给我们增加很大的开销,所以我们应该先做一个预处理,把有关联的用户筛选出来,只计算这些有关联的用户的兴趣相似度。倒排法有效的为我们解决了这个问题:

  • 首先将用户--物品表转化为物品--用户表(倒排表)
  • 根据倒排表画出相似度矩阵(比如倒排表第一行说明AB BC AC有关联,就在矩阵中置1,第二行说明AC有关联,又加1变为了2)

1

矩阵中为0的我们就不需要去计算它们的兴趣相似度了。
得到用户相似度之后,我们开始计算用户对物品的兴趣度。

计算用户对物品的兴趣度

用户u对物品i的感兴趣程度公式如下:

image

S(u, K)是与用户u兴趣最接近的K个用户的集合, N(i)是对物品i有过行为的用户集合,既然要判断u对物品i的兴趣程度,当然是要从兴趣最接近的K个用户中挑出对i有过行为的,所以取交集。 image是用户u和用户v的兴趣相似度, image代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以另其等于1。

上图中,用户B对物品b和d没有过行为,我们来计算用户B对物品b和d的感兴趣程度。

  • 计算B 与 A C D的用户相似度,取前两名,显然是用户C(W=0.5)与用户A(W=0.41)
  • 计算B对物品b的兴趣度:用户A和C都对b有过行为,所以累加,结果0.5+0.41=0.91
  • 计算B对物品d的兴趣度:只有A对d有过行为,因此S(u, K)交N(i)只剩下A,结果0.41

Top-N分析法

得到用户对物品的兴趣度后,我们使用Top-N推荐。

TOP-N分析法就是通过TOP-N算法从研究对象中得到所需的N个数据,并从排序列表中选取最大或最小的N个数据,这就是一个TOP-N算法。即对所有物品进行P(u,i)计算兴趣度后进行降序,取前N个物品推荐给用户

缺陷和改进

看似很完美了~其实还有个问题~
试问:我和XXX都买了英语六级教程,那能说明咱们兴趣一样吗?不一定吧,买六级只是考试必备,对大部分人而言是一种无奈的操作。。。因此,我们要精确判断两人兴趣一样,不应该拿这些热门的物品做决策。冷门的产品更能说明问题。比如,我和XXX都买了java教程,那么应该就能说明我们有共同的兴趣了。所以有了一个更精确的公式:

image

1/log1+|N(i)| 惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响,使得结果更为精确。

基于物品的协同过滤算法

概念

假设某天你购买了机器学习书籍,那么淘宝会给你推荐python书籍。因为机器经过判断得出这两者相似度很高,你既然会喜欢机器学习那么理应喜欢python。

基于物品的协同过滤算法就是给用户推荐那些和他们之前喜欢的物品相似的物品

不过, ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B

计算物品与物品的相似度

image

N(i)表示喜欢i物品的用户集合,N(j)表示喜欢j物品的用户集合。Wij其实就是说明:喜欢i物品的用户中有多少也喜欢j物品,从而得出i和j的相似度。但是如果j是热门商品呢?前面我们说过,以热门商品做决策是不科学的,因此我们应该降低j的权重,所以得出改进的公式:

image

喜欢j的人越多,分母越大,权重更低。

倒排法

跟上面一样,我们要过滤出物品i和j完全没关系的,不做不必要的计算。因为上面详细解释过,这里就粗略的画一下结果图,省略了中间那个物品对用户的图。
1
通过计算得到Wab=0.82,Wac=0.58,Wad=0.58

计算用户对物品的兴趣度

用户u对物品j的感兴趣程度计算公式:

image

此公式与上面基于用户的公式非常相像。S(j,K)表示与j物品最相似的k个物品的集合。N(u)表示用户喜欢的物品集合。Wji表示物品之间的相似度。rui是用户u对物品i的兴趣。(对于隐反馈数据集,如果用户u对物品i有过行为,即可令rui=1。)

Top-N分析

计算出Puj之后,对其排序,取前几名作为推荐物品推荐给用户。盗一张《推荐系统实践》的图,形象的解释下。
image

相关文章
机器学习/深度学习 算法 自动驾驶
1573 0
|
11月前
|
机器学习/深度学习 算法 搜索推荐
从零开始构建图注意力网络:GAT算法原理与数值实现详解
本文详细解析了图注意力网络(GAT)的算法原理和实现过程。GAT通过引入注意力机制解决了图卷积网络(GCN)中所有邻居节点贡献相等的局限性,让模型能够自动学习不同邻居的重要性权重。
1740 0
从零开始构建图注意力网络:GAT算法原理与数值实现详解
|
12月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
368 2
|
算法
离散粒子群算法(DPSO)的原理与MATLAB实现
离散粒子群算法(DPSO)的原理与MATLAB实现
571 0
|
机器学习/深度学习 人工智能 编解码
AI视觉新突破:多角度理解3D世界的算法原理全解析
多视角条件扩散算法通过多张图片输入生成高质量3D模型,克服了单图建模背面细节缺失的问题。该技术模拟人类多角度观察方式,结合跨视图注意力机制与一致性损失优化,大幅提升几何精度与纹理保真度,成为AI 3D生成的重要突破。
1636 0
|
算法 区块链 数据安全/隐私保护
加密算法:深度解析Ed25519原理
在 Solana 开发过程中,我一直对 Ed25519 加密算法 如何生成公钥、签名以及验证签名的机制感到困惑。为了弄清这一点,我查阅了大量相关资料,终于对其流程有了更清晰的理解。在此记录实现过程,方便日后查阅。
1659 0
|
消息中间件 存储 缓存
zk基础—1.一致性原理和算法
本文详细介绍了分布式系统的特点、理论及一致性算法。首先分析了分布式系统的五大特点:分布性、对等性、并发性、缺乏全局时钟和故障随时发生。接着探讨了分布式系统理论,包括CAP理论(一致性、可用性、分区容错性)和BASE理论(基本可用、软状态、最终一致性)。文中还深入讲解了两阶段提交(2PC)与三阶段提交(3PC)协议,以及Paxos算法的推导过程和核心思想,强调了其在ZooKeeper中的应用。最后简述了ZAB算法,指出其通过改编的两阶段提交协议确保节点间数据一致性,并在Leader故障时快速恢复服务。这些内容为理解分布式系统的设计与实现提供了全面的基础。
|
存储 算法 安全
Java中的对称加密算法的原理与实现
本文详细解析了Java中三种常用对称加密算法(AES、DES、3DES)的实现原理及应用。对称加密使用相同密钥进行加解密,适合数据安全传输与存储。AES作为现代标准,支持128/192/256位密钥,安全性高;DES采用56位密钥,现已不够安全;3DES通过三重加密增强安全性,但性能较低。文章提供了各算法的具体Java代码示例,便于快速上手实现加密解密操作,帮助用户根据需求选择合适的加密方案保护数据安全。
929 58

热门文章

最新文章