简单的基于矩阵分解的推荐算法-PMF, NMF

介绍:机器学习

推荐系统中最为主流与经典的技术之一是协同过滤技术(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网站

SVDspa

固然SVD分解的形式为3个矩阵相乘,左右两个矩阵分别表示用户/项目隐含因子矩阵,中间矩阵为奇异值矩阵而且是对角矩阵,每一个元素知足非负性,而且逐渐减少。所以咱们能够只须要前  个因子来表示它。3d

若是想运用SVD分解的话,有一个前提是要求矩阵是稠密的,即矩阵里的元素要非空,不然就不能运用SVD分解。很显然咱们的任务还不能用SVD,因此通常的作法是先用均值或者其余统计学方法来填充矩阵,而后再运用SVD分解降维。blog

公式以下排序


 

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之间;在统计文档的词频时,负值也是没法进行解释的。所以提出带有非负约束的矩阵分解是对于传统的矩阵分解没法进行科学解释作出的一个尝试。

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

相关文章
相关标签/搜索