性能度量

性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,这也意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和数据,还取决于任务需求。
在预测任务中,给定样例集\(D = \{ (\pmb{x}_1,y_1), (\pmb{x}_2,y_2), \cdots, (\pmb{x}_m,y_m)\}\),其中\(y_i\)是示例\(\pmb{x}_i\)的真实标记。要评估学习器\(f\)的性能,需要把学习器预测结果\(f(\pmb{x})\)和真实标记\(y\)进行比较。
回归任务中最常用的性能度量是“均方误差”(mean squared error) \[E(f;D) = \frac{1}{m} \sum_{i=1}^m (f(\pmb{x}_i) - y_i)^2\] 更一般的,对于数据分布\(\mathscr{D}\)和概率密度函数\(p(·)\),均方误差可描述为 \[E(f;D) = \int_{\pmb{x} \sim \mathscr{D}} (f(\pmb{x}_i) - y_i)^2 p(\pmb{x}) d \pmb{x}\]

1. 错误率与精度

错误率:分类错误的样本数占样本总数的比例;
精度:分类正确的样本数占样本总数的比例。

对样例集\(D\),分类错误率定义为 \[E(f;D) = \frac{1}{m} \sum_{i=1}^m I(f(\pmb{x}_i) \neq y_i)\] 精度则定义为 \[acc(f;D) = \frac{1}{m} \sum_{i=1}^m I(f(\pmb{x}_i) = y_i) = 1 - E(f;D)\] 更一般的,对于数据分布\(\mathscr{D}\)和概率密度函数\(p(·)\),错误率与精度可分别描述为 \[E(f;D) = \int_{\pmb{x} \sim \mathscr{D}} I(f(\pmb{x}) \neq y) p(\pmb{x}) d \pmb{x}\]\[\begin{align} acc(f;D) &= \int_{\pmb{x} \sim \mathscr{D}} I(f(\pmb{x}) = y) p(\pmb{x}) d \pmb{x} \nonumber \\ &= 1 - E(f;D) \nonumber \end{align}\]

2. 查准率、查全率和\(F1\)

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令\(TP、FP、TN、FN\)分别表示其对应的样例数,则显然有\(TP + FP + TN + FN = 样例总数\)

查准率\(P\)和查全率\(R\)分别定义为 \[\begin{align} P = \frac{TP}{TP + FP} \nonumber \\ R = \frac{TP}{TP + FN} \nonumber \end{align}\] 查准率和查全率是一对矛盾的变量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
我们可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”。

P-R图直观的显示出学习器在样本总体上的查全率、查准率。在进行比较时:

  • 若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,例如上图中学习器A的性能优于学习器C;
  • 如果两个学习器的P-R曲线发生了交叉,例如上图中的A与B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。

在很多情形下,往往仍希望把学习器A与B比出个高低。这时一个合理的判据是比较P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例,但这个值不太容易估算。
“平衡点”(Break-Even Point,BEP)是“查准率=查全率”时的取值,基于BEP的比较,可认为学习器A优于B。
\(F1\)值是基于查准率和查全率的调和平均(harmonic mean)定义的: \[\begin{align} \frac{1}{F1} &= \frac{1}{2} · (\frac{1}{P} + \frac{1}{R}) \nonumber \\ F1 &= \frac{2PR}{P+R} \nonumber \end{align}\] \(F_{\beta}\)则是加权调和平均: \[\begin{align} \frac{1}{F_{\beta}} &= \frac{1}{1+\beta^2} · (\frac{1}{P} + \frac{\beta^2}{R}) \nonumber \\ F_{\beta} &= \frac{(1+\beta^2) PR}{\beta^2P + R} \nonumber \end{align}\]

很多时候有多个二分类混淆矩阵,例如进行了多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计全局性能。
一种直接的做法是先在个混淆矩阵上分别计算出查准率和查全率,记为\((P_1,R_1),(P_2,R_2),\cdots,(P_n,R_n)\),再计算平均值,这样就得到了“宏查准率”(macro-\(P\))、“宏查全率”(macro-\(R\))以及相应的“宏\(F1\)”(macro-\(F1\)): \[\begin{align} \text{macro-}P &= \frac{1}{n} \sum_{i=1}^n P_i \nonumber \\ \text{macro-}R &= \frac{1}{n} \sum_{i=1}^n R_i \nonumber \\ \text{macro-}F1 &= \frac{2 \times \text{macro-}P \times \text{macro-}R}{\text{macro-}P+\text{macro-}R} \nonumber \end{align}\] 还可现将各混淆矩阵的对应元素进行平均,得到\(TP、FP、TN、FN\)的平均值,分别记为\(\overline{TP},\overline{FP},\overline{TN},\overline{FN}\),再基于这些平均值计算出“微查准率”(micro-\(P\))、“微查全率”(micro-\(R\))和“微\(F1\)”(micro-\(F1\)): \[\begin{align} \text{micro-}P &= \frac{\overline{TP}}{\overline{TP} + \overline{FP}} \nonumber \\ \text{micro-}R &= \frac{\overline{TP}}{\overline{TP} + \overline{FN}} \nonumber \\ \text{micro-}F1 &= \frac{2 \times \text{micro-}P \times \text{micro-}R}{\text{micro-}P+\text{micro-}R} \nonumber \end{align}\]

