推荐系统中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)

你可能感兴趣的:(代码相关问题,推荐系统,tensorflow)