第2章 模型评估与选择
2.1 经验误差与过拟合
- 误差(error) 学习器的实际预测输出与样本的真实输出之间的差异
- 训练误差 / 经验误差(training error / empirical error) 学习器在训练集上的误差
- 泛化误差(generalization error) 学习器在新样本上的误差
- 欠拟合(underfitting) 对训练样本的一般性质尚未学好
- 过拟合(overfitting) 把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,导致泛化性能下降
过拟合无法彻底避免,我们只能减小其风险。
2.2 评估方法
通过某种方法将数据集D分成训练集S和测试集T,用测试集来测试学习器对新样本的判别能力,以测试集上的测试误差作为泛化误差的近似。下面是几种常见做法。
2.2.1 留出法
2.2.2 交叉验证法
留出法和交叉验证法实际评估的模型所使用的训练集比D小,必然会引入因训练样本规模不同导致的估计偏差;留一法受训练样本规模变化的影响较小,但计算复杂度很高。较好的解决方案如下:
2.2.3 自助法
2.2.4 调参与最终模型
在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,即参数调节(parameter tuning,简称调参)。学习算法的很多参数是在实数范围内取值,常用做法是对每个参数选定一个范围和变化步长,产生候选参数值来训练模型。
在模型选择完成后,学习算法和参数配置已选定,此时用数据集D的所有m个样本重新训练模型,产生提交给用户的最终模型。
注意:
- 测试数据 学得模型在实际使用中遇到的数据
- 验证集(validation set) 模型评估与选择过程中用于评估测试的数据集
2.3 性能度量
性能度量(performance measure) 衡量模型泛化能力的评价标准,反映了任务需求。
回归任务最常用的性能度量是均方误差(mean squared error)
更一般的,对于数据分布 D \boldsymbol{D} D 和概率密度函数 p ( ⋅ ) p(\cdot) p(⋅) ,均方误差可描述为
分类任务中常用的性能度量在下面介绍。
2.3.1 错误率与精度
分类任务中最常用的两种性能度量。既适用于二分类任务,也适用于多分类任务。
-
错误率 分类错误的样本数占样本总数的比例
更一般的,错误率可描述为
-
精度 分类正确的样本数占样本总数的比例
更一般的,精度可描述为
2.3.2 查准率、查全率与F1
对于二分类问题,可将样例划分为四类,分类结果的“混淆矩阵”如下:
真实情况 | 预测为正 | 预测为反 |
---|---|---|
正例 | TP(真正例) | FN(假反例) |
反例 | FP(假正例) | TN(真反例) |
-
查准率(precision,也称准确率,即预测为正的正确率) P = T P T P + F P = 真 正 例 预 测 的 所 有 正 例 P=\frac{TP}{TP+FP}=\frac{真正例}{预测的所有正例} P=TP+FPTP=预测的所有正例真正例
-
查全率(recall,也称召回率,即预测出的正例占全部正例的比率) R = T P T P + F N = 真 正 例 实 际 的 所 有 正 例 R=\frac{TP}{TP+FN}=\frac{真正例}{实际的所有正例} R=TP+FNTP=实际的所有正例真正例
查准率和查全率是一对矛盾的度量,通常只有在一些简单任务中,才可能使二者都很高。
-
P-R图
P-R图直观显示出学习器在样本总体上的查全率、查准率。
进行比较时,若一个学习器的曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,如图中A的性能优于C;如果两个曲线发生交叉,如图中A、B,则难以断言孰优孰劣,需结合具体情况。很多情况下,人们比较P-R曲线下面积的大小来衡量 学习器的性能,但面积值不易估算,因此产生了一些综合考虑查准率、查全率的性能度量。 -
平衡点(Break-Even Point,简称BEP) “查准率=查全率”时的取值。根据这个度量,可认为图中学习器A优于B。由于BEP过于简化,更常用的是F1度量。
-
F1 = 2 × P × R P + R = 2 × T P 样 例 总 数 + T P − T N =\frac{2 \times P\times R}{P+R}=\frac{2 \times TP}{样例总数+TP-TN} =P+R2×P×R=样例总数+TP−TN2×TP
F1度量的一般形式—— F β F_\beta Fβ,能让我们表达出对查全率/查准率的不同偏好,它定义为
β \beta β>0度量了查全率对查准率的相对重要性。 β \beta β=1时即为F1; β \beta β>1时查全率有更大影响; β \beta β<1时查准率有更大影响。
当我们在n个二分类混淆矩阵上综合考察查准率和查全率时,有两种常用做法如下:
-
先在各混淆矩阵上分别计算出查准率和查全率,再计算平均值,可得到
宏查准率(macro-P)
宏查全率(macro-R)
宏F1(macro-F1) -
先将各混淆矩阵的对应元素进行平均,得到 T P 、 F P 、 T N 、 F N TP、FP、TN、FN TP、FP、TN、FN 的平均值,分别记为 T P ‾ 、 F P ‾ 、 T N ‾ 、 F N ‾ \overline{TP}、\overline{FP}、\overline{TN}、\overline{FN} TP、FP、TN、FN,再基于这些平均值计算出微查准率(micro-P)
微查全率(micro-R)
微F1(micro-F1)
2.3.3 ROC与AUC
很多学习器是为测试样本产生一个实值或概率预测,然后将预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。
实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判作正例,后一部分判作反例。
在不同的应用任务中,我们可以根据任务需求来采用不同的截断点。因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或“一般性能下”泛化能力的好坏。ROC曲线是从这个角度出发来研究学习器泛化性能的有力工具。
- ROC 受试者工作特征(Receiver Operating Characteristic)曲线
我们根据学习器的预测结果对样例排序,按序逐个把样本作为正例进行预测,每次计算出假正例率和真正例率,分别以它们为横、纵坐标作图,得到“ROC曲线”。-
真正例率(True Positive Rate,简称TPR) TPR = T P T P + F N = 真 正 例 实 际 的 所 有 正 例 =\frac{TP}{TP+FN}=\frac{真正例}{实际的所有正例} =TP+FNTP=实际的所有正例真正例
-
假正例率(False Positive Rate,简称FPR) FPR = F P T N + F P = 假 正 例 实 际 的 所 有 反 例 =\frac{FP}{TN +FP}=\frac{假正例}{实际的所有反例} =TN+FPFP=实际的所有反例假正例
-
显示ROC曲线的图称为“ROC图”。示意如下,易知对角线对应于“随机猜测”模型,点(0,1)对应于将所有正例排在所有反例之前的“理想模型”。
现实中通常利用有限个测试样例来绘制ROC图,此时仅能获取有限个坐标对,无法产生光滑的ROC曲线,只能绘制出下图所示的近似ROC曲线。
进行学习器的比较时,与P-R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve)。AUC可估算为AUC考虑的是样本预测的排序质量,与排序误差有紧密联系。给定
m
+
m^+
m+ 个正例和
m
−
m^-
m− 个反例,令
D
+
D^+
D+ 和
D
−
D^-
D− 分别表示正、反例集合,则排序“损失”(loss)定义为
即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个罚分。容易看出,其对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率。因此有
2.3.4 代价敏感错误率与代价曲线
为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
以二分任务为例,根据任务的领域知识设定一个“代价矩阵”(cost matrix),如下,其中 c o s t i j cost_{ij} costij 表示将第 i i i 类样本预测为第 j j j 类样本的代价。一般地, c o s t i i = 0 cost_{ii}=0 costii=0 ;若将第0类判别为第1类所造成的损失更大,则 c o s t 01 > c o s t 10 cost_{01}>cost_{10} cost01>cost10;损失程度相差越大, c o s t 01 cost_{01} cost01 与 c o s t 10 cost_{10} cost10 值的差别越大(一般情况下,重要的是代价比值而非绝对值)。
在非均等代价下,我们希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将上表中的第0类作为正类、第1类作为反类,令 D + D^+ D+ 与 D − D^- D− 分别代表样例集 D D D 的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为
在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。
代价曲线图的横轴是取值为 [0,1] 的正例概率代价其中
p
p
p 是样例为正例的概率;纵轴是取值为 [0,1] 的归一化代价其中FPR
=
假
正
例
实
际
的
所
有
反
例
=\frac{假正例}{实际的所有反例}
=实际的所有反例假正例 是假正例率,FNR
=
=
= 1
−
-
−TPR
=
假
反
例
实
际
的
所
有
正
例
=\frac{假反例}{实际的所有正例}
=实际的所有正例假反例 是假反例率。
如下图,围成的面积即为在所有条件下学习器的期望总体代价。
2.4 比较检验
统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。基于假设检验结果我们可以推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大。
为便于讨论,本节默认以错误率为性能度量。
2.4.1 假设检验
-
二项检验(binomial test)
可用二项检验对假设进行检验。
-
t 检验(t-test)
平均测试错误率方差
2.4.2 交叉验证 t 检验
2.4.3 McNemar检验
2.4.4 Friedman检验与Nemenyi后续检验
- Friedman检验
由于“原始Friedman检验”过于保守,现在通常使用变量
- Nemenyi后续检验
平均序值差别的临界值域
2.5 偏差与方差
- 偏差-方差分解
“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具,试图对学习算法的期望泛化错误率进行拆解。
表示 | 含义 |
---|---|
x \boldsymbol x x | 测试样本 |
y D y_D yD | x \boldsymbol x x 在数据集中的标记 |
y y y | x \boldsymbol x x 的真实标记 |
f ( x ; D ) f(\boldsymbol x;D) f(x;D) | 训练集 D D D 上学得模型 f f f在 x \boldsymbol x x上的预测输出 |
以回归任务为例, 学习算法的期望预测为于是可知,泛化误差可分解为偏差、方差与噪声之和。
- 偏差 度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力
- 方差 度量了同样大小的训练集的变动所导致的学习性能的变化, 即刻画了数据扰动所造成的影响
- 噪声 表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界, 即 刻画了学习问题本身的难度
通过偏差-方差分解,我们知道,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同确定的。
- 偏差-方差窘境