上一篇博客讲到了推荐系统中常用的矩阵分解方法,RegularizedMF是对BasicMF的优化,而PMF是在RegularizedMF的基础上,引入概率模型进一步优化。假设用户U和项目V的特征矩阵均服从高斯分布,通过评分矩阵已知值得到U和V的特征矩阵,然后用特征矩阵去预测评分矩阵中的未知值。


若用户U的特征矩阵满足均值为0,方差为σ的高斯分布,则有如下等式。之所以连乘,是因为U的每个观察值Ui都是独立同分布的。 
p(U|σ2U)=∏Ni=1N(Ui|0,σ2UI)

同理:项目V的特征矩阵满足如下等式: 
p(V|σ2V)=∏Ni=1N(Vi|0,σ2VI)

其中N(x|u,σ2)表示变量x满足均值为u,方差为σ2的高斯分布。


假设真实值R和预测值R∗之差也符合高斯分布,那么有如下概率分布表示,P(Rij−UTiVj|0,δ2)通过平移有P(Rij|UTiVj,δ2),那么:

那么评分矩阵R的条件概率如下:

P(R|U,V,σ2)=∏Ni=1∏Mj=1[N(Rij|UTiVj,σ2)]Iij

这里U和V是参数,其余看作超参数(即作为U和V的参数-参数的参数,PMF中通过人工调整超参数,后面要写的BPMF是通过MCMC方法自动选出最优超参数的)。假设U和V互相独立,可以通过贝叶斯公式得到R,U,V的联合分布:

P(U,V|R,σ2,σ2U,σ2V)=P(R|U,V,σ2)P(U|σ2U)P(V|σ2V)=∏Ni=1∏Mj=1[N(Rij|UTiVj,σ2)]Iij∏Ni=1N(Ui|0,σ2UI)∏Mj=1N(Vj|0,σ2iI)


为什么要转换为这种形式呢?这还要从极大似然估计(MLE)和最大后验概率(MAP)说起。

最大似然估计:假设观察数据满足F分布,但是不知道分布参数,那么MLE就是根据采样数据来评估出参数,而且假设所有采样(观察的样本数据)都是独立同分布。  
服从参数为θ的F分布的函数我们用fD来表示,然后我们从这个分布中抽出一个具有n个值的采样X1,X2……Xn,那么样本的概率表示为:

P(x1,x2,…,xn)=fD(x1,x2,…,xn|θ)

仔细想想,当前样本数据已知,未知参数只有θ,我们就要想θ为多少才会产生这样的样本呢?我们就要找一个合适的θ使得当前的样本数据满足该分布。极大似然估计的目标是在所有可能的θ取值中,寻找一个值使这个采样的“可能性”最大化。通常采用通过求极值的方式求得关于θ一元函数的最优值的方式。

求极大似然估计(MLE)的一般步骤是:

  1. 由总体分布导出样本的联合概率函数 (或联合密度);

  2. 把样本联合概率函数(或联合密度)中自变量看成已知常数,而把参数 看作自变量,得到似然函数L(θ);

  3. 求似然函数L(θ) 的最大值点(常常转化为求ln L(θ)的最大值点) ,即θ的MLE;
  4. 在最大值点的表达式中, 用样本值代入就得参数的极大似然估计值 .

似然函数: 

通常取对数(对数似然),以便将乘化为加:

这样,待估计参数就可以表示为如下形式:

同理若待估计参数有两个,比如样本服从高斯分布,如下式,可以通过求偏导数得到估计值。

这样,PMF为何要转换为R,U,V的联合分布,且U和V在前面就解释通了,U和V作为待求参数,要利用R里的已知值计算出来(评估),然后为何会转为等式右边,这得需要最大后验概率的知识。

最大后验概率:

最大后验估计,融入了要估计量的先验分布在其中,也就是说待估计量θ本身也满足某概率分布g(θ)(已知), 称为先验分布。这样根据贝叶斯理论,似然函数有如下表示:(这里f(θ|x)等价l(θ|x)是似然函数,表示已知样本数据x集合,来评估θ的值(条件概率),但后面的等式就只关乎密度函数f了)。

贝叶斯公式大家都懂,这里我就说说分母为啥写成这个形式。此f是关于和θ和x的联合分布密度,不是我么理解的事件ABC,同时发生等。正常来说分母应该是f(x),表示只考虑x这一影响因素,要消除θ的影响,那么我么是通过对θ积分来消除θ,分母的结果最终是等于f(x)的,分子是等于f(θ,x)的。最终,待估参数表达为:

分母的积分结果得到关于f(x)的密度函数,已知的对不。这样,最大后验概率的待估参数就是在最大似然估计的结果后面多乘了个待估参数的先验分布。写到这,大家就该懂了为啥等式右边是那种形式了,在最大似然估计的基础上要添加U和V本身的先验分布。

将R,U,V的联合密度对数化:

最大化后验概率U和V(最大可能性),等价于求下式的最小值: 
 
其中: 

解传统矩阵分解可以采用各种优化方法,对于概率分解,由于最后求的是参数U和V的最大似然估计,因此可以用最大期望法(EM)和马尔可夫链蒙特卡罗算法(MCMC)。这里就不多说了。

