推荐系统中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_jx = 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.0001bprloss = 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 metricsdef 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.0all_pred[all_pred <= 0.5] = 0.0return metrics.accuracy_score(all_target, all_pred)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
