对AUC的一些理解1.
要想理解AUC,得从混淆矩阵说起。
混淆矩阵
对于一个二分类问题,每个样例有自己的真实类别和模型给出的预测类别,真实类别和预测类别都分别有两种,定义标记为1的为正例,标记为0的为反例,当我们在测试集上使用模型分类时,会有以下四种情况。
| 标记为正例 | 标记为反例 | |
|---|---|---|
| 实际为正例 | 真正例(True-Positive) | 假反例(False-Negative) |
| 实际为反例 | 假正例(False-Positive) | 真反例(True-Negative) |
下面我们用TP、FN、FP、TN分别表示四种结果的样本个数。
分类
在一个二分类问题中,往往我们的预测输出是一个0-1之间的数字,为了得到新的样本的类别,我们需要选择一个阈值来将这些预测结果进行分类,假设 xk x k 是待分类的样本, f(x) f ( x ) 是模型对 x x 的预测值,
1,0,if ŷ k>=0.5if ŷ k<0.5 h ( x k ) = { 1 , if y ^ k >= 0.5 0 , if y ^ k < 0.5
ROC曲线
基本概念
当我们有了混淆矩阵的概念以及对测试集上样本分类的概念之后,我们就可以绘制ROC曲线,在测试集上,我们使用模型对测试集样本进行预测后,在某个阈值下进行分类得到TP、FN、FP、TN,计算真正例率 TPR T P R (True Positive Rate)和假正例率 FPR F P R (False Positive Rate)
TPR T P R 的直观理解就是在所有正例中被模型预测为正例的样本所占比率, FPR F P R 就是在所有反例中被模型误判为正例的样本所占比率,例如在所有10个正例样本,4个被判定为正例,6个被判定为反例,于是有4个真正例,则 TPR=0.4 T P R = 0.4 ,在所有10个反例样本中,3个被判断为正例,7个被判断为反例,于是有3个假反例,则 FPR=0.3 F P R = 0.3 。如果你知道召回率(Recall)的话,其实 TPR T P R 就是召回率。注意到二者的分母对于同一个样本集是一个定值,分别是样本中真实标记为正例和真实标记为反例的个数。
现在,针对不同的阈值 k k ,我们都有一个点
ROC曲线的绘制
在绘制ROC曲线的时候,我们当然不会遍历所有的实数阈值 k k (事实上这也不可能),下面在有限样例的情况下绘制ROC曲线的实例,以样例数
| 样例 | x1 x 1 | x2 x 2 | x3 x 3 | x4 x 4 | x5 x 5 | x6 x 6 | x7 x 7 | x8 x 8 | x9 x 9 | x10 x 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| 预测结果 | 0.06 | 0.47 | 0.50 | 0.94 | 0.83 | 0.90 | 0.73 | 0.07 | 0.50 | 0.27 |
| 真实类别 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
举个例子,如果阈值 k=0.5 k = 0.5 ,则混淆矩阵为
| 标记为正例 | 标记为反例 | |
|---|---|---|
| 实际为正例 | 3 | 3 |
| 实际为反例 | 3 | 1 |
假设我们设置 k k 从1开始,从大到小搜索
有一个问题是,为什么要从大到小遍历,不可以随机地在所有样本中取k吗?其实,从大到小遍历是为了作图的方便,也是一种作图的规定。下面我们就能看到。
为了从大到小遍历 k k ,将样本按照预测值从大到小排序,重新编号(因为编号不影响结果),得到
| 样例 |
记正样本个数为 m+ m + ,负样本个数为 m− m − ,取 k=1 k = 1 ,此时所有样例都被分为反例,因此真正例和假正例的比率均为0,对应原点 (0,0) ( 0 , 0 ) ,接下来,根据上表的预测结果,从左到右依次取 k=0.94,0.90,0.83…. k = 0.94 , 0.90 , 0.83…. ,过程等同于逐个地将样本判断为正例( k=0.94 k = 0.94 时, x1 x 1 就是正例,其余都是反例, k=0.90 k = 0.90 时, x1,x2 x 1 , x 2 是正例,其余是反例,以此类推),若前一个标记点是 (x,y) ( x , y ) ,若下一个加入到正例中的样本真实类别是正例,说明我们多了一个 TP T P ,回顾真正例率的计算公式,正例样本不变,多了一个正例,则正例率相应提高 1m+ 1 m + ,对应标记点为 (x,y+1m+) ( x , y + 1 m + ) ,若下一个加入到正例中的样本真实类别是反例,则多了一个 FP F P ,假反利率相应提高 1m− 1 m − ,则对应标记点为 (x+1m−,y) ( x + 1 m − , y ) ,然后用线段连接相应的点即可得到ROC曲线。(在这里我强烈建议读者能自己在草稿纸上尝试着画一下,以便后续的理解) AUC
AUC=1−1m+m−∑x+∈D+∑x−∈D−(W(f(x+)<f(x−))+12W(f(x+)=f(x−))) A U C = 1 − 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( W ( f ( x + ) < f ( x − ) ) + 1 2 W ( f ( x + ) = f ( x − ) ) )
为所有正例组成的集合, x+ x + 是其中的一个正例, D− D − 为所有反例组成的集合, x− x − 是其中的一个反例, f(x) f ( x ) 是模型对样本 x x 的预测结果,在0-1之间, 问题简化为了方便我们建立公式定义和图像定义之间对应的Intuition,我们先假设不存在正反例对使得
f(x+)=f(x−) f ( x + ) = f ( x − )
AUC=1m+m−∑x+∈D+∑x−∈D−(W(f(x+)>f(x−))) A U C = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( W ( f ( x + ) > f ( x − ) ) )
g(t)=当我们将第t个反例加入到判定为正例的集合中时,之前一共加入的样例数 g ( t ) = 当 我 们 将 第 t 个 反 例 加 入 到 判 定 为 正 例 的 集 合 中 时 , 之 前 一 共 加 入 的 样 例 数
AUC=∑t=1m−1m−g(t)−tm+=1m+m−∑t=1m−(g(t)−t) A U C = ∑ t = 1 m − 1 m − g ( t ) − t m + = 1 m + m − ∑ t = 1 m − ( g ( t ) − t )
因为这一共有 g(t)−t g ( t ) − t 个正例在第t个反例之前取到,因此这 g(t)−t g ( t ) − t 个正例的预测值均大于第t个反例的预测值,也即
g(t)−t=∑x+∈D+(W(f(x+)>f(xt))) g ( t ) − t = ∑ x + ∈ D + ( W ( f ( x + ) > f ( x t ) ) )
代入,得
AUC=1m+m−∑x+∈D+∑t=1m−(W(f(x+)>f(xt))) A U C = 1 m + m − ∑ x + ∈ D + ∑ t = 1 m − ( W ( f ( x + ) > f ( x t ) ) )
用面积定义计算出的结果和之前的公式一致。 原问题
AUC=1m+m−∑x+∈D+∑x−∈D−(W(f(x+)>f(x−))+12W(f(x+)=f(x−))) A U C = 1 m + m − ∑ x + ∈ D + ∑ x − ∈ D − ( W ( f ( x + ) > f ( x − ) ) + 1 2 W ( f ( x + ) = f ( x − ) ) )
当存在 x+ x + 和 x− x − 满足 f(x+)=f(x−) f ( x + ) = f ( x − ) 时,回到我们画ROC图的步骤,记得在画图之前,我们需要对样例进行排序吗,如果存在 f(x+)=f(x−) f ( x + ) = f ( x − ) ,我们该把哪个排在前面呢?
凝眸伏笔的博客 08-02 304 _36767053的博客 06-29 2310 weixin_42307036的博客 01-05 797 _37668436的博客 03-20 3094 “相关推荐”对你有帮助么?
提交
©️2022 CSDN
皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页 打赏作者
¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- ) 扫码支付 |
|---|
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176021.html原文链接:https://javaforall.net

9
条评论 为什么被折叠?