基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统

本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷)

论文标题:Matrix factorization techniques for recommender systems

随着Netflix竞赛的结果所示,矩阵分解模型在商品推荐上的表现要优于传统的近邻技术,矩阵分解允许合并附加信息,如隐式反馈、时间效应和置信度。

现代消费者被太多的选择所困扰。电子零售商和内容提供商提供了大量的产品选择,提供了前所未有的机会来满足各种特殊需求和品味。为消费者提供最合适的产品是提高用户满意度和忠诚度的关键。因此,越来越多的零售商开始对推荐系统感兴趣。推荐系统通过分析用户对产品的兴趣模式,提供符合用户口味的个性化推荐。因为好的个性化推荐系统可以增加用户体验的另一个维度,像亚马逊和Netflix这样的电子商务行业的领导者已经将推荐系统作为网站的重要组成部分。

这种系统对娱乐产品,如电影、音乐和电视节目特别有用。许多客户将观看同一部电影,而每个客户可能会观看许多不同的电影。事实证明,客户愿意表明他们对特定电影的满意程度,因此网站可以获得关于哪些电影吸引哪些客户的大量数据。公司可以通过分析这些数据向特定的客户推荐电影。

推荐系统策略

一般来说,推荐系统基于两种策略中的一种。内容过滤方法为每个用户或产品创建一个配置文件来描述其性质。例如,一个电影配置文件可以包括关于它的类型、参与的演员、票房受欢迎程度等等的属性。用户配置文件可能包括人口统计信息或在适当的问卷上提供的答案。配置文件允许程序将用户与匹配的产品关联起来。当然,基于内容的策略需要收集可能不可用或者不易收集的外部信息。

一个著名的成功实现内容过滤的是Music Genome Project,它在http://Pandora.com中被用于互联网广播服务。一个训练好的音乐分析器根据数百种不同的音乐特征为音乐基因组计划中的每首歌曲打分。这些属性或基因,不仅捕获了一首歌的音乐同一性,而且还捕获了许多重要的品质,这些品质与理解听众的音乐喜好有关。

内容过滤的另一种方法是只依赖于过去的用户行为——例如,以前的交易记录或对产品的评分——而不需要创建明确的配置文件。这种方法称为协同过滤,这是Tapestry(第一个推荐系统)的开发人员创造的术语。协同过滤分析了用户之间的关系和产品之间的相互依赖关系,以识别新的用户-项目关联。

协同过滤的一个主要吸引力是它是使用邻域自由的,但它可以解决数据方面的问题,这些问题通常难以捉摸,很难用内容过滤来描述。虽然协同过滤通常比基于内容的技术更准确,但由于它无法解决系统的新产品和新用户,因此存在所谓的“冷启动”问题。在这方面,内容过滤是更好的。

协同过滤的两个主要领域是邻域模型和隐因子模型。邻域模型关注于计算项目之间或用户之间的关系。面向商品的方法基于同一用户对“相邻”商品的评分,评估用户对商品的偏好。一个产品的邻居指的是其他产品,这些产品在被同一用户评价时往往得到相似的评价。例如,考虑电影Saving Private Ryan。它的邻居可能包含战争电影,Spielberg的电影,和Tom Hanks的电影。为了预测特定用户对Saving Private Ryan的评分,我们将寻找该用户实际评价的影片的最近邻居。正如图1所示,以用户为导向的方法识别出志同道合的用户,他们可以互相补充评分。

a1d0bb65d86ec54530112b4f2469d385.png
图1

隐因子模型是一种替代方法,它通过根据评分模式推断出的20到100个因子来表征商品和用户,从而试图解释评分。从某种意义上说,这些因子包含了上述人为创造的歌曲基因的计算替代物。对于电影来说,发现的因子可能会衡量明显的维度,例如喜剧与戏剧,动作量或对儿童的导向;不太明确的维度例如角色发展的深度或古怪程度;或者完全无法解释的维度。对于用户来说,每个因子都衡量了用户对相应电影因子中得分高的电影的喜爱程度。

