PMF Model[通俗易懂]

PMF Model[通俗易懂]转载自:http://blog.csdn.net/shenxiaolu1984/article/details/50372909Mnih,Andriy,andRuslanSalakhutdinov.“Probabilisticmatrixfactorization.”Advancesinneuralinformationprocessingsystems.2

大家好,又见面了,我是你们的朋友全栈君。

转载自:http://blog.csdn.net/shenxiaolu1984/article/details/50372909


Mnih, Andriy, and Ruslan Salakhutdinov. “Probabilistic matrix factorization.” Advances in neural information processing systems. 2007.

本篇论文发表于2007年NIPS。Ruslan Salakhutdinov来自多伦多大学,16年转入CMU。Andriy Mnih同样来自多伦多大学,师从Hinton。PMF算法(Probabilistic Matrix Factorization)是现代推荐系统的基础算法之一。

问题描述

设有 N 个用户, M 部电影。一个评分系统可以用 N×M 矩阵 R 来表示。 
推荐系统问题如下: R 矩阵中只有部分元素是已知的(用户只给一部分电影打过分),且 R 往往非常稀疏,需要求出 R 缺失的部分。 
除了推荐系统,这个模型也可以用来描述任意“成对”作用的系统。例如:由若干球队组成的联赛,两支球队间的历史比分即为 R 的已知元素,需要预测尚未进行的比赛结果。这里 R 是一个方阵。

基本思路

本文采取low-dimensional factor模型,也称为low rank模型来处理这个问题。其核心思想是:用户和电影之间的关系(即用户对电影的偏好)可以由较少的几个因素的线性组合决定

例子 
用户是否喜欢一部电影取决于三个因素:是娱乐片还是文艺片,是外文片还是华语片,演员是否出名。 
用三维向量 x=[0.6,1.0,0.2]T 来描述一个用户(假设取值在[-1,1]之间):他比较喜欢娱乐片,只看外文片,对演员要求一般,小众一点更好。 
对于一部电影,用另一个三维向量来描述 y=[0.9,1.0,0.8]T :这是一部众星云集的-国产-娱乐大作。 
可以算出这个用户对于这部电影的喜好程度  r=xTy=2.06  :相当不喜欢。

用矩阵语言来描述,就是评分矩阵可以分解为两个低维矩阵的乘积 R=UTV ,其中 D×N 矩阵 U 描述 N 个用户的属性, D×M 矩阵 V 描述 M 部电影的属性。 
根据矩阵秩的性质, R 的秩不超过 U,V 的最小尺寸 D

实际上,由于系统噪音存在,不可能做出这样的完美分解,另外 R 包含很多未知元素。所以问题转化为: 
– 对一个近似矩阵进行分解 R^=UTV  
– 要求近似矩阵 R^ 在观测到的评分部分和观测矩阵 R 尽量相似 
– 为了防止过拟合,需要对 U,V 做某种形式的约束

用贝叶斯观点来说, R 是观测到的值, U,V 描述了系统的内部特征,是需要估计的。

基础PMF模型

使用如下两个假设 
– 观测噪声(观测评分矩阵 R 和近似评分矩阵 R^ 之差)为高斯分布 
– 用户属性 U 和电影属性 V 均为高斯分布

利用第一个假设,可以写出完整观测矩阵的概率密度函数。其中 σ 是观测噪声的方差,人工设定。 

p(R|U,V)=N(R^,σ2)=N(UTV,σ2)

利用第二个假设,可以写出用户、电影属性的概率密度函数。其中 σU,σV 是先验噪声的方差,人工设定。 

p(U)=N(0,σ2U),p(V)=N(0,σ2V)

综合以上两个概率密度函数,利用经典的后验概率推导,可以得到 

p(U,V|R)=p(U,V,R)/p(R)p(U,V,R)=p(R|U,V)p(U)p(V)

基础PMF求解

最大化上述概率,则可以通过已有的观测矩阵 R 估计出系统参数 U,V

为了计算方便,对后验概率取对数 

lnp(U,V|R)=lnp(R|U,V)+lnp(U)+lnp(V)

高斯分布公式及其对数形式: 

p(x)=12πσexp((xμ)22σ2)

lnp(x)=ln(2πσ)(xμ)22σ2

