推荐系统从入门到入门(1)——推荐系统综述与协同过滤

news2024/11/24 16:51:10

    本系列博客总结了不同框架、不同算法、不同界面的推荐系统,完整阅读需要大量时间(又臭又长),建议根据目录选择需要的内容查看,欢迎讨论与指出问题。

目录

系列文章梗概

系列文章目录

一、问题背景介绍

1.推荐算法与关联分析

2.推荐系统动机与简介

3.推荐系统架构

3.1 推荐系统分层架构

3.2 推荐系统形式架构

4.推荐系统评估

4.1 推荐系统分维度评估

4.2 推荐系统分状态评估

4.2.1 在线评估

4.2.2 离线评估

4.3 推荐系统评估综述

5.推荐系统应用

6.问题引入

6.1 电影推荐系统

6.2 数据集介绍

二、推荐系统中的算法

1.算法分类综述

2.协同过滤

2.1 协同过滤简介

2.2 基于邻域(内存)的协同过滤

2.2.1 原理简介

2.2.2 相似度度量

2.3 基于模型的协同过滤

2.3.1 基于关联数据挖掘的协同过滤

2.3.2 基于矩阵分解的协同过滤

2.4 协同过滤原理补充与方法对比

2.4.1 协同过滤信息源

2.4.2 协同过滤评估

2.4.3 协同过滤对比


系列文章梗概

    本次大作业主要是以电影推荐系统为例,介绍并实践不同框架下推荐系统的构建。在问题背景介绍部分,首先从推荐算法与关联分析引入,通过推荐系统的动机、架构、评估、应用详解了推荐系统,并对电影推荐系统做了定义与数据集介绍。在推荐系统的算法部分,先分类综述了推荐算法,随后详解了不同类型的协同过滤算法并在本地不同框架下做了推荐实践。在MapReduce部分,首先通过背景与全流程详解了MapReduce的原理,并通过WordCount实现了配置与简单应用,后续完成了基于MapReduce的电影推荐系统构建。在Spark部分,首先通过生态与全流程详解了Spark的原理,后续完成了基于Spark的电影推荐系统。在对比分析部分,分别从原理、数据处理方式、性能等对比MapReduce与Spark框架,并基于两个构建出的推荐系统做性能对比验证,并总结了两种框架的优缺点与选择标准与依据。在方法补充与实践部分,拓展了协同过滤之外的其他推荐算法并实际构建出了对应的电影推荐系统。在系统界面构建部分,简述了系统界面的设计,详解了不同框架、不同数据集下的数据可视化,并分别在Web、APP、Uni-app上构建了相对完整的电影推荐系统,在总结部分,对一些实验趣事与结论进行了补充。参考部分根据类别划分,汇总了本次实验的参考文献与资料。

系列文章目录

第一章 推荐系统从入门到入门——推荐系统综述与协同过滤

一、问题背景介绍

    推荐系统是大数据、人工智能等交叉领域经典的一个问题,在多年的研究中跟据不同需求、不同原理发展出了多种基于机器学习、深度学习的推荐算法,并适配多种系统框架。在对系统构建之前,在本章先对相关问题背景进行引入。

“啤酒与尿布”的故事

    年轻爸爸去超市购买尿布时,经常会买点啤酒犒劳自己。因此,沃尔玛将这两种商品一起销售,最终获得了更好的销量。

1.推荐算法与关联分析

    由“啤酒与尿布”的故事可知,物品(数据)之间在多种层面是存在一定联系的,因而通过找到这种联系给对应的人(物)推荐对应的数据,实际上就是推荐算法的核心——关联分析

    关联分析是指在交易数据、关系数据或其他信息载体中,查找存在于项目集合或对象集合之间的频繁模式、关联、相关性或因果结构。本质上就是在不同维度上寻找数据间的联系,根据不同的关联分析方式与指标,设计出了很多经典的推荐算法。在本部分以三个常用的分析指标为例简述关联分析评估,总结于表1:

表1 几种常见的关联分析指标

指标

解释

支持度

A商品和B商品同时被购买的概率,或者说某个商品组合的购买次数占总商品购买次数的比例

置信度

指购买A之后又购买B的条件概率

提升度

先购买A对购买B的提升作用

2.推荐系统动机与简介

    随着当今技术的飞速发展,数据量也与日俱增,用户面对大量数据信息的时候,无法获得对自己真正有用(感兴趣)的部分。正是为了解决信息过载(Information overload)的问题,人们提出了推荐系统。

    在1997年Resnick和Varian的定义中,推荐系统是“它是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助用户完成购买过程”,如图1所示:

图1 推荐系统核心

    由推荐系统的原理与流程分析,实际上推荐系统就是通过用户偏好(历史行为、社交关系、兴趣点等信息)去预测用户对某个他/她没有使用过的物品/服务的喜欢程度,并根据某些规则向用户推荐。其核心任务主要是把用户和信息关联起来,对于常见的“商家<—>用户”产品工作流,推荐系统的意义如下:

  1. 对用户而言:推荐系统可以帮助用户找到(可能)喜欢的(新)物品/服务,帮忙进行决策
  2. 对商家而言:可以给用户提供个性化的服务,提高用户信任度,关注。增加营利收益

    补充:提到推荐系统,我们常常会联想到搜索引擎,两种技术都是为了解决信息过载问题,但两者是针对不同的需求,具体如下:

    搜索引擎更倾向于人们有明确的目的,可以将人们对于信息的寻求转换为精确的关键字,然后交给搜索引擎最后返回给用户一系列列表,用户可以对这些返回结果进行反馈。

    而推荐系统(引擎)更倾向于人们没有明确的目的,或者说他们的目的是模糊的。此时推荐系统通过用户的偏好来送给推荐算法,然后推荐系统运用推荐算法来产生用户可能感兴趣的项目列表。

    其中,长尾理论(人们只关注曝光率高的项目,而忽略曝光率低的项目)可以很好解释推荐系统的存在,如图2所示。试验表明位于长尾位置的曝光率低的项目产生的利润不低于只销售曝光率高的项目的利润。推荐系统正好可以给所有项目提供曝光的机会,以此挖掘长尾项目的潜在利润。

图2 长尾理论

3.推荐系统架构

    由2中推荐系统简介可知,推荐系统是根据用户偏好给用户推荐数据的系统,核心问题是海量数据中的数据选择推荐算法的设计与实现。本部分针对推荐系统的系统构建部分做简述。

3.1 推荐系统分层架构

    本质上,推荐系统是一种信息过滤系统。通常分为:召回、排序、重排序这3个环节,每个环节逐层过滤,最终从海量的物料库中筛选出几十个用户可能感兴趣的物品推荐给用户,分阶段过滤流程样例如图3所示,详细分层架构样例如图4所示:

图3 推荐系统分阶段过滤样例

    分析:如图3所示,通过分阶段过滤,实现了信息的筛选(根据对应推荐算法原理与标准),最终有效解决了信息过载与数据推荐两大问题。

图4 推荐系统分层架构图

    如图4所示,为推荐系统一般的分层架构图,其中各层的主要作用总结如表2:

表2 推荐系统架构层级作用总结

层级名称

主要作用

数据源

推荐算法所依赖的各种数据源

计算平台

负责对底层的各种异构数据进行清洗、加工,离线计算和实时计算

数据存储层

存储计算平台处理后的数据,根据需要可落地到不同的存储系统中

召回层

包括各种推荐策略或者算法,比如经典的协同过滤,基于内容的召回,基于向量的召回,用于托底的热门推荐等

融合过滤层

触发多路召回,由于召回层的每个召回源都会返回一个候选集,因此这一层需要进行融合和过滤

排序层

利用机器学习、深度学习等模型,以及更丰富的特征进行重排序,筛选出更小、更精准的推荐集合返回给上层业务

    分析:如图4与表2所示,从数据存储层到召回层、再到融合过滤层和排序层,候选集逐层减少,但是精准性要求越来越高,因此也带来了计算复杂度的逐层增加,这个便是推荐系统构建中的最大挑战,即特征(如何做信息筛选)算法(如何利用信息)

    结合图4中的架构图,从特征与算法拆解推荐系统,核心功能与技术方案如图5所示:

图5 推荐系统(引擎)核心功能与技术方案

    分析:如图5所示,如果从特征与算法的角度分析推荐系统,特征包含离线与实时特征,需要不同的框架模型去计算处理,算法主要包含召回与排序,各部分作用在表2中有详解。

3.2 推荐系统形式架构

    3.1中从分层架构拆解了推荐系统,若从形式上(输入、输出等显式信息)解析推荐系统,系统架构如图6所示:

