机器学习中,最「简单」的一种任务就是二分类任务了。比如,说话人验证(speaker verification)就是一个二分类任务:判断一句话是否是给定说话人说的。再比如,信息检索(information retrieval)本质上也是一个二分类任务:给定关键词,判断每篇文章是否与关键词相关,并把相关结果排序返回。
许多二分类器的原理,都是给每个样例打一个分,然后设置一个阈值,分数高于阈值的样例就被分为正类,低于阈值则被分为负类。在评价系统性能时,一般可以计算准确率(accuracy),也就是分类正确的样例在所有样例中所占的比例。当两类分布不均衡时(一般是正例远少于负例),也常常计算正类的查准率(precision)、查全率(recall),以及二者的调和平均数 F1。
准确率、查准率、查全率、F1 这些指标,全都依赖于具体的阈值。但有时候,我们希望不把阈值固定,而是根据需求来调整。如图 0.1,把所有的样例按得分由高到低排序,得到一个有序列表(ranked list)。对于一个正常的二分类器,正例应该集中在列表的顶端,而负例应该集中在列表的底端,中间会有模糊地带。如果想追求高查准率,就可以把阈值调高,把中间地带排除出去;想追求高查全率,就可以把阈值调低,把中间地带包括进来。

在不固定阈值的情况下,要怎么评价一个二分类器的性能呢?这种评价,实质上就是评价上述的有序列表,能够在多大程度上把正例和负例分开。刻画正例和负例分得有多开,常常使用下面三种曲线:
● 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 曲线表现的,就是查准率、查全率随阈值的变化。具体来说,它的纵轴是正类的查准率
,横轴是正类的查全率
。定义下面四个量:
● True positives(
):标准答案为正,系统分类也为正的样例数量;
● False negatives(
):标准答案为正,系统分类却为负的样例数量;
● False positives(
):标准答案为负,系统分类却为正的样例数量;
● True negatives(
):标准答案为负,系统分类也为负的样例数量;
并记正例、负例的总数为:

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

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

把所有的
连成曲线,这就是 P-R 曲线:

正常的 P-R 曲线,会集中在图像的右上角,在这个区域,正类的查准率和查全率都高。它的右端不会到达
,而是会位于
,其纵坐标为正例在所有数据中的比例,这对应于阈值设为最低的情形。它的左端也并不在
:对于正常的二分类器,得分最高的样例应当是个正例,所以左端的坐标会是
,实际上很接近
;如果很不幸,得分最高的样例是个负例,那么左端的坐标就是
了。
从微观上看,P-R 曲线是锯齿状的。当阈值下调,跨越一个正例时,
、
都会升高,产生一条向右上方的线段;当阈值跨越一个负例时,
不变,而
会减小,产生一条竖直向下的线段。图 1.2 中有一条向右下方的线段,这是由于有一正一负两个样例得分都是 0.6 产生的,这种得分相同的情况在实际中是罕见的。从宏观上看,
、
是鱼与熊掌不可兼得的关系,所以 P-R 曲线呈现单调下降的趋势;但越好的二分类器,其 P-R 曲线会越接近图像的右上角。
ROC 曲线的全称叫 receiver operating characteristic curve。这个名字有点儿费解:怎么还跟信号接收机(receiver)有关呢?原来,ROC 曲线最早就是在二战中用来分析雷达接收机检测信号的能力的。
ROC 的纵轴叫作 true positive rate(
),即在所有的正例中,有多大的比例被正确地分类为正例。其横轴叫作 false positive rate(
),即在所有的负例中,有多大的比例被错误地分类为正例。用上一节中定义的
,这两个轴可以表示为:

也就是说,ROC 曲线的纵轴其实就是正类的查全率,而横轴是 1 减去负类的查全率,也可以叫作负类的误查率。
仍以图 0.1 中的二分类器为例,阈值设在各个位置时,正类查全率
与负类误查率
的数值如图 2.1 所示。注意,阈值哪怕设在得分最高的样例之上,
与
也都有意义(等于 0)。

同样把
连成曲线,就得到了 ROC 曲线:

正常的 ROC 曲线,会集中在图像的左上角,在这个区域,正类的查准率高,负类的误查率低。它的左、右两端一定会位于
和
,分别对应阈值设为最高和最低的情况。从微观上看,ROC 曲线也是锯齿状的,但它的每一段都是横平竖直的(有正、负例得分相同时除外)。从宏观上看,ROC 曲线呈单调上升趋势;二分类器越好,ROC 曲线越接近图像的左上角。
ROC 曲线跟 P-R 曲线有什么关系呢?我们发现,ROC 曲线的纵轴,恰好就是 P-R 曲线的横轴,它们都是正类的查全率
。如果把 ROC 曲线以
为中心顺时针旋转 90 度,就能让 ROC 曲线变得「像」P-R 曲线:

此时两条曲线都集中在图像的右上角,宏观上呈单调下降趋势。旋转后的 ROC 曲线,其纵轴的含义是
,即负例中有多大比例被正确地分类为负例,可以称为负类的查全率。而 P-R 曲线的纵轴是正类的查准率
,两条曲线只是纵轴的含义不同。
在真实场景中,正例往往远少于负例。只要阈值不是设得极端低,一般都有
,所以
。也就是说,除了在曲线的最右端,旋转后的 ROC 曲线一般会高于 P-R 曲线。在曲线的最右端,阈值设为最低,所有样例均被分类为正例;P-R 曲线的纵坐标(正类查准率)等于正例所占比例,而旋转后的 ROC 曲线的纵坐标(负类查全率)则会下降到 0。
图 1.2 和图 2.2 展示了在一个小数据集上,P-R 曲线与 ROC 曲线都长成什么样子。那么在大数据集上,两种曲线又会长成什么样呢?下面展示几种典型情况,它们能够更好地体现两条曲线的宏观特征。
3.1 随机排序的情形
把所有的样例随机排序,可以作为二分类问题的一个 baseline。可以想象,当样例随机排序时,不管把阈值设在哪里,正类的查准率都会接近正类在所有数据中的比例(下记为
);而正类的查全率会跟负类的误查率一样高,都等于阈值上方的样例占所有数据的比例。于是,P-R 曲线将是纵坐标为
的一条横线,而 ROC 曲线将是从
到
的一条斜线。
图 3.1 是把 2000 个正例和 8000 个负例随机排序后,绘制出的 P-R 曲线和 ROC 曲线,以及把 ROC 曲线顺时针旋转 90 度后的结果。除了 P-R 曲线的左端有较大波动以外,一切符合预期。

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

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

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

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

我们还可以确认,当正例远少于负例时,旋转后的 ROC 曲线会高于 P-R 曲线,最右端除外。
3.3 正、负类得分呈不等方差高斯分布的情形
在这一小节,我们来观察一下,两类得分呈不等方差的高斯分布时,P-R 曲线和 ROC 曲线长成什么样子。设正、负类各有 5000 个样例,正类得分的均值为 1、方差为 1,负类得分的均值为 -2、方差为 4,如图 3.6:

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

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

从上一节的例子中可以发现,当二分类器的性能很好时,ROC 曲线会非常接近角落。如果要把多个二分类器的 ROC 曲线画在一个图中进行比较,往往会看不清,于是就有了 DET 曲线[1]。说话人验证就是一个常常使用 DET 曲线的领域,因为说话人验证系统的漏查率与误查率常常都只有 1% 左右。
DET 曲线的全名叫 detection error tradeoff curve,它表现的是「漏查」和「误查」两种错误的权衡。曲线的纵坐标是正类的漏查率,即
;横坐标是负类的误查率,即
。仅从这里来看,DET 曲线似乎只是把 ROC 曲线上下翻转了一下。不过 DET 曲线的精髓,在于它的两个坐标轴不是线性的,而是使用标准高斯分布累积密度函数
的反函数
进行了非线性伸缩。比如,

那么,横轴就表示 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 曲线越靠近左下角。

使用
对坐标轴进行非线性伸缩,可以把低错误率系统的差距放大,便于比较。那么为什么偏要选用
这个函数呢?其它函数,比如对数函数,不好吗?原来,当两类得分的分布确实是高斯分布时,
可以让 DET 曲线变成直线。这个证明非常简单:设正类得分服从高斯分布
,负类得分服从高斯分布
(参见图 3.6)。当阈值设为
时,正类的漏查率(阈值左侧面积占比)为
,而负类的误查率(阈值右侧面积占比)为
。使用
进行伸缩后,这个工作点在 DET 图中的坐标就是
,很明显,这样的点的轨迹是直线
。
图 4.2 展示的是两类得分服从等方差高斯分布时的 DET 曲线。两类得分的方差均为 1(
),均值之差
取 2、3、4。这些 DET 曲线都是斜率为 -1 的直线(看起来歪歪扭扭是由于数据有采样噪声),两类得分分得越开,曲线越靠近左下角。

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

顺便说一下,二分类器的阈值使得正类漏查率与负类误查率相等时,这两个错误率称为等错误率(equal error rate,EER)。在 DET 曲线图上,做出对角线
,找到它与 DET 曲线的交点,就可以读出等错误率了。
,横轴是正类的查全率
。曲线宏观上单调递减,二分类器越好,曲线越靠近右上角。
,横轴是负类的误查率
。曲线宏观上单调递增,二分类器越好,曲线越靠近左上角。
为横轴,旋转后的 ROC 曲线的纵轴为负类的查全率
。旋转后的 ROC 曲线整体上会高于 P-R 曲线,最右端除外。
,横轴是负类的误查率
,相当于把 ROC 曲线上下翻转。DET 曲线用
函数对两个坐标轴进行了非线性伸缩,能够放大低错误率系统的差距;在两类得分服从高斯分布时,曲线将变成直线。DET 曲线宏观上单调递减,二分类器越好,曲线越靠近左下角。原文作者:;如有侵权,请联系管理员删除。