跳转至

0514 du

比较简单的暑期面试,一次面试直接决定是否通过,比较干净利落。

同时也会觉得有点水

先问了基本情况,介绍了我做的项目。

然后问了一道概率论:

A、B两个队伍进行BO7比赛,两队实力相当胜率相同。前三局A赢了两局输了一局,问最终A获胜的概率?

最后还问了问机器学习,分类模型。出了一个AUC的计算问题:

假设随着分类模型输出的logit从小到大排列之后,他们的真实标签分别为0010100111,问AUC是多少?

AUC

ROC曲线

AUC(Area Under Curve)是定义在ROC(Receiver Operating Characteristic)曲线上的,它衡量ROC曲线从0-1积分的大小:

而ROC曲线的定义是:

$$ \left\{(x,y) \mid x = \mathrm{fpr}, y=\mathrm{tpr} \right\} $$

生成这些点的方式是:

对于一个分类模型$f(x)$,它输出一个0-1的得分(或者叫概率),我们取不同的阈值$t$,只有$f(x)>t$的时候才认为是正样本。

这样在阈值$[0,1]$中取值,我们就得到了ROC曲线。

AUC的计算

$$ \mathrm{fpr} = \frac{\mathrm{FP}}{\mathrm{FP}+\mathrm{TN}} = \frac{\mathrm{FP}}{\mathrm{Negative}} $$ 代表所有负样本中错误预测为正样本的概率,假警报率;

$$ \mathrm{tpr} = \frac{\mathrm{TP}}{\mathrm{TP}+\mathrm{FN}}= \frac{\mathrm{TP}}{\mathrm{Positive}} $$ 代表所有正样本中预测正确的概率,命中率(也叫召回率、查全率)。

对于0010100111这样的真实标签,正负样本都是5个。我们可以描点绘制ROC曲线:

阈值分割 fpr tpr
0010100111- 0 0
001010011-1 0 1/5
00101001-11 0 2/5
0010100-111 0 3/5
001010-0111 1/5 3/5
00101-00111 2/5 3/5
0010-100111 2/5 4/5
001-0100111 3/5 4/5
00-10100111 3/5 1
0-010100111 4/5 1
-0010100111 1 1

实际上只需要找到fpr发生变化的点即可,图像一定是一个阶梯函数。

描点得到:

每个格子是0.04,ROC曲线下方一共20个格子,所以AUC值为$20\cdot 0.04 = 0.8$

简便计算

当然,如果只需要计算AUC,我们有一个比较简单的计算方法。

我们只需要挨个找正样本的位置,然后数一下在他前面的负样本个数即可。

0010100111

正样本位置 在它前面的负样本个数
3 2(位置1,2)
5 3(位置1,2,4)
8 5(1,2,4,6,7)
9 5
10 5

正样本得分高的次数:$ 2 + 3 + 5 + 5 + 5 = 20$

总共正负样本对数:$5 \times 5 = 25$

所以AUC值为$20/25 = 0.8$。

这其实就是AUC的第二种理解:

$$ \mathrm{AUC} = \mathrm{P}(s_{P} \gt s_{N}) $$

也就是正样本比负样本得分高的概率。

所以本质上我们是在计算所有的正负样本对中,正样本得分高的频率


最后更新: 2025-05-29 21:32:34
创建日期: 2025-05-29 21:32:34

评论