图6 推荐系统形式架构样例

    如图6所示,只从形式(使用)上去解析推荐系统,其可以高度概括为f(U,I,C),这个极简定义源于推荐系统核心要义:基于用户(User)+物品(Item)+场景(Context)信息,从系统中的物品库中,给对应的用户推荐相应的物品。对推荐系统形式架构详解如下:

    由上述论述可知,推荐系统的形式化输入为user(用户)+ item(物品/服务)+context(信息,一般是评价,可理解为review,输入解析总结如表3。

    而推荐系统的形式化输出一般为推荐列表(top-n)+推荐理由(根据不同算法原理选择有所不同),输出解析总结如表4:

表3  推荐系统形式输入解析

1User & user Profile(用户画像)

  • 描述一个用户的 “个性”
  • 两种构建 (用户画像)
    • 与item Profile 类似,如用户的性别、年龄、年收入、活跃时间
      • 难以与item 建立具体的联系
      • 隐私问题
      • 很少直接使用
    • 利用item Profile 构建User Profile
      • 信息检索(IR)

2Item(物品) & Item Profile(物品对应特征)

  • 电影: 类别、导演、主演、国家等
  • 新闻: 标题、本文、关键词、时间等

3Context/Reviewuser item 的评价)

  • 最简单的Review:打分(Rating)
    • 一般是 1 - 5 的星级
  • 其他Review
    • 评论
    • 评分
    • 标签

表4  推荐系统形式输出解析

1、推荐列表(TOP-N)

  • 按照排序给出对该用户的推荐

2、推荐理由:

  • IR(信息索引) 系统不同
  • 基于统计
    • 比如购买了某物品的用户有90%也购买了该物品。(找图)
    • 该物品在某类别中人气最高
  • 重要性
    • 解决推荐的合理性问题
    • 受到越来越多的重视

4.推荐系统评估

    在熟悉推荐架构,构建系统成功(后文详解构建步骤)后,要对推荐系统进行效果评估,从状态上分为在线评价与离线评价两种方式,从维度上分为用户维度、平台维度、系统维度等,本部分对常用的几种评估方式与指标做简介与解析。

4.1 推荐系统分维度评估

    本部分将从不同维度介绍几种常见的推荐系统评估方式与指标,总结如表5所示:

表5  推荐系统分维度评估方式与指标

1、用户维度(诉求:更方便、快捷地发现自己想要/喜欢的“目标产品”):

  • 准确度:“目标产品”是不是用户喜欢的
  • 新颖性:“目标产品”是否让用户感兴趣同时感到新奇,指标:\small N(L)=\frac{1}{M L} \sum_{u} \sum_{\alpha \in o_{R}^{u}} k_{\alpha}
  • 多样性:“目标产品”是否是多样的

2、平台方维度(对接产品提供方与用户,诉求:利益与用户留存):

  • 用户行为相关指标:用户对于系统的满意度、留存率等
  • 商业变现相关指标:系统是否为平台带来利润,利率等
  • 产品提供方相关指标:系统对于产品合作、宣发等是否有促进作用

3、系统维度(算法体系闭环,为用户提供服务):

  • 准确性:评价算法推荐的产品是否准确,指标有多种(MAEMSE等)
  • 实时性:推荐系统是否能根据用户变化的兴趣即时推荐
  • 鲁棒性:对于不同应用场景,系统是否具有一定泛化能力
  • 抗高并发能力:系统能否在多用户、高并发的情况下较好地完成资源调度与推荐任务

4、产品提供方维度(为平台、用户提供产品,诉求:提高产品销量、口碑):

  • 覆盖率:指算法向用户推荐的商品能覆盖全部商品的比例
  • 长尾挖掘能力:系统是否能将长尾产品推荐给对应需求用户

4.2 推荐系统分状态评估

    本部分将从不同状态介绍几种常见的推荐系统评估方式与指标,具体如下:

4.2.1 在线评估

    在线评估其实就是设计在线用户实验,根据用户在线实时反馈或事后问卷调查等结果来衡量推荐系统的表现

    目前最常用的在线评估方法之一是A/B测试,A/B测试核心就是为了同一个目标制定两个方案,一部分用户使用A方案,另一部分用户使用B方案,记录下用户的使用情况,看哪个方案更符合设计目标。它的核心思想是:1) 多个方案并行测试;2) 每个方案只有一个变量不同;3) 以某种规则优胜劣汰

    而对于A/B测试评估指标一般与线上服务核心指标保持一致,样例如下:

1)电商类推荐模型:点击率、转化率、客单价(用户平均消费金额)

2)新闻类推荐模型:留存率(x日后还活跃的用户数/x日前的用户个数)、平均停留时长、平均点击个数

3)视频(电影)类推荐模型:播放完成率(播放时长/视频时长)、平均播放时长、播放总时长

