先前的是:推荐系统之 BPR 算法及 Librec的BPR算法实现【1】html
LibREC源码里的BPR算法的输入比较是:“(购买+点击)v.s.没出现的”,先前有修改过一次是让输入比较对为:“购买v.s. 点击”。
如今的状况是:以上两者结合起来,即比较对是:“(购买+点击)v.s.没出现的”+“购买v.s. 点击”的比较对。
就好比,购买了1,点击了2,而未出现的设为3和4(隐式 item)。
原先代码默认的比较对比较方式(正样本>负样本)是:1>3;1>4;2>3;2>4.;
如今还要加上一个 1>2 的比较对。
所以最终的比较对是:1>2 ;1>3;1>4;2>3;2>4.
LibREC社区的不二前辈的建议是:
写代
码:正样本只采样1-2的物品。
而后采样到1的时候,采样2-4的物品做为负样本。
采样到2的时候,采样3-4的物品做为负样本。
目前,BRP训练完的数据是没有缓存的。(——能够等下个版本。我记得@王宇峰 在实现模型的序列化和反序列化。1.3就尽快迁移到2.0吧。或者亦能够本身实现一下,用Json或者Kyro保存。参考一下相关文章。
)
【个人最终作法】
正样本 i 是已经肯定能够采样出来。即为购买+点击的item
负样本 j 来源于两部分,一个是点击无购买item,一部分是隐式item(随机)。由于两个集合没办法放一块儿,故采用随机数的方法,若是随机数等于1,采样后者,若是随机数等于0,采样前者。