【机器学习】auc的计算方法

auc是什么

auc是roc的面积,是从一批正负样本中,选择一个正样本,一个负样本,正样本比负样本预测值大的概率。我们使用频率去逼近概率,所以就先对所有样本预测值从大到小排序,并从高到低赋予rank值。抽取正负样本的组合共有 M*N,作为分母。抽取一个正样本,抽取一个比正样本预测值低的负样本,这个组合作为分子。最后的表达式就是
在这里插入图片描述

python代码


# 在 0.8, 0.6,0.5,0.5,0.5,0.5,0.3,0.2
#     1    1   0   0   1   0   0   0

#pos_count 是指正类的数量
#cur_sum 是累计的rank值
#count 是正负类一起的数量

def getAuc(labels,preds):


    sorted_index = sorted(range(len(labels)),key = lambda i:preds[i])
    cur_sum = 0
    count = 0
    pos = 0
    neg = 0
    pos_count = 0
    auc = 0
    last_pred = preds[sorted_index[0]]
    for i in range(len(sorted_index)):
        index = sorted_index[i]
        pred = preds[index]
        label = labels[index]
        if label>0:
            pos+=1
        else:
            neg+=1

        if pred==last_pred:
            cur_sum+=i+1
            count+=1
            if label>0:
                pos_count += 1
        else:
            auc+= pos_count * cur_sum/count
            cur_sum = i+1
            count =1
            last_pred = pred
            if label >0:
                pos_count = 1
            else:
                pos_count = 0

    auc += pos_count * cur_sum/count
    auc = auc - pos*(pos+1)*1.0/2
    auc = auc /(pos*neg)
    return auc
pred = [0.1,0.2,0.3,0.4,0.5,0.6,0.6,0.6,0.6,0.7,0.8,0.9,1.0]
label = [0,0,0,0,0,1,1,1,1,1,0,1,1]

print(getAuc(label,pred))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值