简单的基于矩阵分解的推荐算法-pmf,nmf

chenyusheng0803 chenyusheng0803     2023-02-12     662

关键词:

介绍:

推荐系统中最为主流与经典的技术之一是协同过滤技术(Collaborative Filtering),它是基于这样的假设:用户如果在过去对某些项目产生过兴趣,那么将来他很可能依然对其保持热忱。其中协同过滤技术又可根据是否采用了机器学习思想建模的不同划分为基于内存的协同过滤(Memory-based CF)与基于模型的协同过滤技术(Model-based CF)。其中基于模型的协同过滤技术中尤为矩阵分解(Matrix Factorization)技术最为普遍和流行,因为它的可扩展性极好并且易于实现,因此接下来我们将梳理下推荐系统中出现过的经典的矩阵分解方法。

 

矩阵分解:

首先对于推荐系统来说存在两大场景即评分预测(rating prediction)与Top-N推荐(item recommendation,item ranking)。评分预测场景主要用于评价网站,比如用户给自己看过的电影评多少分(MovieLens),或者用户给自己看过的书籍评价多少分(Douban)。其中矩阵分解技术主要应用于该场景。Top-N推荐场景主要用于购物网站或者一般拿不到显式评分信息的网站,即通过用户的隐式反馈信息来给用户推荐一个可能感兴趣的列表以供其参考。其中该场景为排序任务,因此需要排序模型来对其建模。因此,我们接下来更关心评分预测任务。

对于评分预测任务来说,我们通常将用户和项目(以电影为例)表示为二维矩阵的形式,其中矩阵中的某个元素表示对应用户对于相应项目的评分,1-5分表示喜欢的程度逐渐增加,?表示没有过评分记录。推荐系统评分预测任务可看做是一个矩阵补全(Matrix Completion)的任务,即基于矩阵中已有的数据(observed data)来填补矩阵中没有产生过记录的元素(unobserved data)。值得注意的是,这个矩阵是非常稀疏的(Sparse),稀疏度一般能达到90%以上,因此如何根据极少的观测数据来较准确的预测未观测数据一直以来都是推荐系统领域的关键问题。

 

基础背景:SVD 和 FunkSVD

SVD

当然SVD分解的形式为3个矩阵相乘,左右两个矩阵分别表示用户/项目隐含因子矩阵,中间矩阵为奇异值矩阵并且是对角矩阵,每个元素满足非负性,并且逐渐减小。因此我们可以只需要前  个因子来表示它。

如果想运用SVD分解的话,有一个前提是要求矩阵是稠密的,即矩阵里的元素要非空,否则就不能运用SVD分解。很显然我们的任务还不能用SVD,所以一般的做法是先用均值或者其他统计学方法来填充矩阵,然后再运用SVD分解降维。

公式如下


技术分享图片

技术分享图片

 

FUNKSVD

SVD首先需要填充矩阵,然后再进行分解降维,同时由于需要求逆操作(复杂度O(n^3)),存在计算复杂度高的问题,所以后来Simon Funk提出了FunkSVD的方法,它不在将矩阵分解为3个矩阵,而是分解为2个低秩的用户项目矩阵,同时降低了计算复杂度:

它借鉴线性回归的思想,通过最小化观察数据的平方来寻求最优的用户和项目的隐含向量表示。同时为了避免过度拟合(Overfitting)观测数据,又提出了带有L2正则项的FunkSVD:

SVD 和 FUNKSVD 的最优化函数都可以通过梯度下降或者随机梯度下降法来寻求最优解。

 

 PMF:

 技术分享图片

 

PMF是对于FunkSVD的概率解释版本,它假设评分矩阵中的元素  是由用户潜在偏好向量 和物品潜在属性向量 的内积决定的:

则观测到的评分矩阵条件概率为:

 技术分享图片

 

同时,假设用户偏好向量与物品偏好向量服从于均值都为0,方差分别为  ,  的正态分布:

根据贝叶斯公式,可以得出潜变量U,V的后验概率为:

技术分享图片

 

接着,等式两边取对数  后得到:

技术分享图片

 

最后,经过推导,我们可以发现PMF确实是FunkSVD的概率解释版本,它两个的形式一样一样的。

技术分享图片

 

NMF

在普通的SVD的运算过程中,会得到一些负数的embedding,这里,提出了一个假设:分解出来的小矩阵应该满足非负约束。

因为在大部分方法中,原始矩阵  被近似分解为两个低秩矩阵  相乘的形式,这些方法的共同之处是,即使原始矩阵的元素都是非负的,也不能保证分解出的小矩阵都为非负,这就导致了推荐系统中经典的矩阵分解方法可以达到很好的预测性能,但不能做出像User-based CF那样符合人们习惯的推荐解释(即跟你品味相似的人也购买了此商品)。在数学意义上,分解出的结果是正是负都没关系,只要保证还原后的矩阵元素非负并且误差尽可能小即可,但负值元素往往在现实世界中是没有任何意义的。比如图像数据中不可能存在是负数的像素值,因为取值在0~255之间;在统计文档的词频时,负值也是无法进行解释的。因此提出带有非负约束的矩阵分解是对于传统的矩阵分解无法进行科学解释做出的一个尝试。

其中, 分解的两个矩阵中的元素满足非负约束。






非负矩阵分解:nmf算法和聚类算法的联系与区别

...被转载,不过记得注明出处哦~前言之前梳理了一下非负矩阵分解(Nonnegativematrixfactorization,NMF),主要有:  1)准则函数及KL散度  2)NMF算法推导与实现  3)拉格朗日乘 查看详情

用spark学习矩阵分解推荐算法