图2展示了一个二维简化示例的这种思想。考虑两个假设的维度,即女性主导与男性主导,严肃的人与逃避现实者。该图显示了这两个维度上可能有几部著名电影和一些虚构用户。对于此模型,相对于电影的平均评分,用户对电影的预测评分将等于该电影和用户在图表上的位置的点积。例如,我们认为Gus喜欢Dumb and Dumber,讨厌The Color Purple,把Braveheart设为平均水平。值得注意的是一些电影例如Ocean's 11和用户例如Dave在这两方面都是中立的。

4952de80a4b423abe42a9e9193d86170.png
图2

矩阵分解模型

一些最成功的隐因子模型的实现是基于矩阵分解的。矩阵因子分解的基本形式是通过从项目评分推断出的因子向量来表征项目和用户。对项目因子和用户因子的高相关性促成了推荐。这些方法结合了良好的可扩展性和预测精度,近年来变得流行起来。此外,它们为建模各种现实情况提供了很大的灵活性。

推荐系统依赖于不同类型的输入数据,这些数据通常放在一个矩阵中,一个维度表示用户,另一个维度表示感兴趣的项目。最方便的数据是高质量的显式反馈,包括用户对项目感兴趣的显式输入。例如,Netflix收集了电影的星级评分数据,而TiVo用户通过按下大拇指向上和向下按钮来显示他们对电视节目的喜好。我们将明确的用户反馈称为评分。通常,明确的反馈包含一个稀疏矩阵,因为任何一个用户可能只对可能的项目的一小部分进行了评价。

矩阵因子分解的一个优点是它允许合并额外的信息。在没有显式反馈的情况下,推荐系统可以通过隐式反馈推断用户的偏好,通过观察用户的购买历史、浏览历史、搜索模式甚至鼠标移动等行为,间接反映用户的意见。隐式反馈通常表示事件的存在或不存在,因此通常用密集填充的矩阵表示。

基本的矩阵分解模型

矩阵分解模型将用户和物品映射到一个维数为f的联合隐因子空间,用户与物品的交互被建模为该空间的内积。因此,每个项目i与一个向量

对应,每个用户u与一个向量
对应。对于一个给定的项目i,
的的元素是衡量项目拥有这些因子的程度,积极的或消极的。对于一个给定的用户u,
的元素可以衡量用户对项目的兴趣程度,这些项目的相关因素偏高,无论是正面的还是负面的。点乘 的结果
获得了每个用户u和项目i的交互---用户对项目特征的总体兴趣。这近似于用户u对项目i的评分,用
表示,从而得到估计评分如下:

(1)

主要的挑战是计算每个项目和用户映射的因子向量

。推荐系统完成这个映射后,可以很容易地根据公式1估计用户对任何物品的评价。

这种模型与奇异值分解(SVD)密切相关,奇异值分解是一种用于在信息检索中识别潜在语义因子的成熟技术。在协同过滤域中应用SVD需要考虑用户项目评分矩阵。由于用户项目评分矩阵的稀疏性导致矩阵中的缺失值占了很大一部分,这常常会带来困难。当有关矩阵的知识不完全时,传统的奇异值分解是无定义的。此外,如果只对相对较少的已知项目进行处理,就很容易出现过拟合。

较早的系统依靠估算来填补缺失的评分并使评分矩阵密集。但是,由于这样进行估算会大大增加数据量,因此代价可能非常昂贵。此外,不准确的估计可能使数据失真很大。因此,最近的工作建议仅直接对观察的评分建模,同时通过正则化模型来避免过度拟合。为了学习因子向量(

),系统将已知评分的正则化平方误差最小化:

ee0d22513073ae31cdcf51ab55983633.png
(2)

这里,K是已知评分

的用户u与项目i的集合(u,i)。

系统通过拟合先前观察到的评分来学习模型。然而,我们的目标是用一种预测未来未知评分的方式来概括之前的评分。因此,系统通过对学习参数进行正则化来避免对观测数据的过拟合,学习参数要受到惩罚。常数