4.2.2 离线评估

    离线测评即是根据待评价的推荐系统在实验数据集上的表现,然后再根据一些评价指标(表5与其他相关指标)来衡量推荐系统的质量,一般推荐系统模型训练与模型评估流程如图7所示:

图7 推荐系统模型训练与离线评估

    在表5中对不同维度下的常见指标做了概念简述,在本部分对几种常用指标(离线评估)做具体数学定义,详情如下:

4.2.3 分状态评估对比

对于推荐系统的分状态评估,在4.2.1中分析了在线评估,在4.2.2中分析了离线评估,在本部分对两种评估的优点与局限做总结,如表6所示:

表6 推荐系统分状态评估对比总结

状态

优点

局限

在线评估

1.评价结果的主观性

2.对于所需评价的精准收集

1.评估方式、问题设计到实现复杂

2.人力、时间成本大

离线评估

1.省时省力,成本较低

2.数据量大,系统泛化能力更强

1.数据集的稀疏性限制了适用范围

2.评价结果的客观性(无法真正确定用户对系统的评价)

3.难以找到离线评价指标和在线真实反馈

之间的关联关系

4.3 推荐系统评估综述

    4.1与4.2中从不同的两个角度定义与解释了多种推荐系统常用评估指标,本部分总结如表7:

表7 推荐系统评价指标简表

    如表6所示,单独使用在线评估与离线评估都存在一定局限,故在实际工程化的推荐系统中一般是两种状态迭代评估,流程样例如图8所示:

图8 实际推荐系统评估流程

5.推荐系统应用

    在了解完推荐系统简介、架构、评估后,在本部分对于推荐系统的几种常见应用场景做介绍。

    在谈具体应用前,应先对常见分类,推荐系统的应用场景通常分为以下两类:

  • 基于用户维度的推荐:根据用户的历史行为和兴趣进行推荐
  • 基于物品维度的推荐:根据用户当前浏览的标的物进行推荐

    补充:从功能(形式)上来说,一般有个性化推荐、相关推荐、热门推荐三种。

    而对于推荐系统的具体应用,我们知道推荐系统是为了解决信息过载问题存在的,理论上存在海量数据的地方就存在推荐系统。推荐系统的常见应用场景包括:电子商务、咨询网页、音乐电影平台等,样例如图9所示:

图9 推荐系统应用样例

6.问题引入

    在了解完推荐系统相关概念后,在后续要使用不同框架、不同算法去实践构建推荐系统。在本实验中将以电影推荐系统为例,数据集选择为Movielens,在本部分做问题引入。

6.1 电影推荐系统

    电影推荐系统顾名思义,就是用户(user)是观影人,物品/数据(item)是电影,信息(context)是电影评价的推荐系统。样例如图10所示:

图10 电影推荐系统样例

    补充:图10的四种推荐方式是推荐系统的四种常见范式,概念详解如下:

(1)完全个性化范式(左上):为每个用户提供个性化的内容,每个用户推荐结果都不同

2群组个性化范式(右上):首先将用户分组(根据用户的兴趣,将兴趣相似的归为一组),每组用户提供一个个性化的推荐列表,同一组的用户推荐列表一样,不同组的用户推荐列表不一样

3非个性化范式(左下):为所有用户提供完全一样的推荐

4标的物关联标的物范式(右下):为每个标的物关联一组标的物,作为用户在访问标的物详情页时的推荐,每个用户都是相同的标的物

    本实验目标:以不同框架(本地、Mapreduce、Spark等)、不同语言(Java、Scala、Python)、不同算法(协同过滤、CNN、基于内容等)、不同评估标准(准确率、覆盖率、ROC曲线等)构建一个基于Movielens数据集的电影推荐系统,做一定的数据可视化,并使用docker搭建Web服务器。

6.2 数据集介绍

    本实验使用数据集为Movielens,官方地址:MovieLens | GroupLens,在本部分对数据集做介绍。

    MovieLens是电影评分的集合,有各种大小,覆盖大量用户与电影。包含多个用户对多部电影的评级数据(ratings.dat),也包括电影元数据信息(movies.dat)和用户属性信息(users.dat)。部分数据展示如图11所示:

图11 MovieLens数据展示样例

二、推荐系统中的算法

    在上一章中我们介绍了推荐系统的基本概念、架构、评估、应用场景,在本章中会对推荐系统中的算法做详解,尤其是本实验最着重使用的协同过滤算法,并在本地使用一些相关算法进行电影推荐系统的构建。

1.算法分类综述

    由第一章可知,推荐系统中最重要的部分之一就是推荐算法的设计,按算法分类,一般可将推荐系统分为协同过滤、基于内容、混合、流行度、非传统5类,总结如表8所示:

