推荐系统-协同过滤原理与实现

neilzhang neilzhang     2023-01-14     604

关键词:

一、基本介绍


1. 推荐系统任务

推荐系统的任务就是联系用户和信息一方面帮助用户发现对自己有价值的信息,而另一方面让信息能够展现在对它感兴趣的用户面前从而实现信息消费者和信息生产者的双赢。

2. 与搜索引擎比较

相同点:帮助用户快速发现有用信息的工具

不同点:和搜索引擎不同的是推荐系统不需要用户提供明确的需求而是通过分析用户的历史行为来给用户的兴趣建模从而主动给用户推荐出能够满足他们兴趣和需求的信息。

3. 长尾理论

长尾讲述的是这样一个故事:以前被认为是边缘化的、地下的、独立(艺人?)的产品现在共同占据了一块市场份额,足以可与最畅销的热卖品匹敌。

wiki链接:https://wiki.mbalib.com/wiki/%E9%95%BF%E5%B0%BE%E7%90%86%E8%AE%BA

长尾头部的商品往往代表了绝大多数用户的需求而长尾中的商品往往代表了一小部分用户的个性化需求。因此如果要通过发掘长尾来提高销售额就必须充分研究用户的个性化兴趣。而这正是个性化推荐系统主要解决的问题。
推荐系统通过发掘用户的行为找到用户的个性化需求从而将长尾中的商品准确地推荐给需要它们的用户帮助用户发现那些他们感兴趣但很难发现的商品。

4. 推荐系统应用

· 电子商务

· 电影和视频网站

· 个性化音乐网络电台

· 社交网站

· 个性化阅读

· 个性化邮件

· 个性化广告

5. 推荐系统架构

技术分享图片

二、推荐系统评测


推荐系统评测即评测一个推荐系统是否好用。好的推荐系统不仅仅能够准确预测用户的行为,而且能够扩展用户的视野,帮助用户发现他们可能会感兴趣,但却不那么容易发现的东西,从而通过推荐系统增加了收入效益。例如你预测一个用户将来会买牙刷,预测显然是准确的,但是由于用户暂时不需要或者在需要的时候并没有选择你的商品,这样的话就没有为你增加收入,因此这就不能算得上一次好的推荐。

一个完整的推荐系统一般存在3个参与方:用户、内容提供者、业务前端(Android、ios、web)

技术分享图片

1. 推荐系统实验方法

a、离线实验
离线实验利用离线数据训练并测试推荐模型效果,好处是不需要用户真实参与,可以快速地测试大量算法,但同时也会忽略在线系统带来的因素。
b、用户调查
对一些真实用户做一些有关推荐系统的测试调查,根据用户的反映获取推荐系统的性能指标。它是推荐系统评测的一个重要工具,可以获取离线实验不能得到的用户真实体验,但是其成本较高,需要较多的人力时间来完成。
c、在线实验
在推荐系统正式上线前,可以对系统做典型的AB测试,它通过一定的规则将用户随机分成几组,并对不同组用户采用不同算法,然后统计不同组用户的评测指标,进而分析推荐系统的性能。其优点是可以公平获取不同算法的在线性能指标,缺点是周期较长,需要长时间的实验才能得到可靠的结构。

2. 评测指标——用户满意度

用户满意度是评测推荐系统最重要的指标,只能通过在线实验获得。一般通过对用户行为的统计获得,比如用户点击率、推荐购买率、停留时间等;也可以通过收集用户反馈获得,如让用户评价推荐的物品是否令人满意。

3. 评测指标——预测准确度

预测准确度是推荐系统最重要的离线评测指标。通过离线训练数据训练出用户的行为和兴趣模型,并预测用户的行为,计算预测行为与测试集上的实际行为的重合度作为预测准确度。

a) 评分预测

很多提供推荐服务的网站有一个让用户给物品打分的功能,当知道了用户对物品的评分,就可以从中习得用户的兴趣模型,并预测该用户在将来看到一个他没有评分过的物品时,会给物品评多少分。

评分预测的准确度一般通过均方根误差(RMSE)和平均绝对误差(MAE)计算。

b) TopN 推荐

TopN推荐的准确率一般通过: 准确率(precision)/召回率(recall)度量

令R(u)是根据用户在训练集上的行为给用户做出的推荐列表,T(u)是用户在测试集上的行为列表,那么推荐结果的

召回率定为:

技术分享图片

准确率为:

技术分享图片

这里用更加形象的方法表示,将数据分成四个部分 A,B,C,D
R(u) = A + B; 

