ITPub博客

首页 > > > 11565 P-R、ROC、DET 曲线及 AP、AUC 指标全解析(上)

11565 P-R、ROC、DET 曲线及 AP、AUC 指标全解析(上)

作者:格伯纳 时间:2019-12-26 15:17:26 0 删除 编辑

  机器学习中,最「简单」的一种任务就是二分类任务了。比如,说话人验证(speaker verification)就是一个二分类任务:判断一句话是否是给定说话人说的。再比如,信息检索(information retrieval)本质上也是一个二分类任务:给定关键词,判断每篇文章是否与关键词相关,并把相关结果排序返回。

  许多二分类器的原理,都是给每个样例打一个分,然后设置一个阈值,分数高于阈值的样例就被分为正类,低于阈值则被分为负类。在评价系统性能时,一般可以计算准确率(accuracy),也就是分类正确的样例在所有样例中所占的比例。当两类分布不均衡时(一般是正例远少于负例),也常常计算正类的查准率(precision)、查全率(recall),以及二者的调和平均数 F1。

  准确率、查准率、查全率、F1 这些指标,全都依赖于具体的阈值。但有时候,我们希望不把阈值固定,而是根据需求来调整。如图 0.1,把所有的样例按得分由高到低排序,得到一个有序列表(ranked list)。对于一个正常的二分类器,正例应该集中在列表的顶端,而负例应该集中在列表的底端,中间会有模糊地带。如果想追求高查准率,就可以把阈值调高,把中间地带排除出去;想追求高查全率,就可以把阈值调低,把中间地带包括进来。

图 0.1:一个有序列表的例子。图中有 4 个正例和 5 个负例,有两对样例得分相同。

  在不固定阈值的情况下,要怎么评价一个二分类器的性能呢?这种评价,实质上就是评价上述的有序列表,能够在多大程度上把正例和负例分开。刻画正例和负例分得有多开,常常使用下面三种曲线:

  ● Precision-recall 曲线,简称 P-R 曲线;
  ● Receiver operating characteristic 曲线,简称 ROC 曲线;
  ● Detection error tradeoff 曲线,简称 DET 曲线。

为了比较不同的二分类器,也需要用单个的数值作为指标来表征一个二分类器的性能,常用的指标包括 average precision(AP)和 area under the curve(AUC)。如果一个任务是由多个二分类子任务组成的,也常常计算各个子任务的 AP 或 AUC 的平均值,称为 mean average precision(MAP)和 mean area under the curve(MAUC)。

  注意 AP、AUC 这类指标与准确率、F1 等指标的不同之处:准确率、F1 等依赖于阈值,刻画的是二分类器在特定工作点的性能;AP、AUC 则不依赖于阈值,刻画的是二分类器给出的有序列表的质量。

  上面提到了 P-R、ROC、DET 三种曲线,以及 AP、AUC 两种指标。它们的计算方法都不是一句话能说清楚的,这也是初学者常常迷惑和混淆的地方。这一篇以及下一篇专栏,就来详解这些曲线和指标的计算方法,以及它们之间的关系。本篇讲曲线,下篇讲指标。

一、Precision-Recall 曲线

  顾名思义,precision-recall 曲线表现的,就是查准率、查全率随阈值的变化。具体来说,它的纵轴是正类的查准率 P_+ ,横轴是正类的查全率 R_+ 。定义下面四个量:

  ● True positives(TP):标准答案为正,系统分类也为正的样例数量;
  ● False negatives(FN):标准答案为正,系统分类却为负的样例数量;
  ● False positives(FP):标准答案为负,系统分类却为正的样例数量;
  ● True negatives(TN):标准答案为负,系统分类也为负的样例数量;

并记正例、负例的总数为:

n_+ = TP + FN \qquad n_- = TN + FP \\

则 P-R 曲线的纵轴、横轴可以分别表示为:

P_+ = \frac{TP}{TP + FP} \qquad R_+ = \frac{TP}{TP + FN} = \frac{TP}{n_+} \\

  仍以图 0.1 中的二分类器为例,我们来画一下它的 P-R 曲线。图 1.1 列出了把阈值设在所有可能位置时,正类查准率、查全率的数值。阈值大于 0.9 时, P_+ = 0/0 无意义。

图 1.1:阈值设在各个位置时,正类查准率 P+ 与查全率 R+ 的数值

把所有的 (R_+, P_+) 连成曲线,这就是 P-R 曲线:

图 1.2:P-R 曲线的一个例子

  正常的 P-R 曲线,会集中在图像的右上角,在这个区域,正类的查准率和查全率都高。它的右端不会到达 (1,0) ,而是会位于 \left(1, \frac{n_+}{n_+ + n_-} \right) ,其纵坐标为正例在所有数据中的比例,这对应于阈值设为最低的情形。它的左端也并不在 (0,1) :对于正常的二分类器,得分最高的样例应当是个正例,所以左端的坐标会是 (1/n_+, 1) ,实际上很接近 (0,1) ;如果很不幸,得分最高的样例是个负例,那么左端的坐标就是 (0, 0) 了。

  从微观上看,P-R 曲线是锯齿状的。当阈值下调,跨越一个正例时,P_+ 、R_+ 都会升高,产生一条向右上方的线段;当阈值跨越一个负例时,R_+ 不变,而 P_+ 会减小,产生一条竖直向下的线段。图 1.2 中有一条向右下方的线段,这是由于有一正一负两个样例得分都是 0.6 产生的,这种得分相同的情况在实际中是罕见的。从宏观上看,P_+ 、R_+ 是鱼与熊掌不可兼得的关系,所以 P-R 曲线呈现单调下降的趋势;但越好的二分类器,其 P-R 曲线会越接近图像的右上角。

二、ROC 曲线

  ROC 曲线的全称叫 receiver operating characteristic curve。这个名字有点儿费解:怎么还跟信号接收机(receiver)有关呢?原来,ROC 曲线最早就是在二战中用来分析雷达接收机检测信号的能力的。

  ROC 的纵轴叫作 true positive rate(TP\%),即在所有的正例中,有多大的比例被正确地分类为正例。其横轴叫作 false positive rate(FP\%),即在所有的负例中,有多大的比例被错误地分类为正例。用上一节中定义的 TP, FN, FP, TN ,这两个轴可以表示为:

\begin{align} TP\% &= \frac{TP}{TP + FN} = \frac{TP}{n_+} = R_+ \\ FP\% &= \frac{FP}{TN + FP} = \frac{FP}{n_-} = 1 - R_- \\ \end{align} \\

也就是说,ROC 曲线的纵轴其实就是正类的查全率,而横轴是 1 减去负类的查全率,也可以叫作负类的误查率。

  仍以图 0.1 中的二分类器为例,阈值设在各个位置时,正类查全率 TP\% 与负类误查率 FP\% 的数值如图 2.1 所示。注意,阈值哪怕设在得分最高的样例之上,TP\% 与 FP\% 也都有意义(等于 0)。

图 2.1:阈值设在各个位置时,正类查全率 TP% 与负类误查率 FP% 的数值

同样把 (FP\%, TP\%) 连成曲线,就得到了 ROC 曲线:

图 2.2:ROC 曲线的一个例子

  正常的 ROC 曲线,会集中在图像的左上角,在这个区域,正类的查准率高,负类的误查率低。它的左、右两端一定会位于 (0,0) 和 (1,1) ,分别对应阈值设为最高和最低的情况。从微观上看,ROC 曲线也是锯齿状的,但它的每一段都是横平竖直的(有正、负例得分相同时除外)。从宏观上看,ROC 曲线呈单调上升趋势;二分类器越好,ROC 曲线越接近图像的左上角。

  ROC 曲线跟 P-R 曲线有什么关系呢?我们发现,ROC 曲线的纵轴,恰好就是 P-R 曲线的横轴,它们都是正类的查全率 R_+ 。如果把 ROC 曲线以 (1/2, 1/2) 为中心顺时针旋转 90 度,就能让 ROC 曲线变得「像」P-R 曲线:

图 2.3:旋转后的 ROC 曲线(右),会与 P-R 曲线(左)呈现类似的趋势

此时两条曲线都集中在图像的右上角,宏观上呈单调下降趋势。旋转后的 ROC 曲线,其纵轴的含义是 R_- = \frac{TN}{TN + FP} ,即负例中有多大比例被正确地分类为负例,可以称为负类的查全率。而 P-R 曲线的纵轴是正类的查准率 P_+ = \frac{TP}{TP + FP} ,两条曲线只是纵轴的含义不同。

  在真实场景中,正例往往远少于负例。只要阈值不是设得极端低,一般都有 TP < TN ,所以 P_+ < R_- 。也就是说,除了在曲线的最右端,旋转后的 ROC 曲线一般会高于 P-R 曲线。在曲线的最右端,阈值设为最低,所有样例均被分类为正例;P-R 曲线的纵坐标(正类查准率)等于正例所占比例,而旋转后的 ROC 曲线的纵坐标(负类查全率)则会下降到 0。

三、一些典型的 P-R 与 ROC 曲线

  图 1.2 和图 2.2 展示了在一个小数据集上,P-R 曲线与 ROC 曲线都长成什么样子。那么在大数据集上,两种曲线又会长成什么样呢?下面展示几种典型情况,它们能够更好地体现两条曲线的宏观特征。

