概率矩阵分解模型可以解决大规模、稀疏且不平衡的数据。

1 PMF的两点假设

1.1.观测噪声(观测评分矩阵和近似评分矩阵之差)服从高斯噪声的正态分布

观测评分矩阵是ground truth的矩阵,我们记为R;近似评分矩阵是通过矩阵分解的方法求得的矩阵

  • 由这一条假设我们知道,R与 之间的差距服从零均值的高斯分布,也即:

  • 将 移到右边去,有:

·

  • 而在矩阵分解问题里面,观测评分矩阵可以表示为用户潜在特征矩阵P和物品潜在特征矩阵Q的乘积形式,即:

  • 将上面两条合并,有:

于是观测评分矩阵对于特征矩阵P、Q,误差σ的条件概率为

其中:

N 用户数
M 物品数
P 用户潜在特征矩阵
Q 物品潜在特征矩阵
R  观测评分矩阵(ground truth的矩阵)
误差项
指示函数,表示如果用户u对物品i有过评分,则其值为1,否则为0

相当于对每一项(u-ζ ),我们都去计算相应的条件概率,然后求和

1.2.用户潜在特征矩阵P和物品潜在特征矩阵Q服从一个均值为0的高斯先验

2 用户和物品的特征矩阵的后验分布

由贝叶斯公式可知用户和物品的特征矩阵的后验分布如下:

因为 不会影响P,Q的后验估计,所以:

对等式两遍同时取ln

复习一下多元高斯分布的概率分布函数:

于是

取完ln之后,有:

同理,有:

代入

有:

最大化上式log的后验概率,等价于最小化如下的目标函数J(p,q):

其中 ,这就是我们熟悉的最小化平方差和正则化项之和的形式

(这里的Fro是Frobenius 范数,见线性代数笔记:Frobenius 范数_UQI-LIUWJ的博客-CSDN博客)

转换成矩阵的形式有:

3 优化目标函数

我们这里采用SGD来进行优化。直到收敛或达到最大迭代次数。

3.1 求解损失函数的负梯度

3.2 根据负梯度变化更新变量

4 PMF优化小trick

由于原来的线性高斯模型做预测时,会产生有效评分范围之外的评分值。因此可以使用一个logistic 函数来代替原来的简单的线性高斯模型,使得预测评分值在有效范围内。

因此可以将评分矩阵的条件概率修改如下

原始评分x∈[1,K]可以通过logistic函数映射到[0,1]区间,然后再去计算

5 Constrained PMF

PMF被拟合后,用户的特征会趋于先验的均值,因而评分也会接近物品的平均评分。Constrained PMF就是对此进行约束

我们引入矩阵 ,其中W表示一个潜在的相似性约束矩阵,Y表示用户潜在特征的一个补偿矩阵(先验分布均值之上,属于各个用户的偏移量)

于是每个用户对应的特征向量为:

这里I还是指示矩阵(P的每一列还是用户的特征)

于是条件分布为:

同样根据PMF,此时的目标函数为

5.1 爱因斯坦乘积实现constrain

这一部分怎么实现,我想了一段时间

我们先定义几个数据:

import torchY=torch.arange(12).reshape(3,4)
'''
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11]])
'''
W=torch.arange(6).reshape(3,2)
'''
tensor([[0, 1],[2, 3],[4, 5]])
'''
i=torch.arange(8).reshape(4,2)
'''
tensor([[0, 1],[2, 3],[4, 5],[6, 7]])
'''

根据要求,Yi表示Y的第i列,Yi受到以下部分的影响第二个式子的分布是I第i列的和,我们记为sum(I,i)

对于Y的每一个元素:

结合python 笔记:爱因斯坦求和 einsum_UQI-LIUWJ的博客-CSDN博客的知识,我们可以用如下形式表示之

np.einsum('bc,ac->ab',i,W)/torch.sum(i,axis=1)
'''
tensor([[1.0000, 0.6000, 0.5556, 0.5385],[3.0000, 2.6000, 2.5556, 2.5385],[5.0000, 4.6000, 4.5556, 4.5385]], dtype=torch.float64)
'''

与之对比,我们就最暴力的方法来计算这个,结果是一样的:

a0=(W[:,1]*i[0,1]+W[:,0]*i[0,0])/(0+1)
a1=(W[:,1]*i[1,1]+W[:,0]*i[1,0])/(2+3)
a2=(W[:,1]*i[2,1]+W[:,0]*i[2,0])/(4+5)
a3=(W[:,1]*i[3,1]+W[:,0]*i[3,0])/(6+7)
torch.cat((a0.reshape(3,1),a1.reshape(3,1),a2.reshape(3,1),a3.reshape(3,1)),1
'''
tensor([[1.0000, 0.6000, 0.5556, 0.5385],[3.0000, 2.6000, 2.5556, 2.5385],[5.0000, 4.6000, 4.5556, 4.5385]])
'''

线性代数笔记:概率矩阵分解 Probabilistic Matrix Factorization (PMF)相关推荐

  1. 推荐系统:矩阵分解(Matrix factorization)

    目录 一.问题描述 二.算法概述 (一)BasicSVD (二)FunkSVD (三)Baseline estimates & Matrix factorization (四)Asymmetr ...

  2. 矩阵分解(matrix factorization)

    1. 基本概念 针对高维空间中的数据集,矩阵分解通过寻找到一组基及每一个数据点在该基向量下的表示,可对原始高维空间中的数据集进行压缩表示. 令 X=[x1,⋯,xm]∈Rm×nX=[x_1,\cdot ...

  3. 概率矩阵分解(Probabilistic Matrix Factorization)

    摘要 很多现有的协同过滤的方法既不能处理非常大的数据集,也不能容易地应对有非常少的评价的用户.在这篇论文中,我们提出了概率矩阵分解(PMF)模型,它的规模与观察值的数目线性相关,并且更重要的是,它在非 ...

  4. 论文笔记:Probabilistic Matrix Factorization

    一.基本信息 论文题目:<Probabilistic Matrix Factorization> 发表时间:NIPS  2007 论文作者及单位: 论文地址:https://dl.acm. ...

  5. python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码

    首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导:然后用Python代码在Movielens数据集上进行测试实验. 一. 背景知识 文中作者提 ...

  6. 【推荐系统算法】PMF(Probabilistic Matrix Factorization)

    Mnih, Andriy, and Ruslan Salakhutdinov. "Probabilistic matrix factorization." Advances in ...

  7. MIT线性代数笔记三 矩阵的乘法和逆矩阵

    文章目录 1. 矩阵乘法 Matrix multiplication 1.1 标准方法(行乘以列) 1.2 列向量的线性组合 1.3 行向量的线性组合 1.4 分块乘法 2. 逆矩阵 2.1 逆矩阵的 ...

  8. NMF 非负矩阵分解(Non-negative Matrix Factorization)实践

    1. NMF-based 推荐算法 在例如Netflix或MovieLens这样的推荐系统中,有用户和电影两个集合.给出每个用户对部分电影的打分,希望预测该用户对其他没看过电影的打分值,这样可以根据打 ...

  9. 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...

    线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...

最新文章

  1. Hive中数据的加载和导出
  2. 找条朋友圈手都刷断了,原来是没有掌握正确的使用姿势...
  3. linux负载很高是什么原因导致的?
  4. Node应用的Systemd启动(转)
  5. WAS6集群部署及初步测试
  6. 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?
  7. Hystrix使用与分析
  8. js动态添加meta标签
  9. 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
  10. Java面试必问JVM调优,那.NET5呢?
  11. Kafka面试题全套整理 | 划重点要考!
  12. (转)Java线程:新特征-线程池
  13. 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
  14. Lightroom Classic 教程,如何在 Lightroom 中裁剪并修齐照片?
  15. Springmvc和poi3.9导出excel并弹出下载框
  16. 使用spss进行系统聚类分析
  17. pdfobject div中预览pdf
  18. 学习笔记第十四篇之知乎社交网络分析
  19. BIM应用落地:基于BIM的群塔作业方案优化
  20. win10下Linux双系统

热门文章

  1. Oracle 12C R2-新特性-转换函数的增强
  2. Windows环境下搭建React Native
  3. 企业运维之域控篇(九)--辅助域强制占用后的操作--清除数据
  4. ICMP诊断报文类型
  5. JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
  6. PAT甲级1138 Postorder Traversal:[C++题解]前序遍历和中序遍历建树
  7. 关于epoll 水平触发在udp套接字上不生效问题的原因
  8. 计算机键盘是编码键盘还是非编码键盘,矩阵按键原理图_矩阵按键扫描实例
  9. 运行c++代码的软件_C语言入门干货:多种系统的C环境设置和简易代码运行
  10. github密码格式_如何使用GitHub构建一个简单的网页 (不用框架版本)