zoukankan      html  css  js  c++  java
  • 推荐系统之 BPR 算法及 Librec的BPR算法实现【1】

    【推荐系统之 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提取正样本用做后续的评估。

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

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

     也就是在这里也需要改:

  • 相关阅读:
    userAgent判断当前设备类型
    h5+css3最简单的图片飞入以及淡入淡出效果
    ruby的form中常用的控件
    初识swipe.js
    后缀为7z的文件解码
    python all()函数
    flask web表单
    flask过滤器
    flask学习笔记1.21
    py学习笔记1.13、1.14
  • 原文地址:https://www.cnblogs.com/shenxiaolin/p/8593755.html
Copyright © 2011-2022 走看看