推荐系统中BPR损失及对应的AUC计算

AUC:
AUC是而分类模型中使用的主要离线评测指标,其不关注具体的得分,只关注排序结果。
AUC指标有两种解释方法:
1.“曲线下面积”
2.排序能力 (若AUC=0.7,则可理解为:给定一个正样本和一个负样本,在70%的情况下模型对正样本的打分高于对负样本的打分,在这个解释下我们关心的只有正负样本之间分数的高低而具体的分值无关紧要)

BPR损失
该损失考虑用户物品交互中的可观察项和不可观察项的相对顺序,BPR假定更能反映出用户偏好的可观察项的交互相较于那些不可观察项来说应该赋予高的预测值
在这里插入图片描述
关键代码实现:
1.数据集中需要构建三元组(u,I,j) 为用户u点击i(正例)的同时未点击j(负例).

# MF predict: u_i > u_j
    x = tf.reduce_sum(tf.multiply(u_emb, (i_emb - j_emb)), 1, keep_dims=True)
# AUC for one user:
    # reasonable iff all (u,i,j) pairs are from the same user
    # 
    # average AUC = mean( auc for each user in test set)
    mf_auc = tf.reduce_mean(tf.to_float(x > 0))	
    
    l2_norm = tf.add_n([
            tf.reduce_sum(tf.multiply(u_emb, u_emb)), 
            tf.reduce_sum(tf.multiply(i_emb, i_emb)),
            tf.reduce_sum(tf.multiply(j_emb, j_emb))
        ])
    train_op = tf.train.GradientDescentOptimizer(0.01).minimize(bprloss)

    regulation_rate = 0.0001
    bprloss = regulation_rate * l2_norm - tf.reduce_mean(tf.log(tf.sigmoid(x)))

待解决疑问:
所以在使用BPR损失的时候计算AUC只需计算模型对正样本预测分数>负样本预测分数的个数平均值就可以了么??

完整代码详见参考文献2
References:
[1] https://zhuanlan.zhihu.com/p/24217322 (AUC详解)
[2] https://www.cnblogs.com/pinard/p/9163481.html (tensorflow实现BPR损失及对应的AUC)

======================
分类问题场景下AUC指标的计算方法:

  • 使用sklearn下的metrics包
from sklearn import metrics

def compute_auc(all_target, all_pred):
    #fpr, tpr, thresholds = metrics.roc_curve(all_target, all_pred, pos_label=1.0)
    return metrics.roc_auc_score(all_target, all_pred)


def compute_accuracy(all_target, all_pred):
    all_pred[all_pred > 0.5] = 1.0
    all_pred[all_pred <= 0.5] = 0.0
    return metrics.accuracy_score(all_target, all_pred)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值