T(u) = A + C;

Recall =  A / (A + C)

Precession = A / (A + B)

技术分享图片

4.评测指标——覆盖率

覆盖率描述了推荐系统对物品长尾的发掘能力,高的覆盖率表示推荐系统可以推荐一些长尾部分的物品,这是物品提供商比较关心的。对覆盖率一个简单定义为推荐系统能够推荐出来的物品占总物品I的比例,假设系统用户集合为U,为每个用户u推荐物品为R(u),那么推荐系统覆盖率可以表示为:

5.评测指标——多样性

用户的兴趣是广泛的,因此推荐系统推荐给用户的物品也应该是多样的。比如,用户爱看的书不仅有历史文学书,也可能有心理专业书,且看的比例约为7:3,所以在推荐的时候,也应该考虑为用户推荐这两类书籍,且比例也约为7:3。

6.评测指标——新颖性

新颖性即推荐给用户他们之前不知道的物品,将用户有过行为的物品从推荐表中剔除掉。评测新颖性的最简单方法是利用推荐结果的平均流行度,即推荐的物品的平均热门程度越低,其新颖性越高。

7.其他

 

三、协同过滤介绍


同过滤就是指用户可以齐心协力,通过不断地和网站互动,使自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。

显性反馈:用户明确表示对物品喜好的行为。这要方式是评分和喜欢/不喜欢。

隐形反馈:不能明确反应用户喜好的行为。(购买日志、阅读日志、浏览日志)

. 基于用户的协同过滤算法(UserCF


算法核心:当一个用户A需要个性化推荐时,可以先找到他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没听过的物品推荐给A。

a) 找到和目标用户兴趣相似的用户集合

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

步骤(a)的关键就是计算两个用户的兴趣相似度。这里,协同过滤算法主要利用行为的相似度计算兴趣的相似度。给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度或者通过余弦公式:

             jaccard                                                     余项公式:

技术分享图片            技术分享图片

这个一个行为记录 我们可以根据余弦公式计算如下

技术分享图片     技术分享图片

上述算法很简单但是计算量较大,因为需要所有用户之前的复杂度  n(n-1)/2。 下面这种计算用户相似度算法通过空间换时间。

首先建立物品到用户的倒排表,然后统计每两个用户的公共物品数量(如下图所示)。

技术分享图片

计算u对物品i的感兴趣程序:

技术分享图片

得到用户之间的兴趣相似度后,UserCF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。上面右边公式度量了UserCF算法中用户u对物品i的感兴趣程度:其中,S(u, K)包含和用户u兴趣最接近的K个用户,N(i)是对物品i有过行为的用户集合,Wuv是用户u和用户v的兴趣相似度,Rvi代表用户v对物品i的兴趣,因为使用的是单一行为的隐反馈数据,所以所有的Rvi=1。

上述推荐算法缺陷:

如果两个用户都曾经买过《新华字典》,这丝毫不能说明他们兴趣相似,因为绝大多数中国人小时候都买过《新华字典》。但如果两个用户都买过《数据挖掘导论》,那可以认为他们的兴趣比较相似,因为只有研究数据挖掘的人才会买这本书。换句话说,两个用户对冷门物品采取过同样的行为更能说明他们兴趣的相似度。因此,John S. Breese在论文①中提出了如下公式,根据用户行为计算用户的兴趣相似度:

计算用户相似度的改进算法:

技术分享图片

分子中的倒数惩罚了用户u和用户v共同兴趣列表中热门物品对他们相似度的影响。N(i)是对物品i有过行为的用户集合,越热门,N(i)越大

. 基于物品的协同过滤算法(ItemCF)


算法核心思想:给用户推荐那些和他们之前喜欢的物品相似的物品。

基于物品的协同过滤算法主要分为两步:

第一步:计算物品之间的相似度;

技术分享图片

其中,|N(i)|是喜欢物品i的用户数,|N(j)|是喜欢物品j的用户数,|N(i)&N(j)|是同时喜欢物品i和物品j的用户数。

从上面的定义看出,在协同过滤中两个物品产生相似度是因为它们共同被很多用户喜欢,两个物品相似度越高,说明这两个物品共同被很多人喜欢。

这里面蕴含着一个假设:就是假设每个用户的兴趣都局限在某几个方面,因此如果两个物品属于一个用户的兴趣列表,那么这两个物品可能就属于有限的几个领域,而如果两个物品属于很多用户的兴趣列表,那么它们就可能属于同一个领域,因而有很大的相似度。

