前言
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)
只听到从知秋君办公室传来知秋君的声音: 早是被、晓风力暴,更春共、斜阳俱老。有谁来对上联或下联?