前天学习了贝叶斯个性化推荐,现在写篇博客来总结一下知识点,说是总结,其实也就是把里面的公式抄一下,说说其中的思想以及python代码的实现
首先,贝叶斯个性化推荐是基于矩阵分解来做的,都是把USER-ITEM矩阵分解为一个user-k,一个item-k的矩阵的乘机形式,唯一不同的是BPR利用了贝叶斯定理的形式来处理这个矩阵,也就是
P ( θ ∣ > u ) = P ( > u ∣ θ ) P ( θ ) p ( > u ) P(\theta|{}^{>}u)=\frac{P({}^{>}u|\theta)P(\theta)}{p({}^{>}u)} P(θ∣>u)=p(>u)P(>u∣θ)P(θ)
我们知道对于似然函数来说,每个用户>u的矩阵,都会导致一个P(θ)的值,那么事件θ发生的概率就是P(θ|>u),所以我们的目的是力图使这个似然值最大。
也就是;每个用户之间相对独立,这个用户对每个物品的喜爱程度不受其他用户的影响
用户u对物品i和物品j的喜爱程度不受其他物品的干扰。
而式子中的>u表示的是用户的偏序集,也就是用户对于各种物品的喜爱程度,θ则表示这矩阵分解中的两个参数矩阵
接下来,就是对这个式子的处理化简。
首先对于等式右边的分母,我们可以看出对于所有的用户来说,这个分母都是一样的,那么我们可以把它省略掉,方便后续的处理。那么式子就变成了:
P ( > u ∣ θ ) P ( θ ) P(>u|\theta)P(\theta) P(>u∣θ)P(θ)
然后就是 P ( > u ∣ θ ) P(>u|\theta) P(>u∣θ)的处理,
∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ ( U I I ) ​ P ( i > u , j ∣ θ ) δ ( ( u , i , j ) ∈ D ) ​ ( 1 − P ( i > u , j ∣ θ ) δ ( ( u , i , j ) ̸ ∈ D ) ) \prod_{u\in U } P(>u|\theta)=\prod_{(u,i,j)\in(UII)}\!P(i>u,j|\theta)^{\delta((u,i,j)\in D)}\!(1-P(i>u,j|\theta)^{\delta((u,i,j)\not\in D)}) u∈U∏P(>u∣θ)=(u,i,j)∈(UII)∏P(i>u,j∣θ)δ((u,i,j)∈D)(1−P(i>u,j∣θ)δ((u,i,j)̸∈D))
同时对于 δ \delta δ函数来说,如果括号里面的值为正,那么返回1,否则返回0,因为本题在处理时考虑的是u更喜欢i相对于j,所以式子就变成了
∏ u ∈ U P ( > u ∣ θ ) = ∏ ( u , i , j ) ∈ ( U , I , I ) P ( i > u , j ∣ θ ) \prod_{u \in U}P(>_{u}|\theta)=\prod_{(u,i,j) \in(U,I,I)}P(i>_{u},j|\theta) ∏u∈UP(>u∣θ)=∏(u,i,j)∈(U,I,