PMF也有改进的地方,它没有考虑到评分过程中用户的个人信息,比如有的用户就是喜欢打低分,有的项目(电影)质量就是不高,分肯定高不了等,这样可以采用加入偏置的概率矩阵分解(贝叶斯概率矩阵分解BPMF),将在后面的博客中写出,会给出链接。

补充:联合分布f(x,y),其中x和y无必然联系,x可以理解为老师课讲得好,y理解为课开在周六,那么f表示这节课选课的人数的概率密度,联合分布的概率跟f(x)一样,也是通过积分来求,f(x)求面积,而f(x,y)是求体积。

最大似然估计和最大后验概率是参考了这两篇篇博客:

http://blog.csdn.net/upon_the_yun/article/details/8915283 
http://wiki.mbalib.com/wiki/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1

转基于概率的矩阵分解原理详解(PMF)的更多相关文章

  1. 强大核心功能矩阵,详解腾讯云负载均衡CLB高可靠高性能背后架构

    1 前言 腾讯云负载均衡(Cloud LoadBalancer),简称CLB, 负载均衡通过设置虚拟服务地址(VIP)将来自客户端的请求按照指定方式分发到其关联的多台后端云服务器,服务器将请求的响应返 ...

  2. MATLAB——矩阵排序详解

    <span style="font-size:18px;">(1)B=sort(A) 对一维或二维数组进行升序排序,并返回排序后的数组,当A为二维时,对数组每一列进行排 ...

  3. 《Unity3D 实战核心技术详解》书中关于矩阵的错误

    最近一直在学习实时渲染,不免要接触线性代数.而渲染中,一定会用到矩阵,当我再次去复习我之前看的书时,发现<Unity3D 实战核心技术详解>关于矩阵就有几处错误 ,特标注出来. 书的第一章 ...

  4. Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

    Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...

  5. 详解计算miou的代码以及混淆矩阵的意义

    详解计算miou的代码以及混淆矩阵的意义 miou的定义 ''' Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比. ...

  6. 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解

    矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...

  7. EasyPR--开发详解(6)SVM开发详解

    在前面的几篇文章中,我们介绍了EasyPR中车牌定位模块的相关内容.本文开始分析车牌定位模块后续步骤的车牌判断模块.车牌判断模块是EasyPR中的基于机器学习模型的一个模块,这个模型就是作者前文中从机 ...

  8. SIFT算法详解(转)

    http://blog.csdn.net/zddblog/article/details/7521424 目录(?)[-] 尺度不变特征变换匹配算法详解 Scale Invariant Feature ...

  9. 【转】 SIFT算法详解

    尺度不变特征变换匹配算法详解Scale Invariant Feature Transform(SIFT)Just For Fun zdd  zddmail@gmail.com 对于初学者,从Davi ...

随机推荐

  1. Android开发学习笔记-自定义控件的属性

    若想让自定义控件变得更加方便灵活,则就需要对控件进行定义属性,使其用起来更方便. 下面是自定义控件属性的方法 1.添加attrs.xml,内容格式样式可以参考sdk\platforms\android ...

  2. Bootstrap 各种进度条详解

    一:默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class . ...

  3. Tomcat多站点部署方式

    1.同一个Tomcat 同一个端口 部署多个项目 第一步:把待发布的多个项目.war文件放入tomcat的webapps文件下下 第二步:修改 $TOMCAT_HOME\conf 下的server.x ...

  4. Centos修改时间显示的时区,将UTC修改为CST

    问题说明: 今天一同事反应,系统的时间不对和正常的时间差8个小时.就登录主机看了下时间 系统时间显示为: # date Fri Dec :: UTC # 备注:查看了下,正好和当前的时间差了8个小时. ...

  5. HTML5标签canvas制作动画

    摘要: canvas可以绘制图像,自然而然的就可以制作动画,因为动画的每一帧都是图像.我们可以利用javascript的setInterval函数来实现动画效果. 下面是一个例子,小圆绕着红点圆心不停 ...

  6. ios7注意事项随笔

    1,修改状态栏的样式和隐藏. 首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES: 然后,在UIVie ...

  7. Lab6: Paxos

    Introduction In labs 6 and 7, you will replicate the lock service using the replicated state machine ...

  8. PHP 源码加密模块 php-beast

    PHP Beast是一个源码加密模块,使用这个模块可以把PHP源码加密并在此模块下运行. 为什么要用PHP-Beast? 有时候我们的代码会放到代理商上, 所以很有可能代码被盗取, 或者我们写了一个商 ...

  9. zabbix中Templates的jmx相关key调试方法

    1.下载 cmdline jmxclient 如果你有一个完美的模版,你可能可以忽略此步.但是大多数情况下你没有.况且 zabbix 默认的 tomcat 模版也不能很好的工作.这时候有一个工具来调试 ...

  10. iOS开发-编译出错 duplicate symbols for architecture x86_64

    今天对原来项目文件进行重新整理,根据文件内容进行分类,结果复制粘贴时没注意把一个文件复制了两遍 编译的时候就出现Duplicate Symbol Error 在网上搜素了一圈发现也有人遇到过这个问题, ...