1. 程式人生 > >Bayesian Personalized Ranking(BPR個性化排序)

Bayesian Personalized Ranking(BPR個性化排序)

在這裡插入圖片描述
如題,在推薦系統中我們在推薦給使用者的商品中一定是需要先後順序的,即我們需要關心的是使用者將會更喜歡我們所推薦的商品,從而得到–個性化排序。但是沒錯,前幾篇所整理的方法目的也是為了預測使用者喜好,但往往我們只能通過觀察到的正例去估計暗含著負例與缺失值的“?”中,而實際填充也如上圖一樣,一般用0做填充。然後基於此計算出得分,從某種意義上也可以得到使用者優先順序的排序,所以首先同樣的我們需要解決的問題還是:
對於使用者集U和物品集I的對應的 U × I 的預測排序矩陣 X,避免矩陣分解所需要的稠密性,同樣採取分解為兩個矩陣,即: X

= W H T \overline{X} = WH^T 然後同樣需要尋找最好的W和H,使其與真正X的誤差最小,但是與先前的
SVD
不同,不是嘗試對專案打分再排序,而且從整個思想上進行優化,所以作為先驗與後驗的橋樑----貝葉斯的思想。

在這裡插入圖片描述
**首先為了排序,引入三元組的概念:即如果使用者u在同時有物品 i 和 j 的時候點選了 i,那麼定義三元組<u,i,j><u,i,j>,即對使用者u來說,i 的排序要比 j 靠前。如上圖中,在左側顯示了觀測資料和一些未知的“?”資料,三元組處理後,變成在右側的,“+” 表示使用者更喜歡項 i 大於 j 項;“-” 表示更喜歡j而不是i。

基於使用者的全序關係的貝葉斯就變成:
P

( θ &gt; u ) = P ( &gt; u θ ) P ( θ ) P ( &gt; u ) P(\theta|&gt;_u) = \frac{P(&gt;_u|\theta)P(\theta)}{P(&gt;_u)}
其中W和H用 θ \theta 表示,為了得到最好的W,H,即得到最好的 θ \theta ,需要優化後面的這一堆,同樣的分母(某使用者的全序,對所有的都是物品一樣)一樣,可以先捨去不考慮。那麼對於分子第一項可以有最大似然估計: u U P ( &gt; u θ ) = ( u , i , j ) ( U × I × I ) P ( i &gt; u j θ ) δ ( ( u , i , j ) D ) ( 1 P ( i &gt; u j θ ) ) δ ( ( u , j , i ) ̸ D ) \prod_{u \in U}P(&gt;_u|\theta) = \prod_{(u,i,j) \in (U \times I \times I)}P(i &gt;_u j|\theta)^{\delta((u,i,j) \in D)}(1-P(i &gt;_u j|\theta))^{\delta((u,j,i) \not\in D) } 其中 δ ( b ) = { 1 i f &ThickSpace; b &ThickSpace; i s &ThickSpace; t r u e 0 e l s e \delta(b)= \begin{cases} 1&amp; {if\; b\; is \;true}\\ 0&amp; {else} \end{cases}
P(i >u j | θ)即<u,i,j>,i 排名高於 j。
但是其實,既然是排序–定義使 i 大於 j,那麼就使P(i >u j|θ)出現的概率越大越好就行了。那麼 P ( i &gt; u j θ ) = σ ( x u i j ( θ ) ) σ P(i &gt;_u j|\theta) = \sigma(\overline{x}_{uij}(\theta)),其中\sigma函式用於優化計算 而且如果要是一方的概率越大,那麼另一方就小就好,那麼自然期望他們之間的差異就越大即: x u i j = x u i x u j \overline{x}_{uij} = \overline{x}_{ui} - \overline{x}_{uj} 而且這就已經直接是預測矩陣X中的對應位置的值了。即分子第一項變為: u U P ( &gt; u θ ) = ( u , i , j ) D σ ( x u i x u j ) \prod_{u \in U}P(&gt;_u|\theta) = \prod_{(u,i,j) \in D} \sigma(\overline{x}_{ui} - \overline{x}_{uj})
然後分子第二項 P ( θ ) P(\theta) ,直接使用貝葉斯假設,即 θ \theta 符合正太分佈,而總所周知,正太分佈的對數形式是跟 θ 2 ||\theta||^2 成比的!(除了優化式子外,居然還能曲線救國,漂亮的完成了正則化的作用??所以直接假設使用引數符合正太分佈的操作設計很巧妙呀)那麼整個下來的的式子就直接變成了: l n &ThickSpace; P ( θ &gt; u ) l n &ThickSpace; P ( &gt; u θ ) P ( θ ) = l n &ThickSpace; ( u , i , j ) D σ ( x u i x u j ) + l n P ( θ ) = ( u , i , j ) D l n σ ( x u i x u j ) + λ θ 2 &ThickSpace; ln\;P(\theta|&gt;_u) \propto ln\;P(&gt;_u|\theta)P(\theta) = ln\;\prod\limits_{(u,i,j) \in D} \sigma(\overline{x}_{ui} - \overline{x}_{uj}) + ln P(\theta) = \sum\limits_{(u,i,j) \in D}ln\sigma(\overline{x}_{ui} - \overline{x}_{uj}) + \lambda||\theta||^2\;