码迷,mamicode.com
首页 > 其他好文 > 详细

AUC注记

时间:2018-04-03 17:36:33      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:矩阵   ever   遍历   出现   问题   softmax   www.   www   一句话   

训练Embedding的时候,程序里面发现了AUC,因此处正样本始终只有一个(参考上一篇)为了克服样本不平衡带来的metric指示出现不能反应模型真实能力的问题(比如acc中,模型全偏向比重大的标签),需要AUC进行判别。以前试过几次,过段时间就忘了,希望这次理解深刻些。

关于理解

先附上链接:机器学习和统计里面的auc怎么理解? - 小小丘的回答 - 知乎
提炼一下顿悟的地方,关键句:AUC: 在二分类问题中,从正样本集和负样本集中各自随机抽样一个样本\(s^1、s^0\),用模型得到两个分类结果\(y^0=model(s^0), y^1=model(s^1)\), AUC被定义为 \(y^1> y^0\)的概率
听起来可能还是有些绕,具体考虑一下该怎么求这个值就会清楚些。
首先构建样本对集合,每个样本对:\(ss_{i,j}=(s^1_i,s^0_j), i\in [0,M-1], j\in [0,N-1]\),从这个集合里面抽样可以满足各自随机抽样的的要求。对样本对进行概率比较:\(I_{i,j}=1~if~ y^1_i > y^0_j~else~ 0\),这样可以得到一个二值矩阵\(I\)。求这个矩阵的平均数,就是AUC
这样之后,还可以进一步考虑一个例子。比如,现在有一个真钞和一个伪钞(已知一定有真假之分),用模型进行鉴别,如果模型的AUC指标好,我选择模型鉴定为真的钞票时(输出值更大那个)更自信。考虑一下自信从哪儿来的?
重新考虑一下矩阵\(I\),已知每个样本对里面一定有一个正样本,所以最佳状态应该是每个元素都为1,即每个正样本的分数都排在负样本上方。如果分类的阈值能够自动调节到恰好包含所有正样本(区别于softmax里面的0.5固定值),那么AUC可以理解为当模型预测为正样本时的命中率,或者说被预测为正样本中正样本的纯度。(所以更自信...)

关于计算

上面矩阵的方法容易理解,但不易于计算\(O(MN)\)。实际计算时,通过排序可以降至\(O((M+N)log(M+N))+O(M+N)\)。参考上面知乎的解答。主要意思是排序后,每访问到一个正样本就可以确定有多少负样本位于下方。相当于,行遍历矩阵\(I\)时,每次都直接确定该行的元素和(\(1\)的数量)。附上一段计算程序

# mxnet/example/nce_loss/nce.py
# tmp:[(label, pred_score),...] 假定 [ (0,1), (1, 0.3), (0, 0.9), (1, 0.8),(0, 0.5)  ]
        tmp = sorted(tmp, key=itemgetter(1), reverse=True) # 排序后 [(0, 0.9), (1, 0.8), (0, .5), (1, 0.3), (0, 0.1)]
        m = 0.0
        n = 0.0
        z = 0.0
        k = 0
        for a, _ in tmp:
            if a > 0.5:
                m += 1.0         # 全部过程中m的变化情况 [0, 1, 1, 2, 2] 最终值是正样本的个数
                z += len(tmp) - k # 对正样本的位次累加    位次依次为    z_l=[4, 2]   -> I.shape=(2,3), 每行的和:[4-m, 2-(m-1)] (m=2)
                # 4-m: 后续样本(含改点)-其中正样本数量=该行1的数量
            else:
                n += 1.0
            k += 1
        z -= m * (m + 1.0) / 2.0 # [m, m-1, m-2] 求和
        z /= m
        z /= n

一句话总结,AUC: 正样本的纯度

AUC注记

标签:矩阵   ever   遍历   出现   问题   softmax   www.   www   一句话   

原文地址:https://www.cnblogs.com/chenyliang/p/8708822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!