(用户活跃度大的用户可能喜欢列表中有很多商品,会影响ItemCf算法计算结果准确性,后面优化算法会增加一个用户活跃度分子)

举例,用户A对物品a、b、d有过行为,用户B对物品b、c、e有过行为,等等;

技术分享图片

依此构建用户——物品倒排表:物品a被用户A、E有过行为,等等;

技术分享图片

建立物品相似度矩阵C:

技术分享图片

其中,C[i][j]记录了同时喜欢物品i和物品j的用户数,这样我们就可以得到物品之间的相似度矩阵W。

在得到物品之间的相似度后,进入第二步。

第二步:根据物品的相似度和用户的历史行为给用户生成推荐列表;

ItemCF通过如下公式计算用户u对一个物品j的兴趣:

技术分享图片

其中,Puj表示用户u对物品j的兴趣,N(u)表示用户喜欢的物品集合(i是该用户喜欢的某一个物品),S(i,k)表示和物品i最相似的K个物品集合(j是这个集合中的某一个物品),Wji表示物品j和物品i的相似度,Rui表示用户u对物品i的兴趣(这里简化Rui都等于1)。

该公式的含义是:和用户历史上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。

下面是一个书中的例子,帮助理解ItemCF过程:

技术分享图片

至此,基础的ItemCF算法小结完毕。

下面是书中提到的几个优化方法:

(1)、用户活跃度对物品相似度的影响

即认为活跃用户对物品相似度的贡献应该小于不活跃的用户,所以增加一个IUF(Inverse User Frequence)参数来修正物品相似度的计算公式:

技术分享图片

用这种相似度计算的ItemCF被记为ItemCF-IUF。

ItemCF-IUF在准确率和召回率两个指标上和ItemCF相近,但它明显提高了推荐结果的覆盖率,降低了推荐结果的流行度,从这个意义上说,ItemCF-IUF确实改进了ItemCF的综合性能。

(2)、物品相似度的归一化

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

技术分享图片

最终结果表明,归一化的好处不仅仅在于增加推荐的准确度,它还可以提高推荐的覆盖率和多样性。

用这种相似度计算的ItemCF被记为ItemCF-Norm。

参考:

https://www.cnblogs.com/qwj-sysu/p/4368874.html

https://blog.csdn.net/u011630575/article/details/78649331

推荐系统实战








毕业设计-题目:基于协同过滤的电影推荐系统-django在线电影推荐协同过滤(代码片段)

...题背景和目的3协同过滤算法原理3.1基于用户的协同过滤推荐算法实现原理3.1.1步骤13.1.2步骤23.1.3步骤33.1.4步骤44系统实现4.1开发环境4.2系统功能描述4.3系统数据流程4.3.1用户端数据流程4.3.2管理员端数据流程4.4系统功能设计5主要... 查看详情

推荐系统-协同过滤

一、基本介绍1.推荐系统任务推荐系统的任务就是联系用户和信息一方面帮助用户发现对自己有价值的信息,而另一方面让信息能够展现在对它感兴趣的用户面前从而实现信息消费者和信息生产者的双赢。2.与搜索引擎比较相同点... 查看详情

个性化推荐系统原理介绍(基于内容过滤/协同过滤/关联规则/序列模式)

 个性化推荐根据用户兴趣和行为特点,向用户推荐所需的信息或商品,帮助用户在海量信息中快速发现真正所需的商品,提高用户黏性,促进信息点击和商品销售。推荐系统是基于海量数据挖掘分析的商业智能平台,推荐主... 查看详情

python+django+mysql志愿者活动推荐系统基于用户项目内容的协同过滤推荐算法simplewebactivitycfrspythonpython实现协同过滤推荐算法实现源代码下载

Python+Django+Mysql志愿者活动推荐系统个性化活动推荐基于用户、项目、内容的协同过滤推荐算法SimpleWebActivityCFRSPythonpython实现协同过滤推荐算法实现源代码下载一、项目简介1、开发工具和实现技术Python3.8,Django3,mys... 查看详情

毕业设计之---基于协同过滤的商品推荐系统(代码片段)

简介推荐系统,是当今互联网背后的无名英雄。我们在某宝首页看见的商品,某条上读到的新闻,某度上的搜索列表,甚至在各种地方看见的广告,都有赖于推荐算法和系统.本片文章讲述有哪些常用的推荐算法,协同过滤推荐算... 查看详情

python+django+mysql个性化购物商城推荐系统电子商务推荐系基于用户项目内容的协同过滤推荐算法webshoprsmpythonpython实现协同过滤推荐算法实现源代码下载

