原文:https://blog.csdn.net/weixin_41362649/article/details/82848132
http://www.cnblogs.com/pinard/p/9128682.html
矩阵分解
矩阵分解确实可以解决一些近邻模型无法解决的问题,近邻模型存在的问题:1、物品之间存在相关性,信息量并不是随着向量维度增加而线性增加 2、矩阵元素稀疏,计算结果不稳定,增减一个向量维度,导致紧邻结果差异很大的情况出现。
矩阵分解就是把原来的大矩阵,近似的分解成小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵。
具体来说就是,假设用户物品的评分矩阵A是m乘n维,即一共有m个用户,n个物品.通过一套算法转化为两个矩阵U和V,矩阵U的维度是m乘k,矩阵V的维度是n乘k。
这两个矩阵的要求就是通过下面这个公式可以复原矩阵A:

类似这样的计算过程就是矩阵分解,还有一个更常见的名字SVD,但是SVD和矩阵分解不能划等号,因为除了SVD还有一些别的矩阵分解方法。


矩阵分解的不足
矩阵分解本质上都是在预测用户对一个物品的偏好程度,哪怕不是预测评分,只是预测隐式反馈,也难逃这一个事实。
得到这样的矩阵分解结果后,常常在实际使用时,又是用这个预测结果来排序。所以,从业者们称想要模型的预测误差最小化,结果绕了一大圈最后还是只想要一个好点的排序。
这种针对单个用户对单个物品的偏好程度进行预测,得到结果后再排序的问题,在排序学习中的行话叫做point-wise,其中point意思就是:只单独考虑每个物品,每个物品像是空间中孤立的点一样,与之相对的,还有直接预测物品两两之间相对顺序的问题,就叫做pair-wise。
之前说的矩阵分解都属于point-wise模型。这类模型存在的问题是只能收集到正样本,没有负样本,于是认为缺失值就是负样本,再以预测误差为评判标准去使劲逼近这些样本。逼近正样本没问题,但是同时逼近的负样本只是缺失值而已,还不知道真正呈现在用户面前,到底是不喜欢还是喜欢呢?虽然这些模型采取了一些措施来规避这个问题,比如负样本采样,但是尴尬还是存在的,为了排序而绕路也是事实。
更直接的推荐模型应该是:能够较好地为用户排列出更好的物品相对顺序,而非更精确的评分。
针对以上问题提出的方法是:贝叶斯个性化排序,简称BPR模型。


贝叶斯个性化排序(BRP模型)
参考http://www.cnblogs.com/pinard/p/9128682.html