模型评估:ROC曲线的绘制和AUC的计算

1. 混淆矩阵

在了解ROC之前,我们首先来了解一下混淆矩阵。

图1 混淆矩阵

对于给出的一个二分类问题,在混淆矩阵中:

  • 横向表示样本对应的标签正例和负例的真实情况。

  • 纵向表示样本对应的标签正例和负例的预测情况。

其中:

  • TP: 表示predict为True, label为positive的情况。
  • FP: 表示predict为False, label 为positive的情况。
  • TN: 表示predict为True, label 为negativ的情况。
  • FN: 表示predict为False, label 为negative的情况。

在此基础上衍生出来其他一些评价指标的计算包括:

  • 准确率

表示在所有的样本中,我们预测正确的结果的概率。

a c c u r c y = T P + T N T N + T P + F N + F P accurcy = \frac{TP + TN}{TN + TP + FN + FP}

  • 召回率

表示在所有label为positive的样本中,被我们预测为postive的结果概率。

扫描二维码关注公众号,回复: 11382090 查看本文章

r e c a l l = T P T P + F N recall = \frac{TP}{TP + FN}

  • 精确率

表示在所有predict为positive的样本中,被我们预测正确的结果的概率。
p r e c i s i o n = T P T P + F P precision = \frac{TP}{TP + FP}

2. ROC

2.1 什么是ROC

在维基百科中对ROC的解释:

A receiver operating characteristic curve, or ROC curve, is a graphical plot that illustrates the diagnostic ability of a binary classifier system as its discrimination threshold is varied.

接收器操作特性曲线(ROC曲线)是一个当二进制分类器系统的鉴别阈值变化时,用来说明这个系统判断能力的曲线。

图2 ROC曲线

其中横轴表示FPR,纵轴表示TPR,其对应的计算方式如下:

  • T P R TPR (Recall,Sensitivity)

表示在所有label为positive的样本中,预测为positive的概率

T P R = T P T P + F N TPR = \frac{TP}{TP + FN}

Specificity

S p e c i f i c i t y = T N T N + F P Specificity=\frac{TN}{TN + FP}

  • F P R FPR (1-Specificity)

表示在所有label为negative的样本中,预测为positive的概率

F P R = F P T N + F P FPR = \frac{FP}{TN + FP}

所以 T P R TPR 表示正例中正确率, F P R FPR 表示负例中错误率。

  • 问题1: 对于测试集合而言,我们的计算得到 T P R TPR F P R FPR 的结果应该是一个独立的点,为什么会是一条曲线?

  • 问题2: 为什么通过ROC曲线可以评估模型,什么样的ROC曲线表示模型越好,什么样的ROC曲线表示模型越差劲?

带着这两个问题,我们开始进一步讨论ROC如何评估一个分类模型。

2.2 ROC和模型的评估

2.2.1 ROC曲线的绘制

在回答上面的两个问题之前,我们先来以二分类为例。

为什么对于一个模型我们可以得到一条曲线。

例如以LR为例,在最后的sigmoid作为激活函数之后我们能够得到一个概率值。

对于这个模型输出的概率值,我们可以给定一个阈值。

当我们的输出值大于这个阈值的时候判断为正例,当我们的输出值小于这个阈值的时候判断为负例。

那么,对于同一个模型给定不同的阈值就可以得到不同的 T P R TPR F P R FPR 绘制得到ROC曲线。

例如:我们给定多组阈值,然后就可以评估计算出不同阈值下的ROC曲线,具体图像如下。

图3 有限个阈值的ROC曲线

2.2.2 ROC曲线的具体意义

还是以LR做二分类为例子,对于在给定样本上的预测结果。

  • 用红色线条表示label为positive的结果,对应分类器输出值的分布。
  • 用绿色线条表示label为negative的结果,对应分类器输出值的分布。

t h r e s h o l d = 0.5 threshold=0.5 的情况下,阈值大于0.5全部预测为positive,阈值小于0.5全部预测为negative。

在此基础上我们考虑以下几种情况:

第一种情况:

图4 可以完全区分的情况

在这种情况下我们

这种情况下分类器能够完全对区分positive和negative的样本。

这个时候得到的曲线ROC曲线为:

图5 可以完全区分的情况下的ROC曲线

第二种情况

图6 部分分类错误

在这种情况下,以0.5作为阈值没有办法完全区分样本中label为positive和negative的样本。

交叉部分为 F N FN F P FP ,这个时候对应的ROC曲线为如下:

图7 部分分类错误的ROC曲线

第三种情况

图8 随机分类

在极端情况下,分类器对所有positive样本的输出值分布和negative样本输出的值的分布是相同的。

这个时候无法通过选取阈值对分类器做有效的分类,对应的ROC曲线如下。

图9 随机分类的ROC曲线

这个时候,分类器对样本的分类效果是随机的。

3 AUC

细心的小朋友可能已经发现了,在上面的图中我们已经给定了不同的状况下AUC的值。

那么有两个问题:

第一个问题: AUC的值表示什么样含义?

第二个问题: AUC的值怎么进行计算?

3.1 AUC值的含义

auc(area under curve)表示ROC曲线下的面积。

在绘制ROC曲线的过程中,Sensitivity和Specificity的值成反比所以当Sensitivity的时候Specificity,反之也成立。

图10 部分分类错误

在这种情况下,以0.5作为阈值没有办法完全区分样本中label为positive和negative的样本。

交叉部分为 F N FN F P FP ,这个时候对应的ROC曲线为如下:

如图当我们提高阈值的情况下,我们得到了更多的negative的值,这个时候Specificity(特异性)增加,但是Sensitivity(敏感度)减小。

我们的目的是希望得到一个分类器,在所有阈值的情况下都能够得到一个对于任何阈值具有比较高的Specificity和Sensitivity。

这个时候,我们通过ROC曲线覆盖的面积(AUC)来评估模型的效果。

那么这里存在一个疑问:为什么不用Specificity和Sensitivity的值直接绘制曲线然后计算AUC而是需要用1-Specificity来计算

3.2 AUC值的计算

根据上面的部分的描述,通过不同阈值我们可以绘制出ROC曲线,并且了解了AUC曲线那么在评估模型当中的含义。

那么怎么样计算AUC的值呢?

import numpy as np

a=[0.1, 0.2, 0.4]
b=[0.2, 0.4, 0.6]
print(np.trapz(a,b))

得到的结果为:

0.09

具体的计算方式:

auc = (0.4-0.2) * (0.1 + 0.2) / 2 + (0.6-0.4) * (0.2 + 0.4) / 2


= 0.03 + 0.06


= 0.09

资料

Receiver operating characteristic

机器学习之分类器性能指标之ROC曲线、AUC值

Understanding AUC - ROC Curve

Understanding Confusion Matrix

猜你喜欢

转载自blog.csdn.net/redhatforyou/article/details/106723407
今日推荐