前言
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建议写这个!!!:
"""
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)
|