3.1 随机排序的情形

  把所有的样例随机排序,可以作为二分类问题的一个 baseline。可以想象,当样例随机排序时,不管把阈值设在哪里,正类的查准率都会接近正类在所有数据中的比例(下记为 \%_+ );而正类的查全率会跟负类的误查率一样高,都等于阈值上方的样例占所有数据的比例。于是,P-R 曲线将是纵坐标为 \%_+ 的一条横线,而 ROC 曲线将是从 (0,0) 到 (1,1) 的一条斜线。

  图 3.1 是把 2000 个正例和 8000 个负例随机排序后,绘制出的 P-R 曲线和 ROC 曲线,以及把 ROC 曲线顺时针旋转 90 度后的结果。除了 P-R 曲线的左端有较大波动以外,一切符合预期。

图 3.1:随机排序时的 P-R 曲线与 ROC 曲线

3.2 正、负类得分呈等方差高斯分布的情形

  假设正类与负类各有 5000 个样例,且两类的得分都服从方差为 1 的高斯分布,均值之差为 2,如图 3.2:

图 3.2:两类得分呈等方差的高斯分布

  这是一种比较真实的场景,在此场景下的 P-R 曲线与 ROC 曲线如图 3.3。P-R 曲线集中于右上角;ROC 曲线集中于左上角,顺时针旋转 90 度后则集中于右上角。

图 3.3:两类得分呈等方差高斯分布时的 P-R 曲线与 ROC 曲线

  曲线有多么靠近相应的角落,与两类得分的分布分得多么开有关。在上面的例子里,两类得分的均值之差 d 等于各自标准差 \sigma 的 2 倍。如果把两类得分的分布距离拉大,那么 P-R 和 ROC 曲线都会更加靠近角落。图 3.4 展示了 d=2\sigma, 3\sigma, 4\sigma 时曲线的样子:

图 3.4:两类得分的均值间距对 P-R 曲线与 ROC 曲线的影响

  上面的例子中,正例在所有数据中所占比例均为 50%。事实上,正例的比例对 P-R 曲线有较大的影响。图 3.5 展示了 d=2\sigma 的情况下,把正例的比例减少至 20% 和 5% 时的 P-R 曲线,可以看到,正例越少,曲线越低,并且曲线右端的纵坐标恰好就是正例的比例。与此不同的是,ROC 曲线并不受正例所占比例的影响,读者可以自行思考一下为什么。

图 3.5:正例所占比例对 P-R 曲线的影响

  我们还可以确认,当正例远少于负例时,旋转后的 ROC 曲线会高于 P-R 曲线,最右端除外。

3.3 正、负类得分呈不等方差高斯分布的情形

  在这一小节,我们来观察一下,两类得分呈不等方差的高斯分布时,P-R 曲线和 ROC 曲线长成什么样子。设正、负类各有 5000 个样例,正类得分的均值为 1、方差为 1,负类得分的均值为 -2、方差为 4,如图 3.6:

图 3.6:两类得分呈不等方差的高斯分布

  此时的 P-R 曲线和 ROC 曲线如图 3.7。注意到 P-R 曲线不再呈单调下降的趋势,而是先升后降,这是因为负类的最高得分跟正类的最高得分差不多了,哪怕把阈值设得很高,也无法完全排除负类。这并不是「两类得分方差不等」的必然结果,而是依赖于分布的具体参数。另外可以注意到,与等方差的情形不同,ROC 曲线不再是关于对角线对称的了。

图 3.7:两类得分呈不等方差高斯分布时的 P-R 曲线与 ROC 曲线

  同样地,两类得分的分布分得越开,曲线就越靠近角落(图略);正例所占比例会影响 P-R 曲线(如图 3.7),但不会影响 ROC 曲线(图略)。

图 3.8:正例所占比例对 P-R 曲线的影响

四、DET 曲线

  从上一节的例子中可以发现,当二分类器的性能很好时,ROC 曲线会非常接近角落。如果要把多个二分类器的 ROC 曲线画在一个图中进行比较,往往会看不清,于是就有了 DET 曲线[1]。说话人验证就是一个常常使用 DET 曲线的领域,因为说话人验证系统的漏查率与误查率常常都只有 1% 左右。

  DET 曲线的全名叫 detection error tradeoff curve,它表现的是「漏查」和「误查」两种错误的权衡。曲线的纵坐标是正类的漏查率,即 1 - R_+ ;横坐标是负类的误查率,即 1 - R_- 。仅从这里来看,DET 曲线似乎只是把 ROC 曲线上下翻转了一下。不过 DET 曲线的精髓,在于它的两个坐标轴不是线性的,而是使用标准高斯分布累积密度函数 \Phi 的反函数 \Phi^{-1} 进行了非线性伸缩。比如,