由于后验概率中的方差都是预设常数,故只有第二项和待优化的 U,V 有关。 
最大化上述对数后验概率,等价于最小化如下能量函数: 

E(U,V)=(RUTV)22σ2+UTU22σ2U+VTV22σ2V



做参数替换约掉一个变量: 


E(U,V)=12(RUTV)2+λU2UTU2+λV2VTV2

如果系统先验方差 σU,σV 无穷大(即无法对系统参数做约束),则上式只剩第一项,退化为一个SVD分解问题。

刚才的几步推导中,为了书写简便实际上做了一些省略:矩阵的概率密度应该等于其元素概率密度的乘积。取对数之后,即等于其元素概率密度的和。 

E(U,V)=12ijIij(RijUTiVj)2+λU2iUTiU2i+λV2jVTjV2j

其中

Rij
是标量,

Ui,Vj
都是维度为D的向量。后两项相当于约束了内部特征矩阵

U,V
的范数。标记

Iij
表示用户i是否对电影j评分。

最后,为了限制评分的范围,对高斯函数的均值施加logistic函数 g(x)=1/(1+exp(x)) ,其取值在(-1,1)之间。最终的能量函数是: 

E(U,V)=12ijIij(Rijg(UTiVj))2+λU2iUTiU2i+λV2jVTjV2j

至此,可以使用梯度下降方法,通过 E/Uik,E/Vjk 求解 Ui,Vj 中的每一个元素。

需要估计的参数数量为 M×D+N×D 。对于每一个参数,由于能量函数第一项只在有观测时需要计算,所以所需时间相对于观测数量为线性(?)。

性能 
1998年至2005年Netflix数据,设定D=30,使用Matlab,在30分钟内完成训练。

控制模型复杂度

最简单的控制复杂度的方法是调整特征维度: D 约大,模型越精确,但也越容易过拟合。 D 应该和用户的打分数量相关:如果用户看过的电影多,则可以用较多特征来描述,可以使用较大的D。 
但实际数据往往是不均衡的:电影爱好者给出的打分很多,而很多用户只会给一两部电影打分。

较好的方法是选择一个中等尺度的 D ,之后调整 λU=σ/σU,λV=σ/σV 。 
σ 大说明观测噪声大,则第一个误差项不靠谱, λU 较大,应较多依赖后两个正则项:要求系统参数 U,V 的绝对值较小;反之, σU 大,说明系统参数本身方差大, λU 较小,允许 U,V 的绝对值较大

带有自适应先验的PMF

先验的超参数(hyperparameter): ΘU,ΘV 可以从训练样本中估计。这两个 Θ 和前述 λ 类似。 

lnp(U,V,ΘU,ΘV|R)=lnp(R|U,V)+lnp(U|ΘU)+lnp(V|ΘV)+lnp(ΘU)+lnp(ΘV)



类似地,可以给

ΘU,ΘV
设定先验,轮流对参数和超参数使用梯度下降或者EM算法更新。

限制性PMF

“用户是否给某部电影打过分”这个信息本身就能一定程度上说明用户的属性。Constrained PMF尝试把 Iij 引入到模型中去。这也是本文的创新之处

M×D 矩阵 W 表述电影对用户的影响。其中第k行 Wk 表示,如果用户看过第k部电影,则用户应该具有属性 Wk

用户属性U由两部分组成:和之前相同的高斯部分 Y ,以及 W 用“看过”矩阵 I 加权的结果。 

Ui=Yi+1kIikkIikWk

其中 W 服从方差为 σW 的0均值高斯分布。 
在已知 R 的情况下,同样用梯度下降方法可以求解 U,V,W

下图用概率图模型表示基础PMF(左)和限定性PMF(右): 
PMF Model[通俗易懂]

实验

涉及的数据集如下

数据集 打分 用户 电影
Netflix Train 100,480K 480K 17K
Netflix Valid 1,408K
Netflix Test 2,817K

为了提高训练速度,采用了mini-batche方法:每100K个观测(用户给某部电影打分),更新一次待求参数。learning rate = 0.005, momentum = 0.9。

梯度下降的learning rate和momentum参见这个链接 
简而言之,学习率决定每一步大小,动量避免曲折过于严重。

可以看出限定性PMF比基础PMF的优越性 
PMF Model[通俗易懂]

扩展