...算法概述    在SparkMLlib中,推荐算法这块只实现了基于矩阵分解的协同过滤推荐算法。而基于的算法是FunkSVD算法,即将m个用户和n个物品对应的评分矩阵M分解为两个低维的矩阵:$$M_{m imesn}=P_{m 查看详情

nmf:non-negativematrixfactorization.

...档统计中,负值也是无法解释的。2.NMFNMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,使得满足,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。 &... 查看详情

文本主题模型之非负矩阵分解(nmf)(代码片段)

...面临着高维度计算量太大的问题。这里我们就介绍另一种基于矩阵分解的主题模型:非负矩阵分解(NMF),它同样使用了矩阵分解,但是计算量和处理速度则比LSI快,它是怎么做到的呢?1. 非负矩阵分解(NMF)概述    非负矩... 查看详情

推荐系统中的矩阵分解演变方式

推荐算法主要分为基于内容的算法和协同过滤.协同过滤的两种基本方法是基于邻居的方法(基于内容/物品的协同过滤)和隐语义模型.矩阵分解乃是实现隐语义模型的基石.矩阵分解依据用户对物品的评分,判断出用户和物品的隐语... 查看详情

推荐算法的python实现——mf(矩阵分解)基于tensorflow(代码片段)

1.数据集本博客用Movielens-1m数据集的ratings.dat作为推荐数据来训练MF推荐模型。第一列是用户id(user_id)、第二列是物品id(item_id)、第三列是用户对物品的评分(score)、第四列是时间戳(timestamp)。在Movielens-1m数据集中,注意ratings.dat... 查看详情

推荐算法的python实现——mf(矩阵分解)基于tensorflow(代码片段)

1.数据集本博客用Movielens-1m数据集的ratings.dat作为推荐数据来训练MF推荐模型。第一列是用户id(user_id)、第二列是物品id(item_id)、第三列是用户对物品的评分(score)、第四列是时间戳(timestamp)。在Movielens-1m数据集中,注意ratings.dat... 查看详情

推荐算法之隐语义模型(lfm)矩阵分解梯度下降算法实现(代码片段)

推荐算法之隐语义模型(LFM)矩阵分解梯度下降算法实现基于协同过滤的推荐一般分为基于近邻的推荐和基于模型的推荐,其中,基于近邻是指预测时直接使用用户已有的偏好数据,通过近邻数据来预测新物品的偏好。... 查看详情

个性化推荐中的隐语义模型

...协同过滤可以分为两种类型:邻域模型和矩阵分解模型。基于邻域的协同过滤算法包括基于用户的协同过滤算法和基于物品的协同过滤算法。隐语义模型是对矩阵分解的改进,通过矩阵分解建立了用户和隐类之间的关系,物品和... 查看详情

语义分析

...非负数约束条件之下的矩阵分解方法(NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵A,NMF算法能够寻找到一个非负矩阵U和一个非负矩阵V,使得满足,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。) ... 查看详情

线性代数笔记:概率矩阵分解probabilisticmatrixfactorization(pmf)(代码片段)

概率矩阵分解模型可以解决大规模、稀疏且不平衡的数据。1PMF的两点假设1.1.观测噪声(观测评分矩阵和近似评分矩阵之差)服从高斯噪声的正态分布        观测评分矩阵是groundtruth的矩阵,我们记为R;近似评分矩阵是... 查看详情

推荐系统中——矩阵分解

...的若干个评分对应的物品推荐给用户。可以看出这种方法简单直接。但是有一个很大的问题我们忽略了,就是SVD分解要求矩阵是稠密的,也就是说矩阵的所有位置不能有空白。所以传统的SVD实际上在推荐系统中还是比较难用的。... 查看详情

在推荐系统中使用矩阵分解

...时间】:2017-03-1620:52:39【问题描述】:我正在使用C#6.0中基于项目的协作过滤器为餐馆开发推荐系统。我想设置我的算法以尽可能好地执行,因此我对预测用户尚未评论的餐厅评分的不同方法进行了一些研究。我将从我所做的研... 查看详情

19推荐系统2矩阵分解算法——协同过滤的进化

文章目录1、矩阵分解算法的原理2、矩阵分解的求解过程3、消除用户和物品打分的偏差4、矩阵分解的优点和局限性针对协同过滤算法的头部效应较明显、泛化能力较弱的问题,矩阵分解算法被提出。矩阵分解在协同过滤算法... 查看详情

推荐系统(029~036)(代码片段)

...计型特征处理推荐系统常见反馈数据基于UGC的推荐基于UGC简单推荐的问题TF-IDF具体计算公式:TF-IDF对基于UGC推荐的改进TF-IDF算法代码示例基于协同过滤的推荐算法CF比CB的优点基于近邻的推荐基于用户的协同过滤(User-CF)基于物... 查看详情

矩阵分解在协同过滤推荐算法中的应用

  在协同过滤推荐算法总结中,我们讲到了用矩阵分解做协同过滤是广泛使用的方法,这里就对矩阵分解在协同过滤推荐算法中的应用做一个总结。(过年前最后一篇!祝大家新年快乐!明年的目标是写120篇机器学习,深度学... 查看详情

深度学习--基于深度矩阵分解的属性表征学习

...开始讲解paper前,先学一些基础概念:(1)矩阵分解简单概述在机器学习领域,矩阵分解家族是经常遇到的一类算法,如:PCA、K-means、NMF、SNMF、谱聚类、稀疏编码、SVD、白化、ICA 查看详情

机器学习笔记:非负矩阵分解问题nmf(代码片段)

...on-negativematrixfactorization),即对于任意给定的一个非负矩阵V,其能够寻找到一个非负矩阵W和一个非负矩阵H,满足条件V=W*H,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积。        其中,V矩阵中每一... 查看详情