控制了正则化的程度,通常由交叉验证来确定。Ruslan Salakhutdinov 和 Andriy Mnih的“Probabilistic Matrix Factorization”为正则化提供了一个概率基础。

学习算法

两个方法可以来最小化(2)式,分别是随即梯度下降和交替最小二乘法(ALS)。

随机梯度下降

Simon Funk推广了对(2)式的随机梯度下降,其中,算法循环遍历训练集中的所有评分。对于每个给定的训练案例,系统都会预测

并计算相关的预测误差。

fa51bc366caaa6216d14b1ce5aa5b3aa.png

然后,它在梯度的相反方向上按与r成比例的量级修改参数,从而得出:

eb33be2c9df8fd19d8c314719eab48c7.png

这种流行的方法易于实现并且获得了相对快速的运行时间。然而,在某些情况下,使用ALS优化是更好的。

交替最小二乘法

因为

是未知的,2式是非凸的。然而,如果我们固定一个未知项,则优化问题将变成二次问题,并且可以得到最优解。因此,ALS技术在固定
和固定
之间转化。当所有的
固定时,系统通过解决最小二乘问题重新计算
,反之亦然。这保证了2式每一步都在减少,直到收敛。

一般来说,随机梯度下降比ALS更简单、更快,但ALS至少在两种情况下是有利的。首先是系统可以使用并行化的时间。在ALS中,系统独立于其他项目因子计算每个

,独立于其他用户因素计算每个
。这可能会导致算法的大量并行化。第二种情况是针对以隐式数据为中心的系统。因为不能将训练集视为稀疏的,所以像梯度下降那样遍历每个单个训练案例将是不切实际的。ALS可以有效解决这种情况。

添加偏置

矩阵分解协同过滤方法的一个优点是它在处理各种数据的灵活性和其他具体应用的要求。这就要求在保持相同学习框架来计算式1。式1试图获取用户和产生不同评分值的项目之间的交互。然而,许多观察到的评分值的变化是由于与用户或项目相关的影响,即偏差或截距(intercepts),与任何交互无关。例如,典型的协同过滤数据表现出较大的系统趋势,即某些用户给予的评价要高于其他用户,而某些项目所获得的评价要高于其他项目。毕竟,有些项目被普遍认为比其他项目更好(或更差)。

因此,通过

来解释全部评分值是不明智的。取而代之的是,系统尝试识别这些值中各个用户或项目偏见可以解释的部分,仅对数据的真实交互部分进行因子建模。一个一阶的将偏置包含的评分预测模型
如下式所示:

(3)

包含偏置项的评分

进行表示并且由用户影响和项目影响所导致。总体平均评分由μ表示,参数
分别表示用户u和项目i与平均值的观察偏差。例如,假设你要对用户Joe对电影《泰坦尼克号》的评分进行一次估算。现在,假设所有电影的平均评分µ为3.7分。此外,泰坦尼克号比平均的电影要好,所以它的评分倾向于比平均评分高0.5分。另一方面,Joe是个挑剔的用户,打分倾向于比平均分低0.3分。因此,Joe对《泰坦尼克号》电影的评分预估为3.9分,(3.7+0.5-0.3)。式1的偏差扩展式如下:

(4)

在这里,观察到的评分被分解为四个部分:总体平均评分,项目偏置分,用户偏置分,和用户-项目交互项。这使得每个部分只能解释与之相关的信号部分。系统通过最小化平方误差函数来学习:

03397854cdfa3692b50f3fa1cf116c4f.png
(5)

由于偏差往往会捕获很多观察到的信号,因此准确的建模至关重要。因此,其他的论文有提供了更详尽的偏差模型。

额外的输入源

