• Python计算AUC


    AUC(Area under curve)是机器学习常用的二分类评测手段,直接含义是ROC曲线下的面积。另一种解释是:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。
    在有M个正样本,N个负样本的数据集里,利用公式求解:

    [AUC=frac{sum_{i in positiveClass} rank_i-frac{M(1+M)}{2}}{M*N} ]

    在python实现中,相当于使用了计数排序,因为概率是一个小数,我们同时乘以100取整数进行排序(也可以根据精度调整)。在排完序后,我们就可以得到正样本概率大于负样本概率的个数,再加上正样本概率等于负样本概率的个数的一半,除以总共的样本数(M*N),即可得到最终的AUC值。

    def AUC(labels,preds,n_bins=100):
        m = sum(labels)
        n = len(labels) - m
        total_case = m * n
        pos = [0 for _ in range(n_bins)]
        neg = [0 for _ in range(n_bins)]
        bin_width = 1.0 / n_bins
        for i in range(len(labels)):
            nth_bin = int(preds[i]/bin_width)
            if labels[i]==1:
                pos[nth_bin] += 1
            else:
                neg[nth_bin] += 1
        accumulated_neg = 0
        satisfied_pair = 0
        for i in range(n_bins):
            satisfied_pair += (pos[i]*accumulated_neg + pos[i]*neg[i]*0.5)
            accumulated_neg += neg[i]
        return satisfied_pair / total_case
    
    y = [1,0,0,0,1,0,1,0,]
    pred = [0.9, 0.8, 0.3, 0.1,0.4,0.9,0.6,0.7]
    print(AUC(y, pred, n_bins=100))
    

    作为机器学习中的经典评价准则,AUC的计算也作为面试笔试常考的算法题。

    参考:
    AUC详解与python实现

  • 相关阅读:
    Virtual Box的一些东西
    sun 的Virtual box
    Powerdesigner的vbscript
    MemoryStream的一些问题
    vs2008 三大形象代言人
    ASP.NET学习之匿名方法
    asp.net2.0学习历程 菜鸟到中级程序员的飞跃
    ASP.NET程序员必看书
    设计模式学习扎马步
    MDI窗体改变背景
  • 原文地址:https://www.cnblogs.com/hellojamest/p/11711876.html
Copyright © 2020-2023  润新知