\begin{align} \Phi^{-1}(0.5) &= 0 \\ \Phi^{-1}(0.2) &\approx -0.84 \\ \Phi^{-1}(0.1) &\approx -1.28 \\ \Phi^{-1}(0.05) &\approx -1.64 \\ \end{align} \\

那么,横轴就表示 50% 的漏查率,而 20%、10%、5% 的漏查率则画在横轴往下 0.84、1.28、1.64 个单位长度的地方;同样地,纵轴表示 50% 的误查率,而 20%、10%、5% 的误查率则画在纵轴往左 0.84、1.28、1.64 个单位长度的地方。DET 曲线的坐标系如图 4.1 所示。由于漏查率和误查率一般都低于 50%,所以 DET 曲线往往只画出第三象限的部分。二分类器越好,DET 曲线越靠近左下角。

图 4.1:DET 曲线的坐标系

  使用 \Phi^{-1} 对坐标轴进行非线性伸缩,可以把低错误率系统的差距放大,便于比较。那么为什么偏要选用 \Phi^{-1} 这个函数呢?其它函数,比如对数函数,不好吗?原来,当两类得分的分布确实是高斯分布时,\Phi^{-1} 可以让 DET 曲线变成直线。这个证明非常简单:设正类得分服从高斯分布 \mathcal{N}(\mu_+, \sigma_+^2) ,负类得分服从高斯分布 \mathcal{N}(\mu_-, \sigma_-^2) (参见图 3.6)。当阈值设为 \theta 时,正类的漏查率(阈值左侧面积占比)为 \Phi\left(\frac{\theta - \mu_+}{\sigma_+}\right) ,而负类的误查率(阈值右侧面积占比)为 \Phi\left(\frac{\mu_- - \theta}{\sigma_-}\right) 。使用 \Phi^{-1} 进行伸缩后,这个工作点在 DET 图中的坐标就是 \left( \frac{\mu_- - \theta}{\sigma_-}, \frac{\theta - \mu_+}{\sigma_+} \right) ,很明显,这样的点的轨迹是直线 \sigma_- x + \sigma_+ y = \mu_- - \mu_+。

  图 4.2 展示的是两类得分服从等方差高斯分布时的 DET 曲线。两类得分的方差均为 1( \sigma_+ = \sigma_- = 1 ),均值之差 d = \mu_+ - \mu_- 取 2、3、4。这些 DET 曲线都是斜率为 -1 的直线(看起来歪歪扭扭是由于数据有采样噪声),两类得分分得越开,曲线越靠近左下角。

图 4.2:两类得分呈等方差高斯分布时的 DET 曲线

  图 4.3 展示的是两类得分服从不等方差高斯分布时的 DET 曲线。图中正类得分固定服从 \mathcal{N}(1,1) ,负类得分均值 \mu_- 固定为 -2,标准差 \sigma_- 取 1、2、3。这些 DET 曲线的斜率不同,但都经过纵轴上的固定点。

图 4.3:两类得分呈等方差高斯分布时的 DET 曲线

  顺便说一下,二分类器的阈值使得正类漏查率与负类误查率相等时,这两个错误率称为等错误率(equal error rate,EER)。在 DET 曲线图上,做出对角线 y=x,找到它与 DET 曲线的交点,就可以读出等错误率了。

本篇小结

  1. P-R 曲线的纵轴是正类的查准率 P_+,横轴是正类的查全率 R_+。曲线宏观上单调递减,二分类器越好,曲线越靠近右上角。
  2. ROC 曲线的纵轴是正类的查全率 R_+,横轴是负类的误查率 1-R_-。曲线宏观上单调递增,二分类器越好,曲线越靠近左上角。
  3. 把 ROC 曲线顺时针旋转 90 度,可以让它跟 P-R 曲线一样都以 R_+ 为横轴,旋转后的 ROC 曲线的纵轴为负类的查全率 R_-。旋转后的 ROC 曲线整体上会高于 P-R 曲线,最右端除外。
  4. P-R 曲线会受正例在所有数据中所占比例的影响(正例越多,曲线越高),ROC 曲线不会。
  5. DET 曲线的纵轴是正类的漏查率 1 - R_+,横轴是负类的误查率 1-R_-,相当于把 ROC 曲线上下翻转。DET 曲线用 \Phi^{-1} 函数对两个坐标轴进行了非线性伸缩,能够放大低错误率系统的差距;在两类得分服从高斯分布时,曲线将变成直线。DET 曲线宏观上单调递减,二分类器越好,曲线越靠近左下角。

参考

  1. ^https://apps.dtic.mil/dtic/tr/fulltext/u2/a530509.pdf

原文作者:;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
管理员

注册时间:2018-03-30

  • 博文量
    2383
  • 访问量
    983939