第6章总结中提到: Efficiency in training PMF models comes from finding only point estimates of model parameters and hyperparameters, instead of inferring the full posterior distribution over them. 
这里的point estimation指的是只估计了 U,V,λU,λV 一个值,而没有估计它们的概率分布,所以大大提高了速度。但是其缺点是容易过拟合。 
与之相对的,还可以使用贝叶斯估计,把系统参数当成一个随机变量。具体可以参看这篇博客:贝叶斯PMF,介绍同作者的这篇论文:

Salakhutdinov, Ruslan, and A. Mnih. “Bayesian probabilistic matrix factorization using markov chain monte carlo.” International Conference on Machine Learning 2008:880-887.

另外,如果需要考虑一些明确的从属信息,例如评分的用户身份、评分发生的时间等,可以参看这篇博客:DPMF,介绍这篇论文:

Adams, Ryan Prescott, George E. Dahl, and Iain Murray. “Incorporating side information in probabilistic matrix factorization with gaussian processes.” arXiv preprint arXiv:1003.4944 (2010).

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/149231.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 手机如何传输高清视频

    手机如何传输高清视频 为了应对手机传输高清摄像的挑战,需要在USB标准中定义一个USB音视频类来规范USB视频传输(Video-over-USB)技术。【您可以是大型系统集成商、可以是相关贸易的经销商、也可以是设计单位、即便您是个人、只要您有资源、只要您有渠道、我们都会最大限度内保证您的利益。】  手机的摄像功能已经从一种新鲜事物发展为主流配置,移动供应商策略性地把高清录像作为他们的高端产品。在手机中整合高清视频将会进一步体现其实用价值,因为它已不仅是一个数码相机,还是一个数码摄像机​。  把高清录像放到手机会带.

  • 虚拟机ifconfig或ip addr不显示ip地址「建议收藏」

    虚拟机ifconfig或ip addr不显示ip地址「建议收藏」虚拟机ifconfig或ipaddr不显示ip地址报错图片:一直查不到ip地址,有重新启动很多次解决方法(1)命令查看配置文件:vi/etc/sysconfig/network-scripts/ifcfg-ens33ens33注意看这个修改的文件后缀把ONBOOT的状态no改为yes然后重启,应该就没问题了。(2):还有一种可能是因为虚拟网卡没有正常连接,解决方法是开启虚拟网卡的服务:打开任务管理器,选择服务标签,为了保险,开启所有的和vmware有关的服务检

  • IPV6 阿里DDNS

    IPV6 阿里DDNSIPV6阿里DDAS因为需要在家搭建一套环境,并且需要公网能访问。国内的ipv4的地址,各大运营商基本都不会分配ipv4地址(电信宽带好像有地方可以,但是听说很贵),而且是动态的,每过段时间就会改变。发现移动宽带的公网ipv6地址是可以获取到的,但是也会动态刷新。想稳定访问就加上阿里的ddns的域名访问。###1.准备工作因为宽带接入家里基本是都是需要通过光猫拨号后,再接入路由器。这样就拿不到真实的公网ipv6地址,需要先将光猫中的设置改为桥接模式,再让路由器输入宽带账户和密码拨号。这个过程我调

  • Frp内网穿透

    Frp内网穿透Frp内网穿透​ 内网穿透从本质上来讲也是端口映射,两者都是将内网地址映射到公网可访问的地址,而区别是端口映射直接在路由器中配置即可,而内网穿透配置的端口映射则需要客户端和服务端进行绑定后实现,相当于客户端和服务端之间建立了一条隧道,然后访问服务端的请求会通过隧道转发给内网主机,该情况多用于没有公网IP的情况下使用;​ frp是一个高性能的反向代理应用,可以轻松地进行内网穿透,对外网提供服务,支持tcp,udp,http,https等协议类型,可以将内网服务以安全、便捷的方式通过具有公网

  • vue 父组件调用子组件_react父组件向子组件传值

    vue 父组件调用子组件_react父组件向子组件传值Vue中子组件调用父组件的三种方法:1.直接在子组件中通过“this.$parent.event”来调用父组件的方法。父组件<template><div><child></child></div></template><script>importchildfrom’./components/childcomponent’;exportdefault{co

  • 《前端运维》一、Linux基础–10定时任务「建议收藏」

    一、进程管理进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号