BPR 贝叶斯个性化排序
相对于其他矩阵分解,不管是显式分解还是隐式分解,他们最后的得分都将经过排序后选择出要推荐的前n个。与其用均方根的损失函数去逼近原矩阵并选择评分最高分商品,那么我们为什么不直接以排序为目的来训练呢?
由此我们提出了pairwise,最早我们的排序算法是pointwise其思想就是传统矩阵分解,补全单个点的值并排序。pairwise的思想是使用成对的序列,比如用户u在观看i,j商品时观看了i,那么i>j。
我们的思路,将原矩阵分解
分解后的矩阵乘积逼近打分矩阵。(该打分矩阵与原矩阵有差距,该打分矩阵是不存在的,我们只是用两个矩阵代表他)
接下来我们来看目标函数。
在此之前我们先讲讲怎么从贝叶斯角度看待损失函数。
我们最小化损失函数被看做是不断趋近于后验分布的过程。
在本题中,我们的目标函数可以看做
theta表示矩阵W和H,>u表示排序。
由于p(>u)对于同一个用户都是相同的。
那么我们最大化目标函数,成了最大化分子项。
对于前项,我们可以这样计算
将每两个商品比较。
对于后者p(theta),作为先验概率,在贝叶斯理论中,其就是正则项,而前者损失项看做似然。
如果p(theta)服从的是拉布拉斯分布,那么我们用L1正则。如果服从高斯分布,我们用L2正则。
简单说说两个正则的区别,L1趋于将特征值归零来简化模型。L2趋于将特征值都趋于0但不为0,L2更好的结合了多个特征值关系,所以效果更好,但是其算法的运行速度没有L1快。
由图片我们也可以看出,我们对似然概率的计算是使用sigma函数
其中的Xu12表示用户u第1和第2个商品分数之差。
矩阵分解的作用主要就是为了得到上述的实值函数Xu12。矩阵分解后可得到
注意这里的Wuf hif是分解矩阵,其中hif矩阵是两个用户隐矩阵乘积
学习模型。有了损失函数,我们可以用拟牛顿法或者梯度下降来学习。
最后得到的更新式子只与Xuij有关。
训练集问题。我们训练是以三元组为单位,
<u ,i ,j>,因为我们所需的Xuij是个实数,是用户u的i,j商品评分之差。
****重点
Xuij是一个学习到的值,由于是用Xui-Xuj,且要令损失函数最大,所以Xuij>0且越大越好。Xui是由商品id行乘权重矩阵得来,所以这相当于非线性的函数映射每个商品id都会得到一个合理的X,且用于计算时使损失函数最大
于是我们把训练集分为M*N*N的形式更方便查询。(M用户数,N商品数)
然而用原矩阵应该问题也不大,只不过要给出负例和空缺值的判断才行。
总结,该算法和普通的矩阵分解算法一样,其特点是很容易的从巨大的商品中找出少量商品推给用户。和普通分解算法的区别在于目标函数的不同,前者目标是尽可能的趋近原矩阵,而后者是尽可能大的找出顺序。