表8 推荐算法分类综述

1、协同过滤推荐算法:

  • 简介:通过在用户的一系列行为中寻找特定模式来产生用户特殊推荐
  • 输入:仅仅依赖于惯用数据(例如评价、购买、下载等用户偏好行为)
  • 类型:
    • 基于邻域(内存)的协同过滤(基于用户和基于项(物品))
    • 基于模型的协同过滤(矩阵因子分解、受限玻尔兹曼机、贝叶斯网络等等)

2、基于内容的推荐算法:

  • 简介:向用户推荐和其过去喜欢项的内容(例如元数据、描述、话题等等)相似的项
  • 输入:仅仅依赖于项和用户的内容/描述(除了惯用数据)
  • 类型:
    • 信息检索(例如 tf-idf 和 Okapi BM25)
    • 机器学习(例如朴素贝叶斯、支持向量机、决策树等等)

3、混合推荐算法

  • 简介:综合利用协同过滤推荐算法和基于内容的推荐算法各自的优点同时抵消各自的缺点
  • 输入:同时使用用户和项的内容特性与惯用数据,同时从两种输入类型中获益
  • 类型:
    • 加权、交换、混合、特性组合、案列、特征增强、元层次

4、流行度推荐算法

  • 简介:这是一种推荐流行项的方法(例如最多下载、最多看过、最大影响的项)
  • 输入:使用惯用数据和项的内容(例如类目)

5、非传统推荐算法

  • 简介:非上述四类推荐算法,基于其他高级特征
  • 类型:
    • 深度学习、学习等级、Multi-armed bandits(探索/开发)、上下文感知推荐
    • 张量分解、分解机、社会推荐

    补充:表8简单总结了不同类的推荐算法,但每一类的算法下基于原理与评估指标又细分为了许多不同的推荐算法。

    对于不同类别的推荐算法均存在一定的优点与局限,如协同过滤不需要用户和项(物品),简单且在大部分场景中可以产生不错的结果,但存在冷启动问题,且会有流行度偏见(长尾存在时表现不好)等问题,而对于非传统推荐算法又存在可解释性不强、缺乏工具支持等问题。另外,使用不同系统框架与计算逻辑对同一个系统实现也有不同程度的影响。

    综上所述,没有一个或一类推荐算法构成的系统可以完美适应各种应用场景。在选择推荐算法时应从数据源、计算框架、用户与项、实现逻辑、需求等多维分析,最终择优选择。

2.协同过滤

    本次实验主要目标是实践不同框架下的基于协同过滤的推荐系统并进行效果对比,故本部分对于协同过滤进行详解。

2.1 协同过滤简介

    协同过滤(collaborative filtering),包括协同和过滤两个操作。所谓协同就是利用用户群体的行为来做决策(推荐)。对于推荐系统来说,即通过用户的持续协同作用,最终给用户的推荐会越来越准。而过滤,就是从可行的决策(推荐)方案(标的物)中将用户喜欢的方案(标的物)找(过滤)出来。

    综上,协同过滤的核心思路是通过用户群体的行为来找到某种相似性,通过该相似性来为用户做决策和推荐

    由于协同过滤本质上还是推荐系统的一个模块,因此依然符合推荐系统的形式化架构(图6),故协同过滤一般利用“用户-项目评分矩阵”进行推荐,样例如图12所示:

图12 用户-项目评分矩阵

    补充:在推荐系统中根据用户对项目的评分可以得到 “用户-项目评分矩阵”,其中矩阵中的值表示用户对项目的评分,“-”表示用户未对项目进行评分。实际场景中通常只存在用户对少量项目的评分,因此矩阵往往非常稀疏。

    而对于协同过滤推荐过程,实际上是与推荐系统形式相呼应的,一般过程如图13所示,分为以下两步:

(1) 系统将整个空间表示为二维矩阵。在二维矩阵R中,U和I分别对应用户和项目。Rij是用户Ui对项目Ij的评分。如果用户未对项目评分则项目值设为0。

(2) 使用矩阵R预测用户i对项目j的评分,以便为用户可能喜欢的N个项目做出推荐。

图13 协同过滤推荐一般过程

    对于协同过滤的类别,根据不同的模式与指标分为两大类协同过滤,分别是基于邻域(内存)的协同过滤基于模型的协同过滤,详解如下。

