【推荐系统之 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 表示的是负样本是吗?可是它这里怎么是用的随机数??——就是把这里改成不要用随机数。
 
推荐系统之 BPR 算法及  Librec的BPR算法实现【1】-LMLPHP
推荐系统之 BPR 算法及  Librec的BPR算法实现【1】-LMLPHP
 
   
// 以下两个区别:
 //  是,2.0版本会过滤掉0。 1.3版本不会过滤掉0。
     // 可以在外部判断一下。如果data[index]是0,那么当作负样本,data[index]是1当作正样本。
 
这边改完之后应该没有 相关的配置文件有需要改的。没有影响到配置项。
但是划分器那里可能也得调整。现在得划分器(Splitter)可没有按照0,1提取正样本用做后续的评估。
推荐系统之 BPR 算法及  Librec的BPR算法实现【1】-LMLPHP

------------------------------------------------------------------

推荐系统之 BPR 算法及  Librec的BPR算法实现【1】-LMLPHP

-------------------------------------------------------------------------

也就是在这里也需要改:

推荐系统之 BPR 算法及  Librec的BPR算法实现【1】-LMLPHP

04-26 20:29