【推薦系統之 BPR 算法】
1、關於BPR的論文原文: BPR: Bayesian Personalized Ranking from Implicit Feedback
2、參考1:論文快讀 - BPR: Bayesian Personalized Ranking from Implicit Feedback (該博主的網站不錯,尤其論文快讀模塊)
3、參考2:結合librec源代碼讀論文:Bayesian personalized ranking系列方法 (該博主的網站亦不錯)
【Librec的BPR算法實現】
Librec的推薦系統庫可以說是很強大了。郭老師團隊特別厲害!
我們原先是用Librec1.3版本里面的BPR算法作為對比實驗。現在需要有所修改:
數據集是“購買/點擊的商品”,想要計算其購買概率。
LibREC源碼里的BPR算法的輸入比較是“(購買+點擊)v.s.沒出現的”,目前需要的是“購買v.s. 點擊”。因此需要改一下源碼:
// 那就改BPRRecoomender這里, 把數據集中購買的記錄標記為1,點擊卻沒購買的記錄標記為0。然后就當作正負樣本就行了。
// 1.3 這個版本沒有BPRRecoomender,而是BPR.java 。 1.3叫BPR,2.0叫BPRRecommender。一樣的,就改對應的負采樣。
// 正采樣不用改,點擊記錄分數如果是0,會自動被忽略。因此就只需要改負采樣就好了。
// 原來的代碼是把所有每個用戶正樣本之外的物品都假設為負樣本啊。
// j 表示的是負樣本是嗎?可是它這里怎么是用的隨機數??——就是把這里改成不要用隨機數。


// 以下兩個區別:
// 是,2.0版本會過濾掉0。 1.3版本不會過濾掉0。
// 可以在外部判斷一下。如果data[index]是0,那么當作負樣本,data[index]是1當作正樣本。
這邊改完之后應該沒有 相關的配置文件有需要改的。沒有影響到配置項。
但是划分器那里可能也得調整。現在得划分器(Splitter)可沒有按照0,1提取正樣本用做后續的評估。

------------------------------------------------------------------
-------------------------------------------------------------------------
也就是在這里也需要改: