AUC

AUC 是用在二分类问题中的评估指标

具有如下优点:

  1. 不需要指定阈值
  2. AUC值反应了排序能力,具体数值可以理解为给定一个正样本和负样本,正样本排序在负样本前面的概率
  3. 对负采样不敏感 在均匀采样情况下,一个正样本在采样前后负样本的比例是不变的, 所以 采样前后auc不变。

第2点其实也可以理解为对不同类别的区分能力,AUC值越高,说明分类器越能看出0、1类别之间的差别从而将样本进行正确的分类。

定义

AUC 即Area Under Curve , 而这个Cure 就是ROC曲线(Receiver operating characteristic)。 我们下面介绍下ROC曲线。 首先看下图的混淆矩阵(confusion matrix)

confusion matrix

\(TPR= \frac{TP} {TP+FN}\) \(FPR= \frac{FP}{FP+TN}\)

TPR 表示召回率,即所有正样本中被预测为正例的比例; FPR 表示所有负样本中被预测为正样本的比例。

有了上面的定义,我们看下ROC曲线长啥样。

ROC

上图即ROC 曲线图。可以看到, ROC 曲线的横坐标是FPR, 纵坐标是TPR。 该曲线是由一组(FPR,TPR)坐标组成的曲线。 具体分析ROC曲线的四个特殊点。

  1. (0,0) 该点表示FPR和TPR都为0, 说明TP和FP都为0,即所有的样本都被预测为负样本, 那么只有在阈值最高(为1)的时候才会出现这种情况。
  2. (1,1)该点表示FPR和TPR 都为1, 即所有的样本都被预测为正样本,那么只有在阈值最低(为0)的时候才会出现这种情况
  3. (0,1) 该点表示TPR为1, FPR为0, 即所有的正样本都被预测为正样本,所有的负样本都被预测为负样本,这是最完美的情况
  4. (1,0) 该点表示TPR 为0, FPR为1, 即所有的正样本都被预测为负样本,所有的负样本都被预测为正样本,这是最糟糕的情况。 通过这四个点,可以看出
  5. 从左到右, 阈值是从高到低排列的。
  6. ROC曲线越靠近(0,1)点,说明分类效果越好。
  7. 随着阈值的降低,被分为正样本的样本越来越多,那么FP和TP 会同时变得更多,所以TPR和FPR会同时上升。 可以看出,ROC曲线是一条斜率为正的曲线。

计算

auc的计算应该可以分为两类

第一种方法是使用AUC的定义,即ROC 曲线下方的面积 具体来说,就是找到构成ROC曲线的(FPR,TPR)坐标集合,通过该坐标集合计算ROC 曲线下方的面积。 具体计算时就是计算一个一个梯形的面积,然后相加。

第二种方法是使用AUC的概率解释来计算 因为AUC 表示给定一个正样本和负样本,正样本排在负样本前面的概率。 而概率可以通过频率来近似,尤其是大数据量条件下。所以给定一个数据集,我们可以统计数据集的所有样本对中正样本排在负样本前面的概率。

首先,将样本按照预估得分进行升序排列;并维护如下变量:

Neg=0,表示当前的负样本数量为0,

Pos=0,表示当前的正样本数量为0,

NegBelowPos=0,表示比正样本得分低的负样本个数。

然后,从前向后遍历,

如果当前是负样本,则Neg+1;

如果当前样本是正样本,那么NegBelowPos+Neg,表示该正样本比Neg个负样本的得分高;同时将Pos+1。

遍历完之后,AUC通过下式得到:

\[AUC=\frac{NegBelowPos}{Pos*Neg}\]

这个算法也有一个小小的变形:

\[AUC=\frac{\sum_{i \in pos} rank_i -\frac{Pos(1+Pos)}{2}}{Pos*Neg}\]

解释一下这个公式,假设对于第i个正样本,假设排序为\(rank_i\),他前面的样本数为\(rank_i-1\),负样本数为\(rank_i-1-(i-1)=rank_i-i\),即第i个正样本,前面的负样本数为\(rank_i-i\)。那么所有正样本前面的负样本数量就是\(\sum_{i=1}^{Pos} rank_i - i\),稍加变形就得到了上面的表达式。

参考:

1.https://tracholar.github.io/machine-learning/2018/01/26/auc.html

宁雨 /
Published under (CC) BY-NC-SA in categories MachineLearning  tagged with
comments powered by Disqus