2.2 基于邻域(内存)的协同过滤

    基于内存的协同过滤方法一般采用最近邻技术,利用用户的历史喜好信息计算用户/项目之间的距离, 然后利用目标用户的邻居用户对商品/喜爱商品相似商品评价的加权值预测目标用户对特定商品的喜好程度,推荐系统根据喜好程度对目标用户进行推荐。而根据参照物的不同(用户或物品),又分为基于用户(UserCF基于项目/物品(ItemCF的两种协同过滤。

2.2.1 原理简介

    基于用户的协同过滤根据用户之间的评分行为相似度预测用户评分; 基于项目的协同过滤根据预测项目与用户实际选择项目之间的相似度预测用户评分,两种方法原理对比可视化如图14所示:

图14 基于内容的协同过滤方法原理对比

    由于这两种方法的原理不同,因此在不同应用场景中的表现不同。基于用户的推荐更社会化,反映用户所在的兴趣群体中物品的热门程度; 基于项目的推荐更个性化,反映用户自己的兴趣传承。具体对比如表9所示:

表9 基于内存的协同过滤方法对比

2.2.2 相似度度量

    对于协同过滤算法来说,相似度是推荐的核心,故如何度量相似度是一个核心问题。对于基于内存的协同过滤来说,常用方法包括皮尔森相关系数、余弦相似度、杰卡德相似系数以及欧氏距离。这些相似度度量方法没有绝对优劣之分,在不同应用场景下可择优选择或组合使用。本部分以相关系数、余弦相似度为例对相似度度量做定义,详情如下:

1)皮尔森相关系数

    皮尔森相关系数用于度量任意两变量间线性相关的程度,系数值越大表明两者相关性越强(有正负),系数输出范围为[-1,1],定义如式5:

\small \operatorname{sim}(i, j)=\frac{\sum_{x \in I_{i j}}\left(R_{i, x}-\bar{R}_{l}\right)\left(R_{j, x}-\bar{R}_{J}\right)}{\sqrt{\sum_{x \in I_{i j}}\left(R_{i, x}-\bar{R}_{l}\right)^{2}} \sum_{x \in I_{i j}}\left(R_{j, x}-\bar{R}_{J}\right)^{2}}

式5 相关系数定义

    Tips:式5中的R、I与用户-项目评分矩阵(图12)中定义保持一致。

2)余弦相似度

    余弦相似度通过计算两个向量的夹角余弦值来评估它们的相似度,输出范围及参数含义与皮尔森相关系数保持一致,定义如式6:

\small \operatorname{sim}(x, y)=\frac{\sum_{i=1}^{n} R_{x, i} R_{y, i}}{\sqrt{\sum_{i=1}^{n} R^{2}} \sqrt{\sum_{i=1}^{n} R^{2}}} 

式6 余弦相似度定义

    实际上,余弦相似度在应用中存在未考虑不同用户对项目的评分标准存在差异的问题,故提出修正余弦相似度,核心是减去用户对项目的平均评分(中心化),定义如式7:

\small \operatorname{sim}(x, y)=\frac{\sum_{i \in I_{y y}}\left(R_{x, i}-\bar{R}_{X}\right)\left(R_{y, i}-\bar{R}_{Y}\right)}{\sqrt{\sum_{i \in I_{x y}}\left(R_{x, i}-\bar{R}_{X}\right)^{2}} \sqrt{\sum_{i \in I_{x y}}\left(R_{y, i}-\bar{R}_{Y}\right)^{2}}} 

式7 修正余弦相似度定义

2.3 基于模型的协同过滤

    基于模型的协同过滤方法通过建模的方式模拟用户对项目的评分行为。其使用机器学习数据挖掘技术,从训练数据中确定模型并将模型用于预测未知商品评分。常见模型包括聚类模型、贝叶斯模型、矩阵分解等。本部分以关联数据挖掘、矩阵分解为例介绍基于模型的协同过滤过程。

2.3.1 基于关联数据挖掘的协同过滤

    关联度、关联分析等概念与指标在一(1)中有做简介。关联规则挖掘实际上就是基于用户购买商品之间的关联关系预测用户偏好。具体来说,关联规则基于物品维度构思考虑,分析出数据库中 所有包含属性等特征信息模块间的隐藏关联,进而找出满足给定项集支持度和项集置信度的多个模块间存在的所有依赖关系。根据关联规则推荐原理产生的推荐算法步骤如图15所示:

图15 基于关联数据挖掘的协同过滤推荐一般流程

2.3.2 基于矩阵分解的协同过滤

    矩阵分解是推荐系统中最常用的协同过滤模型之一。该模型利用用户-项目评分矩阵(图12)预测用户对项目的评分,通过学习用户潜在向量U和项目的潜在向量V,使U和V内积近似于用户 真实评分X,得到预测的评分R如式8所示:

r_{ij}=u_{i}^{T}v_{j} 

式8 预测评分定义

    其中i是用户索引,j是项目索引,rij表示用户i对项目j的预测评分,u是用户的潜在向量,v是项目的潜在向量。然后计算其损失函数为式9:

L_{\mathrm{MF}}=\|X=R\|^{2}+\lambda\left(\|U\|_{\mathrm{F}}^{2}+\|V\|_{\mathrm{F}}^{2}\right) 

式9 损失函数定义

Tips:其中是第二范式。λ是正则化项(防止过拟合)。

2.4 协同过滤原理补充与方法对比

2.4.1 协同过滤信息源

    协同过滤的信息源大体上满足推荐系统的输入(user+item+context/review),详细来说,协同过滤信息源可分为用户行为、用户标签、上下文信息、社交网络四种,简介如下:

(1)用户行为:显性反馈行为(用户明确表示对物品喜好)与隐性反馈行为(不能明确反应用户喜好的行为(例:页面浏览))

(2)用户标签:联系用户和物品的一些特征

(3)上下文信息:用户所处的上下文(context), 包括用户访问推荐系统的时间、地点、心情等

(4)社交网络:朋友推荐、广告植入等网络传播信息

2.4.2 协同过滤评估

    协同过滤为推荐算法的一种,属于推荐系统的一个模块,故评估方式与推荐系统评估保持一致,主要以准确度、覆盖率、多样性、新颖性等指标评估,在一(4)中有详解。

2.4.3 协同过滤对比

    在2.2与2.3中介绍了基于内存与基于模式的协同过滤,两类方法的优缺点总结如表10:

表10 协同过滤方法的优缺点比较

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业拥有PMO(项目管理办公室)的好处

PMO&#xff08;项目管理办公室&#xff09;&#xff0c;是一个企业内定义和维护项目管理标准的办公室或部门。PMO为项目的执行提供指导和标准。他们创造切实的目标&#xff0c;与整个企业的愿景保持一致&#xff0c;并确保所有目标的实现。 PMO指导以项目模板、标准化流程、…

DoIP协议概述

大家好哈&#xff0c;我是穿拖鞋的汉子&#xff01; 伴随着需求不断提升&#xff08;车身数据传输速率和带宽需求&#xff09;&#xff0c;为了满足需求将以太网引进到车载网络中。车载以太网在诊断传输层的应用协议是ISO 13400&#xff08;Diagnostic On IP—DoIP&#xff09;…

模型实战(1)之YOLOv5 实现目标检测+训练自己的数据集

模型实战&#xff08;1&#xff09;之YOLOv5 实现目标检测训练自己的数据集 写一个小总结吧&#xff0c;关于yolov5使用可以参考我的两外两篇博文&#xff1a; 1.YOLOV5算法一之Windows10下yolov5安装测试并训练自己的数据集 2.YOLOV5算法二之数据集转换及自动划分训练集与测试…

代理模式之提出问题和代理模式的概念

代理模式之提出问题和代理模式的概念 1. 提出问题 ①现有代码缺陷 针对带日志功能的实现类&#xff0c;我们发现有如下缺陷&#xff1a; 对核心业务功能有干扰&#xff0c;导致程序员在开发核心业务功能时分散了精力 附加功能分散在各个业务功能方法中&#xff0c;不利于统一…

docker创建带有用户密码认证和web可视化界面的私有仓库

docker-registry的搭建 有时候使用Docker Hub这样的公共仓库可能不方便&#xff0c;用户可以创建一个本地仓库供私人使用。比如&#xff0c;基于公司内部项目构建的镜像。 docker-registry是官方提供的工具&#xff0c;可以用于构建私有的镜像仓库。 安装运行docker-registry…

Go语言设计与实现 -- 上下文

我们先来看一下context.Context的接口&#xff1a; // A Context carries a deadline, a cancellation signal, and other values across // API boundaries. // // Contexts methods may be called by multiple goroutines simultaneously. type Context interface {// Deadl…

【TypeScript】TS接口类型(三)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

modnet:real-time trimap-free portrail matting via objective decomposition

目前抠图&#xff08;Image Matting&#xff09;的主流算法有哪些&#xff1f; - 知乎什么是抠图对于一张图I&#xff0c; 我们感兴趣的人像部分称为前景F&#xff0c;其余部分为背景B&#xff0c;则图像I可以视为F与B的加权…https://www.zhihu.com/question/68146993/answer/…

SpringCloud-Gateway配置及持久化、过滤器、异常处理