通常一个系统必须处理冷启动问题,其中许多用户提供很少的评分,使它很难就他们的口味得出一般结论。缓解这个问题的一种方法是合并关于用户的其他信息源。推荐系统可以使用隐式反馈来深入了解用户的偏好。实际上,无论用户是否愿意提供明确的评分,他们都可以收集行为信息。零售商可以利用客户的购买记录或浏览历史来了解他们的倾向,以及这些客户可能提供的评级。

为简单起见,考虑使用布尔类型隐式反馈的情况。N(u)代表用户u表示隐式偏好的项目集。这样,系统就通过用户隐式首选的项目对用户进行了描述。在这里,需要一组新的项目因子,其中项目i与

相关联。因此,在N(u)中表示项目偏好的用户由下式向量进行特征化:

对求和正规化通常是有效的,例如

另一个信息源是已知的用户属性,例如,人口统计信息。再次,为简单起见,考虑布尔属性,其中用户u对应于属性A(u)的集合,该集合可以描述性别,年龄组,邮政编码,收入水平等。一个独立的因子向量

对应于每个属性,通过一组用户关联的属性来描述用户:

矩阵分解模型应集成所有信号源,并增强用户表示能力:

22c329151191220f1e49186a039a3b25.png

尽管前面的示例处理的是增强用户表示能力(在这种情况下,缺少数据更为常见),但在必要时可以对项目进行类似的处理。

时间动态

到目前为止,所提出的模型都是静态的。实际上,随着新选择的出现,产品的感知度和受欢迎度会不断变化。同样,客户的偏好也会发生变化,从而导致他们重新定义自己的口味。因此,系统应考虑到反映用户项交互的动态,时间漂移性质的时间效应。

矩阵分解方法可以很好地模拟时间效应,具有很好的实时性来改善准确性。将评级分解为不同的项可以使系统分别处理不同的时间方面。具体而言,以下的项会随时间变化:项目偏置

;用户偏置
以及用户偏好设置

第一个时间效应解决了一个事实,即商品的受欢迎程度可能会随着时间而改变。例如,电影可能会受到外部事件(例如演员在新电影中的露面)的触发而变得流行或者变得不流行。因此,这些模型处理项目偏置

可以当作是时间的函数。第二种时间效应使用户可以随时间更改其基线评级。例如,倾向于将平均电影评级为“ 4星”的用户现在可以将此类电影评级为“ 3星”。这可能反映了几个因素,包括用户评分尺度的自然漂移,用户分配评分相对于其他近期评分的事实,以及评分者在家庭中的身份可能随时间而改变的事实。因此,在这些模型中,参数
是时间的函数。

时间动态超越了这一点。它们还会影响用户的偏好,从而影响用户与项目之间的交互。用户会随着时间改变其偏好。例如,喜欢心理刺激类型电影的粉丝可能会在一年后成为犯罪剧的粉丝。同样,人类会改变他们对某些演员和导演的看法。该模型采用用户因素(向量

)来解释这种影响作为时间的函数。另一方面,它指定静态项目特征
,因为与人类不同,项目本质上是静态的。

加入时间因素后评分预测规则如下所示:

560e4132086f9d98a5f4322ed7ad4221.png
(7)

具有不同置信水平的输入

在一些设置中,并不是所有观察到的评分都具有相同的权重或可信度。例如,大量的广告可能会影响对某些商品的投票,而这些商品并不能恰当地反映长期特征。类似地,系统可能会遇到试图倾斜某些物品的评分的敌对用户。

另一个例子是建立在隐式反馈基础上的系统。在这种解释正在进行的用户行为的系统中,用户的确切偏好分数很难量化。因此,该系统使用粗略的二进制表示形式工作,指出“可能喜欢该产品”或“可能对该产品不感兴趣”。在这种情况下,将置信度得分与估计的偏好附加在一起很有价值。置信可以来自于可用的描述动作频率的数值,例如,用户观看某个节目的时间,或者用户购买某个商品的频率。这些数值表示每次观察的置信度。各种与用户无关的因素偏好可能导致一次性事件;然而,重复发生的事件更有可能反映用户的意见。