3. ROC和AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值进行比较,若大于阈值则分为正类,否则为反类。例如,神经网络在一般情形下对每个测试样本预测出一个\([0.0,1.0]\)之间的实值,然后将这个值与0.5进行比较,大于0.5则判为正例,否则为反例。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。实际上,根据这个实值或概率预测结果,可将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判为正例,后一部分判为负例。
在不同的应用任务中,可根据任务需求来采用不同的截断点:

  • 如果重视查准率,则可选择排序中靠前的位置进行截断;
  • 如果更重视查全率,则可选择靠后的位置进行截断。

排序本身的好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说是“一般情况下”泛化性能的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。

ROC全称为“受试者工作特征”(Receiver Operating Characteristic)曲线,与P-R曲线相似,根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了ROC曲线。与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴为“真正例率”(True Positive Rate,TPR),横轴为“假正例率”(False Positive Rate,FPR),两者分别定义为 \[\begin{align} TPR = \frac{TP}{TP + FN} \nonumber \\ FPR = \frac{FP}{TN + FP} \nonumber \end{align}\] 显示ROC曲线的图称为“ROC图”。下图给出一个示意图,显然,对角线所对应于“随机猜测”模型,而点\((1,0)\)则对应于将所有正例排在所有反例之前的“理想模型”。

现实任务中通常利用有限个测试样例来绘制ROC图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生(a)中光滑的ROC曲线,只能绘制出(b)所示的近似ROC曲线。
绘制过程:

  1. 给定\(m^+\)个正例和\(m^-\)个反例,根据学习器预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标\((0,0)\)处标记一个点;
  2. 将分类阈值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为\((x,y)\),当前若为真正例,则对应标记点的坐标为\((x,y+\frac{1}{m^+})\);若为假正例,则对应标记点的坐标为\((x+\frac{1}{m^-},y)\)
  3. 用线段连接相邻点。

进行学习器的比较时,与P-R图相似:

  • 若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;
  • 若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。

AUC可通过对ROC曲线下各部分的面积求和得到。假定ROC曲线是由坐标为\(\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\}\)的点按序连接而形成(\(x_1 = 0, x_m = 1\))。参见图(b),则AUC可估算为 \[AUC = \frac{1}{2} \sum_{i=1}^{m-1} (x_{i+1} - x_i)·(y_i + y_{i+1})\] 形式化地看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。给定\(m^+\)个正例和\(m^-\)个反例,令\(D^+\)\(D^-\)分别表示正、反例集合,则排序“损失”定义为 \[\mathscr{l}_{rank} = \frac{1}{m^+ m^-} \sum_{\pmb{x}^+ \in D^+} \sum_{\pmb{x}^- \in D^-} (I(f(\pmb{x}^+) < f(\pmb{x}^-)) + \frac{1}{2} (f(\pmb{x}^+) = f(\pmb{x}^-)))\] 即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。可以看出,\(\mathscr{l}_{rank}\)对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为\((x,y)\),则\(x\)恰是排序在其之前的反例所占的比例,即假正例率。因此有 \[AUC = 1 - \mathscr{l}_{rank}\]

4. 代价敏感错误率与代价曲线

现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但两者的影响却大不相同。为了权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
以二分任务为例,根据任务的领域知识设定一个“代价矩阵”(cost matrix)。如下图所示,\(cost_{ij}\)表示将第\(i\)类样本预测为第\(j\)类样本的代价。一般来说,\(cost_{ii} = 0\);若将第0类判别为第1类所造成的损失更大,则\(cost_{01} > cost_{10}\)。损失程度相差越大,\(cost_{01}\)\(cost_{10}\)值的差别越大。
一般来说,重要的是代价比值而非绝对值,例如\(cost_{01} : cost_{10} = 5:1\)\(50:10\)所起的效果相当。

之前介绍的性能度量大都隐式地假设了均等代价,并没有考虑不同错误会造成不同的结果。在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若上表中的第0类作为正类、第1类作为反类,令\(D^+\)\(D^-\)分别代表样例集\(D\)的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为 \[E(f;D;cost) = \frac{1}{m} (\sum_{\pmb{x}_i \in D^+} I(f(\pmb{x}_i) \neq y_i) \times cost_{01} + \sum_{\pmb{x}_i \in D^-} I(f(\pmb{x}_i) \neq y_i) \times cost_{10})\] 类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量如精度的代价敏感版本。若令\(cost_{ij}\)中的\(i,j\)取值不限于0、1,则可定义出多分类任务中的代价敏感性能度量。
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到目的。代价曲线图的横轴是取值为\([0,1]\)的整理概率代价 \[P(+)cost = \frac{p \times cost_{01}}{p \times cost_{01} + (1-p) \times cost_{10}}\] 其中\(p\)是样例为正例的概率;纵轴是取值为\([0,1]\)的归一化代价 \[cost_{norm} = \frac{FNR \times p \times cost_{01} + FPR \times (1-p) \times cost_{10}}{p \times cost_{01} + (1-p) \times cost_{10}}\] 其中\(FPR\)是假正例率,\(FNR = 1 - TPR\)是假反例率。
代价曲线的绘制:

  1. ROC曲线上每一个点对应了代价平面上的一条线段,设ROC曲线上点的坐标\((FPR,TPR)\),则可相应计算出\(FNR\),然后在代价平面上绘制一条从\((0,FPR)\)\((1,FNR)\)的线段,线段下的面积即表示了该条件下的期望总体代价;
  2. 将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价。