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

相关文章
|
27天前
|
数据采集 机器学习/深度学习 算法
|
1月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
|
22天前
|
前端开发 算法 JavaScript
React原理之Diff算法
【8月更文挑战第24天】
|
1月前
|
搜索推荐 前端开发 算法
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
本文介绍了一个基于用户画像和协同过滤算法的音乐推荐系统,使用Django框架、Bootstrap前端和MySQL数据库构建,旨在为用户提供个性化的音乐推荐服务,提高推荐准确性和用户满意度。
基于用户画像及协同过滤算法的音乐推荐系统,采用Django框架、bootstrap前端,MySQL数据库
|
10天前
|
机器学习/深度学习 算法 Python
群智能算法:深入解读人工水母算法:原理、实现与应用
近年来,受自然界生物行为启发的优化算法备受关注。人工水母算法(AJSA)模拟水母在海洋中寻找食物的行为,是一种新颖的优化技术。本文详细解读其原理及实现步骤,并提供代码示例,帮助读者理解这一算法。在多模态、非线性优化问题中,AJSA表现出色,具有广泛应用前景。
|
1月前
|
机器学习/深度学习 算法 搜索推荐
【机器学习】机器学习的基本概念、算法的工作原理、实际应用案例
机器学习是人工智能的一个分支,它使计算机能够在没有明确编程的情况下从数据中学习并改进其性能。机器学习的目标是让计算机自动学习模式和规律,从而能够对未知数据做出预测或决策。
42 2
|
1月前
|
机器学习/深度学习 算法 数据可视化
决策树算法介绍:原理与案例实现
决策树算法介绍:原理与案例实现
|
1月前
|
算法
PID算法原理分析及优化
今天为大家介绍一下经典控制算法之一的PID控制方法。PID控制方法从提出至今已有百余年历史,其由于结构简单、易于实现、鲁棒性好、可靠性高等特点,在机电、冶金、机械、化工等行业中应用广泛。 在大学期间,参加的智能汽车竞赛中就使用到了PID经典控制算法,对于智能小车的调试更加的方便。 一、PID原理 PID控制方法将偏差的比例(proportional)、积分(integral)、微分(derivative)通过线性组合构成控制量,对被控对象进行控制。 常规的PID控制系统如图所示: 系统的输入r(t)为控制量的目标输出值,输出y(t)为控制量的实际输出值,e(t)为输出量目标值与实际值
41 1
|
1月前
|
机器学习/深度学习 运维 算法
深入探索机器学习中的支持向量机(SVM)算法:原理、应用与Python代码示例全面解析
【8月更文挑战第6天】在机器学习领域,支持向量机(SVM)犹如璀璨明珠。它是一种强大的监督学习算法,在分类、回归及异常检测中表现出色。SVM通过在高维空间寻找最大间隔超平面来分隔不同类别的数据,提升模型泛化能力。为处理非线性问题,引入了核函数将数据映射到高维空间。SVM在文本分类、图像识别等多个领域有广泛应用,展现出高度灵活性和适应性。
88 2
|
24天前
|
存储 负载均衡 监控
自适应负载均衡算法原理和实现
自适应负载均衡算法原理和实现