基于用户(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

相关文章
|
3月前
|
数据采集 机器学习/深度学习 算法
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
1月前
|
机器学习/深度学习 算法 机器人
多代理强化学习综述:原理、算法与挑战
多代理强化学习是强化学习的一个子领域,专注于研究在共享环境中共存的多个学习代理的行为。每个代理都受其个体奖励驱动,采取行动以推进自身利益;在某些环境中,这些利益可能与其他代理的利益相冲突,从而产生复杂的群体动态。
175 5
|
1月前
|
机器学习/深度学习 搜索推荐 算法
协同过滤算法
协同过滤算法
76 0
|
10天前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
19天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
25天前
|
算法 数据库 索引
HyperLogLog算法的原理是什么
【10月更文挑战第19天】HyperLogLog算法的原理是什么
41 1
|
1月前
|
机器学习/深度学习 人工智能 算法
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
72 0
[大语言模型-算法优化] 微调技术-LoRA算法原理及优化应用详解
|
1月前
|
机器学习/深度学习 JSON 搜索推荐
深度学习的协同过滤的推荐算法-毕设神器
深度学习的协同过滤的推荐算法-毕设神器
41 4
|
1月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
51 9