【推荐算法】从零开始做推荐(六)——贝叶斯性化排序 (BPRMF) 的Tensorflow版

前言

   之前我们已经介绍了贝叶斯个性化排序(Bayesian Personalized Ranking, BPR,并基于BPR矩阵分解进行推荐实战。同传统矩阵分解一样,BPRMF也有神经网络的版本。此方法在刘建平老师的博客上已有介绍,但其评价指标和数据集划分与本系列不同。因此,本文在其基础上进行修改,方便与本系列方法一同进行比较。

  如果你对本系列(未写完,持续更新中)感兴趣,可接以下传送门:
  【推荐算法】从零开始做推荐(一)——认识推荐、认识数据
  【推荐算法】从零开始做推荐(二)——推荐系统的评价指标,计算原理与实现样例
  【推荐算法】从零开始做推荐(三)——传统矩阵分解的TopK推荐
  【推荐算法】从零开始做推荐(四)——python Keras框架 利用Embedding实现矩阵分解TopK推荐
  【推荐算法】从零开始做推荐(五)——贝叶斯个性化排序矩阵分解 (BPRMF) 推荐实战
  【推荐算法】从零开始做推荐(六)——贝叶斯性化排序矩阵分解 (BPRMF) 的Tensorflow版

核心算法

  以下内容以刘建平老师的博客为基准进行实现。

损失函数

arg ⁡ max ⁡ θ l ( θ ) = ∑ ( u , i , j ) ∈ D l n σ ( x ‾ u i − x ‾ u j ) + λ ∣ ∣ θ ∣ ∣ 2 , σ ( x ) = 1 1 + e − x \mathop{\arg\max_{θ}}\mathcal{l}(θ)=\sum_{(u,i,j)\in D} ln \sigma(\overline{x}_{ui}-\overline{x}_{uj})+\lambda||\theta||^2,\\ \sigma(x) = \frac{1}{1+e^{-x}} argθmaxl(θ)=(u,i,j)Dlnσ(xuixuj)+λθ2,σ(x)=1+ex1

求解算法

  此处写的是Tensorflow的计算图,与刘老师不一样的地方在于,此处修改了参数(与传统BPRMF的参数设定成一致),并将损失函数完全按上文提及的定义。最大化损失等于最小化损失的负数,用梯度下降进行训练。

def bpr_mf(user_count,item_count,hidden_dim):
    u = tf.placeholder(tf.int32,[None])
    i = tf.placeholder(tf.int32,[None])
    j = tf.placeholder(tf.int32,[None])

    user_emb_w = tf.get_variable("user_emb_w", [user_count + 1, hidden_dim],
                                 initializer=tf.random_normal_initializer(0, 0.001))
    item_emb_w = tf.get_variable
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lechuan_dafo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值