上一篇博客讲到了推荐系统中常用的矩阵分解方法,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. 用VS2012不能打开VS2010的项目

    应该是装过sql2012或者sql2008,自带的那个visual studio,你可以直接在外面打开VS2012,然后用里面的文件去打开项目.而不要直接双击那个解决方案的文件.

  2. python2内置属性

    # encoding: utf-8 # module __builtin__ # from (built-in) # by generator 1.145 from __future__ import ...

  3. 简单的面向过程的Redis存储加入购物车

    群里有人问这个Redis存储用户购物车信息,我简单的写了个面向过程的demo 代码如下: <?php $user_id=session("user_id");//获取用户登录 ...

  4. Android图片的合成示例

    package com.example.demo; import android.os.Bundle; import android.app.Activity; import android.grap ...

  5. 深入浅出MongoDB应用实战开发

    写在前面的话: 这篇文章会有点长,谨此记录自己昨天一整天看完<深入浅出MongoDB应用实战开发>视频时的笔记.只是在开始,得先抛出一个困扰自己很长时间的问题:“带双引号的和不带双引号的j ...

  6. MDU某产品OMCI模块代码质量现状分析

    说明 本文参考MDU系列某产品OMCI模块现有代码,提取若干实例以说明目前的代码质量,亦可作为甄别不良代码的参考. 本文旨在就事论事,而非否定前人(没有前人的努力也难有后人的进步).希望以史为鉴,不破 ...

  7. 【Python3】端口占用监测的程序

    #!/usr/bin/env python # -*- coding:utf- -*- #python端口占用监测的程序,该程序可以监测指定IP的端口是否被占用 import socket,time, ...

  8. 【linux系列】centos7配置桥接模式静态IP

    一.设置桥接模式 VMware->Edit->Virtual Network Edit 二.查看物理机的ip地址 三.根据物理机的ip地址,设置linux虚拟机的ip地址 四.网络重启 五 ...

  9. css笔记 - transition学习笔记(二)

    开始把7,8月份学的css整理一下 transition过渡 1. CSS transition transition过渡 :用于当元素 从一种样式变换为另一种样式 时为元素添加效果. 2. tran ...

  10. Android 1.6 PackageManagerService源码分析

    文件清单 framework\base\services\core\java\com\android\server\pm\PackageManagerService.java PackageManag ...