AUC计算公式及python代码

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说AUC计算公式及python代码,希望能够帮助大家进步!!! 前言 auc的主要用于分析二分类的准确率,并且主要是对回归任务做分析,当然分类也阔以。 计算原理 一个原理是roc曲线的面积,但是比较复杂,代码不好实现所以基本上不会那么写,还一个是基于rank的公式计算,原理比较复杂,本文介绍最简单的实现。 计算原理: 遍历正负样本对

大家好,我是知秋君,一个会写博客吟诗的知秋码农。今天说一说AUC计算公式及python代码,希望能够帮助大家进步!!!

前言

auc的主要用于分析二分类的准确率,并且主要是对回归任务做分析,当然分类也阔以。

计算原理

一个原理是roc曲线的面积,但是比较复杂,代码不好实现所以基本上不会那么写,还一个是基于rank的公式计算,原理比较复杂,本文介绍最简单的实现。

计算原理:

  • 遍历正负样本对
  • 正样本的概率大于负样本,auc += 1
  • 正样本的概率等于负样本,auc += 0.5
  • 正样本的概率小于负样本,auc += 0
  • 遍历完毕,auc = auc / 正负样本对数

举个例子:

label = [1, 0, 0,]
pre = [0.9, 0.8, 0.3]
正负样本对有:(label[0],label[1]),(label[0],label[2])
因为pre[0]>pre[1],所以auc += 1,
因为pre[0]>pre[2],所以auc += 1,
总对数为2:
所以auc = (1 + 1)/2 = 1

python代码-------算法手撕auc建议写这个!!!

# auc:遍历正负样本对 """ 1、正的概率大于负的,auc加1 2、正的概率等于负的,auc加0.5 3、正的概率小于负的,auc加0 """ def AUC(label, pre): pos = [] neg = [] auc = 0 for index,l in enumerate(label): if l == 0: neg.append(index) else: pos.append(index) for i in pos: for j in neg: if pre[i] > pre[j]: auc += 1 elif pre[i] == pre[j]: auc += 0.5 return auc * 1.0 / (len(pos)*len(neg)) if __name__ == '__main__': label = [1, 0, 0, 0, 1, 0, 1, 0] pre = [0.9, 0.8, 0.3, 0.1, 0.4, 0.9, 0.66, 0.7] print(AUC(label, pre)) from sklearn import metrics auc = metrics.roc_auc_score(label, pre) print('sklearn',auc) 
只听到从知秋君办公室传来知秋君的声音:

早是被、晓风力暴,更春共、斜阳俱老。有谁来对上联或下联?
知秋君
上一篇 2024-07-03 15:31
下一篇 2024-07-03 15:31

相关推荐