矩阵分解模型可以很容易地接受不同的置信水平,这让它给予较少有意义的观察较少的权重。若对观察的评分

的置信度记为
,则模型对成本函数(方程5)进行增强,以说明置信度如下:

67d7c50aa83816618ba358d942ad33f8.png

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

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

相关文章

php fpm在哪配置,php7的php-fpm.conf文件在哪里

php7下的php-fpm.conf文件一般是在php的安装目录下的etc目录中,文件路径为/usr/local/php-fpm/etc/php-fpm.conf。php-fpm.conf是php-fpm进程管理器的配置文件。php-fpm.conf是php-fpm进程管理器的配置文件。文件路径:/usr/local/php-fpm/etc/php-fpm.co…

python 生成pdf页面大小_(Python)更改使用xtopd生成的PDF文件的页面大小和格式

我想用Python转换xlsx。我使用tablib和xtopdf模块构建了一个结构良好的表。工作出色!不幸的是,内容不适合一个pdf页面。所以我想把页面大小和格式改成水平A3。但我不知道这怎么可能。我的代码:import randomimport tablibfrom openpyxl impor…

php数组合并字段,PHP数组按要求合并

数组一:[0] > Array([rid] > 1[hf_rid] > 0[aid] > 1[uid] > 1[content] > 我肯定第一名[re_time] > 2017-10-10 10:59[nickname] > 就是这么帅)[1] > Array([rid] > 2[hf_rid] > 0[aid] > 1[uid] > 1[content] > 马蛋,中枪了[re_ti…

aba会导致问题_肌肤缺水会导致哪些问题呢?我们又该怎么判断呢?

一.如何判断皮肤是否缺水?01.脸部肌肤粗糙,有紧绷感很多人在日常中都会用到洗面奶吧,在用过洗面奶之后如果发现肌肤变得粗糙,有紧绷感,那么说明你的肌肤就需要补水了。02.化妆之后浮粉、起皮如果给肌肤补足充足的水分&…

php编写用户登录页面,js+php实现静态页面实时调用用户登陆状态的方法

这篇文章主要介绍了jsphp实现静态页面实时调用用户登陆状态的方法,采用在静态页面中使用js调用php页面从而实现用户登录状态的实时调用功能,需要的朋友可以参考下本文实例讲述了jsphp实现静态页面实时调用用户登陆状态的方法。分享给大家供大家参考。具体分析如下:在…

python调试和测试有什么区别和联系_软件测试和测试开发到底有什么区别跟联系?...

对于没有进入IT领域的同学而言,软件测试并不陌生,但如果听到测试开发,他们一定会感到十分困惑,这究竟是测试还是开发呢?按照字面意思理解,大家或许会觉得测试开发是指既能开发产品又能测试产品的“技术王者…

php 远程图片合拼,php获取远程图片的三种方式

来源:http://www.phstar.cn/article/258.html下面介绍 3种php远程获取图片的方法,希望对大家有帮助。1:file_get_contents,file_put_contents方式function download_remote_file($file_url, $save_to){$content file_get_contents($file_url…

python蒙特卡洛模拟_基于Python的21点游戏蒙特卡洛模拟

问题重述:大多数赌场使用6副牌或8副牌玩这种游戏,以防止“数牌点”,在你的模拟中使用两副牌(共104张)。只有2位参与者,你和庄家。游戏开始时每人得到两张牌,对于牌面为2~10的牌,点数和面数相同;…

php 接受 amp,php中amp;amp;和||的用法

这两个是php 中的关系运算符。php中的关系运算符有:&&(and)、||(or)、xor(亦或)、!(非)、名称 关系 示例 结果and 与 $x and $y 如果 $x 和 $y 都为 true,则返回 true。or 或 $x or $y …

spring更新后 外层事务查不到_再深一点:面试工作两不误,源码级理解Spring事务...

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。Spring有5种隔离级别,7种传播行为。这是面试常问的内容,也是代码中经常碰到的知识点。这些知识枯燥而且乏味,其中有些非常的绕…

php 字符串比较txt,PHP读到txt中文字符串比较失败

最近开始做PHP。今天从txt文件中读取一个中文字符串,跟一个字符串作比较,老是匹配失败,开始以为是编码问题,因为我的PHP文件编码是utf-8,遂将txt文件的编码也改成utf-8,好,噩梦来了...我将读到的…

箭头函数的this指向谁_高阶函数

NodeJS 系列文章,本篇是第一篇,首先,预计将后续高频使用逻辑串一遍,依次是高阶函数,promise以及事件机制。本篇主要是高阶函数。call、bind、applycall、apply 都是改变 this 指向,区别是接受参数的方式不一…

php怎么加编码,php怎么设置编码格式

php设置编码格式的方法:首先在php脚本中添加【header(“Content-Type: text/html; charsetutf-8")】;然后在静态页面设置编码;最后保证所有文件的编码相同即可。如果要使用gb2312编码,那么php要输出头:(推荐教程&…

java 中文 音序,java 中文字符串数组按照音序排列

java 中文字符串数组按照音序排列复制代码 代码如下:public class SortComparator implements Comparator{public int compare(Object o1,Object o2) {try{byte[] buf1 ((String) o1).getBytes("unicode");byte[] buf2 ((String) o2).getBytes("unicode"…

matlab1 3倍频程,瞬时声压时域数据怎么用matlab进行1/3倍频程声压级分析

%A计权声压级频谱分析clc;clear;close all;%时域分析ywavread(abc.wav);%频域分析fs51200;%采样频率p02e-5;%参考声压f[1.00 1.25 1.600 2.00 2.50 3.15 4.00 5.00 6.30 8.0]; %基准中心频率f1[20.00 25.0 31.5 40.0 50.0 63.0 80];fc[f1,100*f,1000*f,10000*f]; %%%%%%%%%中心…

python paramiko长连接_【Python】 SSH连接的paramiko

paramiko*paramiko需要PyCrypto模块的支持paramiko支持通过SSH协议进行一些操作,比如远程执行命令,上下传文件等等用法:①  远程命令ssh paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())#指定当对方主机没…

php 共享内存列队,php中对共享内存,消息队列的操作

消息队列中的数据同样受到大小的约束,具体约束范围可通过msg_stat_queue的msg_qbytes看到。这段代码唯一有点小改动的地方就在接受消息时,指定了MSG_IPC_NOWAIT,不然如果目标队列没有数据,默认会一直等待。 一般会用到共享内存或消…

python文件路径拼接多出斜杠_浅谈python中拼接路径os.path.join斜杠的问题

浅谈python中拼接路径os.path.join斜杠的问题调试程序的过程中,发现通过os.path.join拼接的路径出现了反斜杠directory1/opt/apps/upgradePackagedirectory2icp_v1.8.0directory3os.path.join(directory1,directory2)print(directory3 : %s %directory3)执行结果dir…

matlab约当消去法,Gauss消去法解线性方程组(Matlab)

clear;clc;% Gauss消去法解线性方程组A[3 -5 6 4 -2 -3 8;1 1 -9 15 1 -9 2;2 -1 7 5 -1 6 11;-1 1 3 2 7 -1 -2;4 3 1 -7 2 1 1;2 9 -8 11 -1 -4 -1;7 2 -1 2 7 -1 9];%系数矩阵b[11 2 29 9 5 8 25];%n维向量yinv(A)*b %matlab的计算结果nlength(b);%方程个数nxzeros(n,1);%…

动感灯箱制作流程培训_广告立体灯箱的特点有哪些?

随着广告业的发展,灯箱广告行业也在突飞猛进。在灯箱广告屏的设计与制作中,为了追求真实感和艺术性,采用彩印或摄影喷绘;也有人用特种纸、塑料板(膜)、灯箱布等进行丝网印刷制作灯箱图片,并根据成本和耐候性要求选择制作方法和灯箱…