数据学习
登录
注册
原创博客
期刊会议
学术世界
期刊出版社
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI领域与任务
AI研究机构
AI学术期刊
AI论文快讯
AI数据集
AI开源工具
AI模型
AI模型概览图
AI模型月报
AI基础大模型
AI预训练大模型
数据推荐
网址导航
我的网址导航
程序员必备网站
推荐系统之概率矩阵分解的详细推导过程(Probabilistic Matrix Factorization,PMF)
标签:
#PMF#
#推荐#
#概率矩阵分解#
#矩阵分解#
时间:2017/11/04 09:36:06
作者:小木
概率矩阵分解是目前在推荐领域很流行的模型。本文主要是推导论文 Mnih A, Salakhutdinov R R. Probabilistic matrix factorization[C]//Advances in neural information processing systems. 2008: 1257-1264. 中的结果。 传统的协同过滤方法既不能处理大数据量的推荐,也不能处理只有很少评分的用户。这篇论文提出了著名的概率矩阵分解的方法来解决这个问题。概率矩阵分解的思想是以中线性因子模型,它使用与用户相关的系数,将用户的偏好建模成一个一系列向量的线性组合。具体如下: 假设有$M$个电影和$N$个用户。$R\_{ij}$表示第$i$个用户对电影$j$的评分。假设隐变量的维度是$D$,那么我们希望将评分矩阵$R$分解成两个矩阵,即用户隐矩阵$U\in R^{D\times N}$,和电影隐矩阵$V \in R^{D\times M}$。其中,$U\_i$表示第$i$个用户的隐向量,$V\_j$表示第$j$个电影的隐向量。假设评分是一个有高斯噪音的正态分布。那么我们的评分应当有如下公式: ```math p(R|U,V,\sigma^2)=\prod_{i=1}^N\prod_{j=1}^M\Big[\mathcal{N}(R_{ij}|U_i^TV_j,\sigma^2)\Big]^{I_{ij}} ``` 这里的$\mathcal{N}(R\_{ij}|U\_i^TV\_j,\sigma^2)$是指高斯分布的概率密度函数。$I\_{ij}$是指示函数,表明如果用户$i$评论了电影$j$,那么其结果等与1,否则就是0。因此,上面的结果就是所有已经被评论的电影得分的乘积,也就是似然函数了。 我们给每个用户和电影的隐向量(特征向量)一个均值为0的高斯先验。有: ```math p(U|\sigma^2_U)=\prod_{i=1}^N \mathcal{N}(U_i|0,\sigma_U^2\mathbf{I}) ``` ```math p(V|\sigma^2_V)=\prod_{j=1}^M \mathcal{N}(V_j|0,\sigma_V^2\mathbf{I}) ``` 这里的$\mathbf{I}$是一个$D$维单位对角矩阵。那么,用户和电影特征的后验分布计算如下: ```math \begin{aligned} p(U,V|R,\sigma^2,\sigma_V^2,\sigma_U^2) &= p(R|U,V,\sigma^2,\sigma_V^2,\sigma_U^2)\times p(U,V)/p(R,\sigma^2,\sigma_V^2,\sigma_U^2) \\ &\\ &\sim p(R|U,V,\sigma^2,\sigma_V^2,\sigma_U^2)\times p(U,V)\\ &\\ &= p(R|U,V,\sigma^2,\sigma_V^2,\sigma_U^2)\times p(U) \times p(V) &\\ &=\prod_{i=1}^N\prod_{j=1}^M\Big[\mathcal{N}(R_{ij}|U_i^TV_j,\sigma^2)\Big]^{I_{ij}} \times \prod_{i=1}^{M}\mathcal{N}(U_i|0,\sigma_U^2\mathbf{I}) \times \prod_{j=1}^{N}\mathcal{N}(V_j|0,\sigma_V^2\mathbf{I}) \end{aligned} ``` 对两边取个$\ln$(这是我们求解中常用的方法,取ln不改变函数凹凸性,极值点位置也不便,所以最优点的解也是一样的,同时,乘积形式变成求和形式,也简单很多)。 ```math \ln p(U,V|R,\sigma^2,\sigma_V^2,\sigma_U^2) = \sum_{i=1}^{N}\sum_{j=1}^{M}I_{ij}\ln \mathcal{N}(R_{ij}|U_i^TV_j,\sigma^2) + \sum_{i=1}^{N} \ln \mathcal{N}(U_i|0,\sigma_U^2\mathbf{I}) + \sum_{j=1}^{M} \ln \mathcal{N}(V_j|0,\sigma_V^2\mathbf{I}) ``` 上面这三项都是形式完全一样,只是系数和均值方差不同,我们以其中一个为例,剩下都一样。即求解 ```math \ln \mathcal{N}(U_i|0,\sigma_U^2\mathbf{I}) ``` 我们给出用户$i$的概率密度函数: ```math \mathcal{N}(U_i|0,\sigma_U^2\mathbf{I})=-\frac{1}{ (2\pi)^{D/2} |\sigma_V^2\mathbf{I}|^{1/2}} \exp(-\frac{1}{2}U_i^T(\sigma^2_u \mathbf{I})^{-1}U_i) ``` 注意,由于$\mathbf{I}$是对角阵,那么$(\sigma^2_u \mathbf{I})^{-1}=\frac{1}{\sigma_u^2}\mathbf{I}$,所以: ```math \begin{aligned} \ln\mathcal{N}(U_i|0,\sigma_U^2\mathbf{I}) &= \ln(-\frac{1}{ (2\pi)^{D/2} |\sigma_V^2\mathbf{I}|^{1/2}}) -\frac{U_i^TU_i}{2\sigma^2_u} \\ &\\ &= -\ln( |\sigma_U^2\mathbf{I}|^{1/2} ) - \frac{U_i^TU_i}{2\sigma^2_u} + C_U \\ &\\ &= -\frac{1}{2}\ln( \sigma_U^{2D} ) - \frac{U_i^TU_i}{2\sigma^2_u} + C_U\\ &\\ &= -\frac{D}{2}\ln( \sigma_U^{2} ) - \frac{U_i^TU_i}{2\sigma^2_u} + C_U\\ \end{aligned} ``` 类似地,我们可以得到进而我们可以得到最终的公式(这里的$C\_U$是常数,后面所有的常数都合并到一起了)。公式如下:

欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
相关博客
最热博客