基于矩阵分解的推荐算法

一,相关理论介绍
矩阵分解确实可以解决一些近邻模型无法解决的问题,近邻模型存在的问题:1、物品之间存在相关性,信息量并不是随着向量维度增加而线性增加 2、矩阵元素稀疏,计算结果不稳定,增减一个向量维度,导致紧邻结果差异很大的情况出现。

矩阵分解就是把原来的大矩阵,近似的分解成小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵

我们知道,要做推荐系统,最基本的一个数据就是,用户-物品的评分矩阵,如下图1所示

深度学习的训练矩阵怎么排列的 深度矩阵分解_人工智能

图1

矩阵中,描述了5个用户(U1,U2,U3,U4 ,U5)对4个物品(D1,D2,D3,D4)的评分(1-5分),- 表示没有评分,现在目的是把没有评分的 给预测出来,然后按预测的分数高低,给用户进行推荐。

如何预测缺失的评分呢?对于缺失的评分,可以转化为基于机器学习的回归问题,也就是连续值的预测,对于矩阵分解有如下式子,R是类似图1的评分矩阵,假设NM维(N表示行数,M表示列数),可以分解为P跟Q矩阵,其中P矩阵维度NK,P矩阵维度K*M。

深度学习的训练矩阵怎么排列的 深度矩阵分解_算法_02

式子1

对于P,Q矩阵的解释,直观上,P矩阵是N个用户对K个主题的关系,Q矩阵是K个主题跟M个物品的关系,至于K个主题具体是什么,在算法里面K是一个参数,需要调节的,通常10~100之间。

深度学习的训练矩阵怎么排列的 深度矩阵分解_算法_03

式子2

对于式子2的左边项,表示的是R^ 第i行,第j列的元素值,对于如何衡量,我们分解的好坏呢,式子3,给出了衡量标准,也就是损失函数,平方项损失,最后的目标,就是每一个元素(非缺失值)的e(i,j)的总和 最小

深度学习的训练矩阵怎么排列的 深度矩阵分解_深度学习的训练矩阵怎么排列的_04

式子3

OK,目前现在评分矩阵有了,损失函数也有了,该优化算法登场了,下面式子4是,基于梯度下降的优化算法,p,q里面的每个元素的更新方式

深度学习的训练矩阵怎么排列的 深度矩阵分解_机器学习_05

深度学习的训练矩阵怎么排列的 深度矩阵分解_机器学习_06

式子4


然而,机器学习算法都喜欢加一个正则项,这里面对式子3稍作修改,得到如下式子5,beita 是正则参数

深度学习的训练矩阵怎么排列的 深度矩阵分解_算法_07


式子5

相应的p,q矩阵各个元素的更新也换成了如下方式

深度学习的训练矩阵怎么排列的 深度矩阵分解_人工智能_08


式子6

至此,P,Q矩阵元素求出来了之后,计算某个用户i对某个物品j的评分计算就是p(i,1)*q(1,j)+p(i,2)*q(2,j)+…+p(i,k)*q(k,j)。

矩阵分解本质上都是在预测用户对一个物品的偏好程度,哪怕不是预测评分,只是预测隐式反馈,也难逃这一个事实。

得到这样的矩阵分解结果后,常常在实际使用时,又是用这个预测结果来排序。所以,从业者们称想要模型的预测误差最小化,结果绕了一大圈最后还是只想要一个好点的排序。

这种针对单个用户对单个物品的偏好程度进行预测,得到结果后再排序的问题,在排序学习中的行话叫做point-wise,其中point意思就是:只单独考虑每个物品,每个物品像是空间中孤立的点一样,与之相对的,还有直接预测物品两两之间相对顺序的问题,就叫做pair-wise

之前说的矩阵分解都属于point-wise模型。这类模型存在的问题是只能收集到正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准去使劲逼近这些样本。逼近正样本没问题,但是同时逼近的负样本只是缺失值而已,还不知道真正呈现在用户面前,到底是不喜欢还是喜欢呢?虽然这些模型采取了一些措施来规避这个问题,比如负样本采样,但是尴尬还是存在的,为了排序而绕路也是事实。

更直接的推荐模型应该是:能够较好地为用户排列出更好的物品相对顺序,而非更精确的评分。

针对以上问题提出的方法是:贝叶斯个性化排序,简称BPR模型
下一部介绍BPR算法
详情请见 BPR算法