线性代数笔记:概率矩阵分解 Probabilistic Matrix Factorization (PMF)
概率矩阵分解模型可以解决大规模、稀疏且不平衡的数据。
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)相关推荐
- 推荐系统:矩阵分解(Matrix factorization)
目录 一.问题描述 二.算法概述 (一)BasicSVD (二)FunkSVD (三)Baseline estimates & Matrix factorization (四)Asymmetr ...
- 矩阵分解(matrix factorization)
1. 基本概念 针对高维空间中的数据集,矩阵分解通过寻找到一组基及每一个数据点在该基向量下的表示,可对原始高维空间中的数据集进行压缩表示. 令 X=[x1,⋯,xm]∈Rm×nX=[x_1,\cdot ...
- 概率矩阵分解(Probabilistic Matrix Factorization)
摘要 很多现有的协同过滤的方法既不能处理非常大的数据集,也不能容易地应对有非常少的评价的用户.在这篇论文中,我们提出了概率矩阵分解(PMF)模型,它的规模与观察值的数目线性相关,并且更重要的是,它在非 ...
- 论文笔记:Probabilistic Matrix Factorization
一.基本信息 论文题目:<Probabilistic Matrix Factorization> 发表时间:NIPS 2007 论文作者及单位: 论文地址:https://dl.acm. ...
- python 怎么取对数_概率矩阵分解(PMF)及MovieLens上的Python代码
首先对Probabilistic Matrix Factorization这篇论文的核心公式进行讲解和推导:然后用Python代码在Movielens数据集上进行测试实验. 一. 背景知识 文中作者提 ...
- 【推荐系统算法】PMF(Probabilistic Matrix Factorization)
Mnih, Andriy, and Ruslan Salakhutdinov. "Probabilistic matrix factorization." Advances in ...
- MIT线性代数笔记三 矩阵的乘法和逆矩阵
文章目录 1. 矩阵乘法 Matrix multiplication 1.1 标准方法(行乘以列) 1.2 列向量的线性组合 1.3 行向量的线性组合 1.4 分块乘法 2. 逆矩阵 2.1 逆矩阵的 ...
- NMF 非负矩阵分解(Non-negative Matrix Factorization)实践
1. NMF-based 推荐算法 在例如Netflix或MovieLens这样的推荐系统中,有用户和电影两个集合.给出每个用户对部分电影的打分,希望预测该用户对其他没看过电影的打分值,这样可以根据打 ...
- 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...
线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...
最新文章
- Hive中数据的加载和导出
- 找条朋友圈手都刷断了,原来是没有掌握正确的使用姿势...
- linux负载很高是什么原因导致的?
- Node应用的Systemd启动(转)
- WAS6集群部署及初步测试
- 刷新存储器的容量单位是什么_GD25Q80CSIG|相变存储器是什么,具备什么特点?
- Hystrix使用与分析
- js动态添加meta标签
- 嵌入式系统文件系统比较 jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs
- Java面试必问JVM调优,那.NET5呢?
- Kafka面试题全套整理 | 划重点要考!
- (转)Java线程:新特征-线程池
- 年会尽头是闲鱼!超11万人在闲鱼转卖年会奖品
- Lightroom Classic 教程,如何在 Lightroom 中裁剪并修齐照片?
- Springmvc和poi3.9导出excel并弹出下载框
- 使用spss进行系统聚类分析
- pdfobject div中预览pdf
- 学习笔记第十四篇之知乎社交网络分析
- BIM应用落地:基于BIM的群塔作业方案优化
- win10下Linux双系统
热门文章
- Oracle 12C R2-新特性-转换函数的增强
- Windows环境下搭建React Native
- 企业运维之域控篇(九)--辅助域强制占用后的操作--清除数据
- ICMP诊断报文类型
- JavaWeb学习总结(二)——Tomcat服务器学习和使用(一)
- PAT甲级1138 Postorder Traversal:[C++题解]前序遍历和中序遍历建树
- 关于epoll 水平触发在udp套接字上不生效问题的原因
- 计算机键盘是编码键盘还是非编码键盘,矩阵按键原理图_矩阵按键扫描实例
- 运行c++代码的软件_C语言入门干货:多种系统的C环境设置和简易代码运行
- github密码格式_如何使用GitHub构建一个简单的网页 (不用框架版本)