文章目录yml配置代码配置持久化数据结构predicates(断言) 和filters&#xff08;过滤&#xff09;新增配置说明相关接口全局过滤器局部过滤器全局异常处理gateway不能和web一起使用 需要排除掉<dependency><groupId>org.springframework.cloud</groupId><…

【Unity】Delegate, Event, UnityEvent, Action, UnityAction, Func 傻傻分不清

【Unity】Delegate, Event, UnityEvent, Action, UnityAction, Func 傻傻分不清Delegate 委托&#xff0c;函数指针一个简单的例子&#xff1a;一对一依赖一个简单的例子&#xff1a;一对多依赖所以话说……委托有啥用呢&#xff1f;事件 Event&#xff0c;特殊的委托UnityEven…

Failed to read artifact descriptor for XXX.jar错误分析

今天遇到极其恶心的坑&#xff0c;自己定义编写的工具类&#xff0c;之前使用一直没有问题&#xff0c;正常引入pom文件中&#xff0c;也能正常的使用工具类中自建类。今天就是无法导入包&#xff0c;报错信息如下。 Failed to read artifact descriptor for com.yuxuntoo.www…

JavaScript篇.day03-循环结构(while, for)

目录 1.循环结构 2.例题 (1)奇数乘积(while/do-while) (2)水仙花数(while) (3)最大公约数(for) (4)最小公倍数(for) (5)打印星星(for) (6)乘法表(for) 1.循环结构 循环结构在程序中可执行多次循环结构有while循环, do-while循环, for循环 名称执行顺序循环执行次数应用…

wireshark练习抓取网络数据包用C编程完成modbus协议,从云端服务器读取温湿度数据。

文章目录前言一、疯狂聊天室1、配置网络2、创建房间3、互发消息二、wireshark抓取网络数据包1.找到对应的包2、分析抓取包中的信息三、Modbus协议概述1、Modbus主/从协议原理2、通用Modbus帧结构---协议数据单元(PDU)3、两种Modbus串行传输模式4、ModbusTCP通信结构四、C编程完…

零基础自学网络安全,如何3个月快速入门?

说到自学网络安全这一块&#xff0c;我来给大家分享一下我的经验。 一、了解相关网站 在入这行之前&#xff0c;我是先泡了一段时间网络安全相关的论坛&#xff0c;了解行业的信息&#xff0c;也可以确认自己是否真的想做这一行&#xff0c;毕竟这一行看起来很炫酷&#xff0…

Python编程 内置文件中常用方法

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.函数 &#xff08;1&#xff09;range() &#xff08;2&#xff09;zi…

做自动化测试3年,薪资为何会被应届生倒挂?

各位职场人都听说过薪资倒挂这词儿吧&#xff0c;这个情况在行业内早就不是什么稀罕事了&#xff0c;我有一个认识的&#xff0c;作为公司3年工龄的软件测试老员工&#xff0c;技术过关&#xff0c;能够独立工作&#xff0c;并且思考优化方向&#xff0c;我不吹牛的说&#xff…

【STL学习之路】vector的使用

文章目录vector介绍vector使用一、构造函数二、迭代器三、vector增删查改关于STL中参数的分析&#xff08;以push_back为例&#xff09;sort算法和仿函数使用vector介绍 vector就是顺序表的封装&#xff0c;是一个模板类&#xff0c;如上图所示。为方便vector里可以存任何数据类…

ChatGPT 免账号使用

一.ChatGPT 简介 ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具&#xff0c;使用了Transformer神经网络架构&#xff0c;也是GPT-3.5架构&#xff0c;这是一种用于处理序列数据的模型&#xff0c;拥有语言理解和文本生成能力&#xff0c;尤…

搭建资金运营体系提高企业的运营能力

资金运营体系是以项目资金流管理为核心&#xff0c;在项目预核算体系基础上的深度化&#xff0c;是丰富和完善全面预算管理的重要内容。资金运营体系建设嵌入到业务流程和项目实施过程&#xff0c;将资金使用成本贯穿于项目实施各个环节。 一、资金管控总体思路 1、资金运营的…

数据可视化:春节临近,拥堵模式开启,你买好回家的车票了吗

哈喽&#xff0c;大家好&#xff0c;春节将近&#xff0c;想必大家也开始准备回家过年的事情了&#xff0c;春运即将开始&#xff0c;祝愿大家都能买到回家的车票。 想必大家对春运都不陌生&#xff0c;随着春节临近&#xff0c;全国各地也都先后开启了拥堵模式&#xff0c;下…