文章目录
- 前言
- 如何计算
- 直观解释
- 常用计算方式
前言
AUROC常用于衡量二分类分类器的性能,本文旨在详解该指标计算过程
如何计算
设想我们有一个分类器,对数据做二分类。我们设输入数据为 x x x, 预测标签为 y y y, ground-truth标签为 y ^ \hat{y} y^。对每个 x x x,我们都预测 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x),即将样本分类成正类的概率。
现在有一组带标注数据,其中一部分数据的真实标签 y ^ \hat{y} y^是0,另一部分的真实标签 y ^ \hat{y} y^是1 ,我们通过分类器预测 x x x属于正例的概率 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x),对每个预测结果 y y y与真实标签 y ^ \hat{y} y^的匹配情况可分为四类
现在计算AUCROC,步骤如下
- 确定一个概率阈值 λ \lambda λ , 当预测属于正例的概率大于 λ \lambda λ, 我们则将该样本分为正例
- 在该阈值下,我们得到两个值
- TPR (真阳性率) / 召回:所有真实标签为正的样本中,被预测为正例的数据所占的比例
- T P F N + T P \frac{TP}{FN+TP} FN+TPTP
- FPR (假阳率):所有真实标签为负的样本中,被预测为正例的数据所占的比例
- F P T N + F P \frac{FP}{TN+FP} TN+FPFP
- TPR (真阳性率) / 召回:所有真实标签为正的样本中,被预测为正例的数据所占的比例
- 以FPR为横轴,TPR为纵轴,我们绘制坐标轴,在坐标轴上画点
- 取多种不同阈值可以得到多个点,将这些点连成线,所围成的面积就是AUROC
直观解释
对于好的分类器,我们希望,对真实标签为正的样本,我们预测 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x)能够比较大,对真实标签为负的样本,该值比较小。这里通过一个具体的例子对AUROC进行说明。
场景:我们数据的真实标签一半为0,一半为1,现在我们按预测的 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x)对数据从小到大排序,左边一半就是 y ^ = 0 \hat{y}=0 y^=0的数据,右边一半是 y ^ = 1 \hat{y}=1 y^=1的数据。
-
我们取一个很小的阈值,将所有样本都分类为正例, 此时,横纵坐标都为1,绘制点
(1, 1)
-
我们取大一点的阈值,此时横坐标减小为 x 2 x_2 x2,纵坐标仍为1, 绘制点( x 2 x_2 x2, 1)
-
再大一点,此时横坐标为0,纵坐标仍为1,绘制点(0,1)
-
再大一点,横坐标为0,纵坐标变小为 y 2 y_2 y2,绘制点(0, y 2 y_2 y2)
-
最后,横坐标纵坐标都为0,绘制点(0,0)
我们绘制的AUCROC曲线为红色部分,与坐标轴围成的面积为1。
可以看到,AUROC期望任意一个正样本被分类为正的概率大于任意一个负样本被分类为正的概率。
- ACROC最大值为1,越大说明分类效果越好
- 不考虑正样本之间的概率相对大小以及负样本内部的概率大小
- 不考虑实际的概率值大小
- 实际使用中,我们往往取多个(100)阈值,或将样本中的每个概率都作为一次阈值来绘制曲线,以对分类效果进行细粒度评估
常用计算方式
from sklearn.metrics import roc_auc_score# 假设你有以下真实标签和预测概率
y_true = [0, 0, 1, 1] # 真实标签
y_scores = [0.1, 0.4, 0.35, 0.8] # 预测概率# 计算AUROC
auc = roc_auc_score(y_true, y_scores)
print(f"AUROC: {auc}")
图像参考:https://www.zhihu.com/question/428614381/answer/3423485003