Python+Django+Mysql个性化购物商城推荐系统电子商务推荐系基于用户、项目、内容的协同过滤推荐算法WebShopRSMPythonpython实现协同过滤推荐算法实现源代码下载一、项目简介1、开发工具和实现技术Python3.8,Django3,mysql8&#... 查看详情

基于协同过滤推荐算法的图书推荐研究

...同过滤算法的基本思想和实现步骤,以及应用于实际图书推荐项目中的效果和产生的问题。基于物品的协同过滤算法的基本原理是和某用户历史上感兴趣的物品,越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。... 查看详情

推荐系统案例基于协同过滤的电影推荐(代码片段)

案例--基于协同过滤的电影推荐1.数据集下载2.数据集加载3.相似度计算4.User-BasedCF预测评分算法实现5.Item-BasedCF预测评分算法实现前面我们已经基本掌握了协同过滤推荐算法,以及其中两种最基本的实现方案:User-BasedCF和It... 查看详情

基于sparkmllib平台的协同过滤算法---电影推荐系统

协同过滤算法概述 基于模型的协同过滤应用---电影推荐实时推荐架构分析          一、协同过滤算法概述      本人对算法的研究,目前还不是很深入,这里简单的介... 查看详情

个性化推荐系统推荐算法(代码片段)

推荐算法1.推荐模型构建流程2.最经典的推荐算法:协同过滤推荐算法(CollaborativeFiltering)3.相似度计算(SimilarityCalculation)4.协同过滤推荐算法代码实现5.使用协同过滤推荐算法对用户进行评分预测6.基于模型的方法推荐... 查看详情

个性化推荐系统推荐算法(代码片段)

推荐算法1.推荐模型构建流程2.最经典的推荐算法:协同过滤推荐算法(CollaborativeFiltering)3.相似度计算(SimilarityCalculation)4.协同过滤推荐算法代码实现5.使用协同过滤推荐算法对用户进行评分预测6.基于模型的方法推荐... 查看详情

推荐系统基础-纪要(代码片段)

推荐系统纪要推荐概念Lambda架构介绍推荐算法架构推荐模型构建流程协同过滤思路介绍相似度计算使用不同相似度计算方式实现协同过滤协同过滤基于模型的算法推荐系统的评价推荐系统的冷启动基于内容的推荐基于内容的推荐... 查看详情

java推荐系统-基于用户和物品协同过滤的电影推荐

...xff08;pearson)相关系数计算相关系数来实现千人千面的推荐系统。协同过滤算法协同过滤推荐算法是诞生最早,并且较为著名的推荐算法。主要的功能是预测和推荐。协同过滤(CollaborativeFiltering,简写CF)是推荐系统最重要得... 查看详情

19推荐系统2矩阵分解算法——协同过滤的进化

文章目录1、矩阵分解算法的原理2、矩阵分解的求解过程3、消除用户和物品打分的偏差4、矩阵分解的优点和局限性针对协同过滤算法的头部效应较明显、泛化能力较弱的问题,矩阵分解算法被提出。矩阵分解在协同过滤算法... 查看详情

python+django+mysql个性化二手车推荐系统汽车推荐系统基于用户项目内容的协同过滤推荐算法webcarcfrspythonpython实现协同过滤推荐算法实现源代码下载

Python+Django+Mysql个性化二手车推荐系统汽车推荐系统基于用户、项目、内容的协同过滤推荐算法WebCarCFRSPythonpython实现协同过滤推荐算法实现源代码下载一、项目简介1、开发工具和实现技术Python3.8,Django3,mysql8,... 查看详情

机器学习之协同过滤算法(推荐系统)

...感悟,转载请注明出处~  简介  很多网站都有推荐系统,向我们推荐我们想要地或者有可能需要的信息,那么它是怎么实现的呢?因为它们都采用了推荐算法,在现今的推荐算法之中,最被大家广泛认可和采用的是协... 查看详情

机器学习算法原理解析——协同过滤推荐(代码片段)

1. CF协同过滤推荐算法原理及应用1.1 概述什么是协同过滤(CollaborativeFiltering,简称CF)?首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围id朋友,看看最近有什么... 查看详情

基于物品协同过滤实现商品推荐系统(代码片段)

...日志数据。实现用户进入APP之后第一页显示商品的个性化推荐。ps:当前阶段,显示数据为随机选取。二、思考1、因为是某一品类的特殊电商平台,卖的商品几百种,但是用户几十万。这种情况,考虑使用ItemCF,至于为什么不是Us... 查看详情