《机器学习》— 第2章 模型评估与选择

1. 经验误差与过拟合

错误率:分类错误的样本数占样本总数的比例

例如:m个样本中有a个样本分类错误,则错误率为 E=a/m

精度:分类正确的样本数占样本总数的比例。即:精度=1-错误率

例如:m个样本中有m-a个样本分类正确,则精度 A=(m-a)/m=1-E

误差:学习器的实际预测输出与样本的真实输出之间的差异

例如:10000个西瓜中,好瓜有6000个,但学习器预测有6500个,这之间的差异就是误差

训练误差、经验误差:学习器在训练集上的误差

测试误差:学习器在测试集上的误差

泛化误差:学习器在新样本上的误差

我们希望得到泛化误差最小的学习器,然而实际能做的是努力使经验误差最小化。

在很多情况下,我们可以学的一个经误差很小、在训练集上表现很好的学习器,但是在新样本中很有可能表现却并不好。

例如:甚至对所有训练样本都分类正确,即分类错误率为0,分类精度为100%,但是在新样本中的分类全错误。

过拟合:学习器把训练样本学得太好,将训练样本自身的一些特点当成了所有潜在样本都会具有的一般性质,从而导致泛化性能下降。

最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了

过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施,但过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者减小其风险。

例如:过拟合导致误以为树叶必须有锯齿,如下图。

欠拟合:相对于“过拟合”,对训练样本的一般性质尚未学好。

最常见的情况是由于学习能力低下造成的。

欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网路学习中增加训练轮数等

例如:欠拟合误以为绿色的都是树叶,如下图。

过拟合、欠拟合的直观类比

2. 评估方法

使用测试集来测试学习器对新样本的判别能力,然后以测试误差作为泛化误差的近似

通常我们假设测试样本也是从样本真实分布中独立同分布采样得到,需要注意的是测试集应该尽可能与训练集互斥

例如:老师出了10道练习题供同学们练习,考试又用这10道题作为考题,可能有的同学只会做这10道题却能得高分,并不能体现同学们对所学知识举一反三的能力,也就是泛化能力。

2.1 留出法

留出法(hold-out):通过分层采样直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D=STS T=∅,在S上训练处模型后,用T来评估其测试误差,作为泛化误差的估计。

例如:假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本,用S进行训练后,如果模型在T上有90个样本错误,则错误率为 (90/300) * 100% = 30%,精度为 1 - 30% = 70%。

注意:训练集/测试集的划分要尽可能的保持数据分布的一致性,要避免因数据划分过程引入额外的偏差而对最终结果产生影响

分层采样:保留类别比例的采样方式

例如:通过对D进行分层采样而获得含70%样本的训练集S和含30%样本的测试集T,若D含500个正例、500个反例,则分层采样得到的S应该包含350个正例、350个反例,而T则包含150个正例和150个反例。

注意:单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。

例如:进行100次随机划分,每次产生一个训练/测试集用于式样评估,100次后就得到100个结果,留出法使用的是这100个结果的平均

存在的问题:训练集/测试集大小的选择对评估结果的影响,常见的做法是将大约2/3~4/5的样本用于训练,剩下样本用于测试

1. 若训练集S包含绝大多数样本,则训练集S与D比较接近,训练出的模型可能更加接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确

2. 若令测试集T多包含一些样本,则训练集S与D的差别较大,训练出的模型与用D训练出的模型可能有较大的差别,从而降低了评估结果的保真性。

2.2 交叉验证法(k折交叉验证)

交叉验证法:通过分层采样先将数据集D划分为k个大小相似的互斥子集,每次用k-1个子集的并集作为训练集,剩下的那个子集做测试集。可以获得k组训练/测试集,从而进行k次训练和测试,最终返回的是这k个测试结果的均值。

k常用的值为5、10、20等

例如:10折交叉验证

10折交叉验证示意图

注意:与留出法类似,为减少因样本划分不同引入的差别,k折交叉验证通常需要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。

例如:10次10折交叉验证

留一法:假定数据集中包含m个样本,若令k=m,则得到交叉验证的一个特例

留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分m个子集。

优点:由于训练集比初始数据集只少了一个样本,所以在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似,因此留一法的评估结果往往被认为比较准确。

缺点:在数据集比较大时,训练m个模型的计算开销可能是难以忍受的,而且这还是在未考虑算法调参的情况下

例如:数据集包含1百万个样本,则需要训练1百万个模型。

2.3 自助法

留出法和交叉验证法存在的问题:在留出法和交叉验证法中,由于保留了一部分样本用于测试,实际评估的模型使用的训练集比D小,会引入一些因为训练样本规模不同而导致的估计误差。留一法受样本规模变化的影响比较小,但是计算复杂度太高了。

自助法:给定包含m个样本的数据集D,按如下方式采样产生包含m个样本的数据集D':每次随机从D中挑选一个样本将其拷贝放入D',然后再将该样本放回D中,重复执行m次。D'我们用作训练集,未出现的样本D-D'我们用作测试集。

D中有一部分样本会在D'中重复出现,而另一部分样本不会出现。样本在m次采样中始终不会被采到的概率是:(1-1/m)^m,取极限得到

(1-1/m)^m的极限


优点:自助法在数据集较小、难以有效划分训练集和测试集时效果显著;能从初始数据集中产生多个不同的训练集

缺点:自助法产生的数据集改变了初始数据集的分布,引入了估计偏差,因此在初始数据量足够时,留出法和交叉验证法更常用一些。

2.4 调参与最终模型

参数调节、调参:对算法参数进行设定

调参和算法选择本质上是一致的,对每种参数配置都训练出模型,然后把对应最好的模型的参数作为结果。

学习算法的很多参数是在实数范围内取值的,因此对每种参数配置都训练出模型是不可行的。通常的做法是对每个参数选定一个范围和变化步长,显然这样选定的参数值往往不是最佳值,但这是在计算开销和性能估计之间做的折中,只有这样学习过程才变得可行。

例如:在[0,0.2]范围内以0.05为步长,则实际要评估的候选参数值有5个,最终从这5个候选值中产生选定值。

即便在进行这样的折中后,调参往往仍然很困难。很多强大的学习算法有大量的参数需要设定,这将导致极大的调参工程量,以至于在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响。

例如:算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有5^3=125个模型需要考察。

在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型。

通常把学得模型在实际使用中遇到的数据称为测试数据模型评估与选择中用于评估测试的数据集通常称为验证集

3. 性能度量


监督学习的性能度量

性能度量:衡量泛化能力的评价标准

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法数据,还决定于任务需求

在预测任务中,给定样例集D = {(x1, y1), (x2, y2),......, (xm, ym)}, 其中 yi是示例xi的真实标记,要评估学习器 的性能,需要将学习器的预测结果 f(x同真实标记y进行比较

回归任务的性能度量

均方误差:

离散样本的均方误差

更一般的,对于数据分布Ɗ和概率密度p(·),均方误差的可描述为:

连续样本的均方误差

3.1 错误率与精度

错误率:分类错误的样本数占样本总数的比例

例如:m个样本中有a个样本分类错误,则错误率为 E=a/m

精度:分类正确的样本数占样本总数的比例。即:精度=1-错误率

例如:m个样本中有m-a个样本分类正确,则精度 A=(m-a)/m=1-E

对样例集D,错误率定义为


离散样例的错误率

精度定义为

离散样例的精度

更一般的,对于数据分布Ɗ和概率密度p(·),错误率与精度可分别描述为:


连续样例的错误率


连续样例的精度

3.2 查准率、查全率与F1

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN)四种情形。

TP + FP +TN + FN = 样例总数

分类结果混淆矩阵

查准率P真正例样本数/预测结果是正例的样本数

查准率P

例如:瓜农拉来一车西瓜,挑出来的西瓜有多少比例是好瓜

查全率:真正例样本数/真实情况是正例的样本数

查全率R

例如:瓜农拉来一车西瓜,所有好瓜中有多少比例被挑了出来

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。通常只有在一些简单的任务中,才有可能是查全率和查准率都很高。

例如:若希望将好瓜尽可能多的选出来,则可通过增加选瓜的数量,如果将所有西瓜都选上,那么所有的好瓜也必然选上,但是这时查准率就会比较低。若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但是这样就会漏掉不少好瓜,使得查全率较低。

我们可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率做纵轴、查全率做横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”。


P-R曲线与平衡点示意图


基于P-R曲线的学习器性能评价规则

1. 当曲线没有交叉的时候:外侧曲线的学习器性能优于内侧;

例如:学习器A的性能优于学习器C

2. 当曲线有交叉的时候

1)、比较P-R曲线下面积,它在一定程度上表征了查全率和查准率取得相对“双高”的比例,但这个值不太容易估算;

2)、比较两条曲线的平衡点(Break-Event Point, 简称BEP),平衡点是“查准率=查全率”时的取值,BEP越大,性能越优。

例如:基于BEP的比较,可以认为学习器A优于学习器B

3)、BEP过于简化,更常用的F1度量和Fβ度量。

F1是基于查准率与查全率的调和平均定义的,Fβ则是加权调和平均


查准率与查全率的调和平均

F1度量的一般形式Fβ

查准率与查全率的加权调和平均

β > 0 度量了查全率对查准率的相对重要性。

β = 1 时退化为标准的F1;β > 1 时查全率有更大影响;β < 1 时查准率有更大影响。

很多时候我们有多个二分类混淆矩阵,我们希望在n个二分类混淆矩阵上综合考虑查准率和查全率。

例如:进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,需希望估计算法的“全局性能”;甚或是执行多分类任务,每两两类别的组合都对应一个混合矩阵。

1)、先在各个混淆矩阵中分别计算出查准率查全率,再计算平均值,这样就得到“宏查准率”(macro-P)、“宏查全率”(macro-R)以及“宏F1”(macro-F1)。

macro-P、macro-R以及macro-F1

2)、将各个混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN 的平均值,再基于这些平均值计算“微查准率”(micro-P)、“微查全率”(micro-R)和“微F1”(micro-F1)。


(micro-P)
micro-R和micro-F1


3.3 ROC与AUC

根据实值或概率预测结果,我们可以将测试样本进行排序,“最可能”是正例的排在前面,“最不可能”是正例的排在最后面。分类过程相当于在这个排序中以某个“截断点”将样本分为两个部分,前一部分判做正例,后一部分则判作反例。

在不同的应用任务中,我们可根据任务需求来采用不同的截断点。

例如:若我们更重视查准率。则可选择排序靠前的位置进行截断;若更重视查全率,则可选择靠后的位置进行截断。

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

ROC全名“受试者工作特征”曲线,以“真正例率”为纵轴,以“假正例率”为横轴。

真正例率TPR真正例样本数/真实情况是正例的样本数(查全率)


TPR

假正例率FPR假正例样本数/真实情况是是反例的样本数


FPR

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

ROC曲线与AUC示意图

现实任务中通常利用有限个测试样例来绘制ROC图,此时仅能获得有限个坐标,无法产生(a)中的ROC曲线,只能产生(b)中的ROC曲线。

基于ROC曲线的学习器性能评价规则

1. 当曲线没有交叉的时候:外侧曲线的学习器性能优于内侧;

2. 当曲线有交叉的时候:比较ROC曲线下的面积即 AUC (Area Under ROC Curve)

AUC可估算为

AUC估算公式


形式化的看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。

给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合,则排序的损失定义为

排序的损失定义

即考虑每一对正、反例,若正例的预测值小于反例,则记一个“罚分”,若相等,则记0.5个“罚分”。容易看出,对应的是ROC曲线之上的面积:若一个正例在ROC曲线上对应标记点的坐标为(x,y),则x恰是排序在其之前的反例所占的比例,即假正例率。因此有

AUC

3.4 代价敏感错误率与代价曲线

前面介绍的性能度量,大都隐式地假设了不同类型的错误造成的后果相同,但是在现实任务中经常遇到不同类型的错误造成的后果不同的情况。

例如:在医疗诊断中,错误地把患者诊断为健康人与错误的把健康人诊断为患者,前者的后果可能是错失医治的最佳时机,而后者只是增加了进一步检查的麻烦。

为权衡不同类型的错误所造成的不同损失,可为错误赋予“非均等代价”。

以二分类代价矩阵为例,我们可根据任务领域知识设定一个“代价矩阵”。

二分类代价矩阵

“代价敏感错误率”为

代价敏感错误率

类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量,如精度代价敏感版本。对于多分类任务同样也可以定义出代价敏感性能度量。

在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”则可以达到目的。代价曲线的横轴是正例概率代价P(+)cost,纵轴是归一化代价cost_norm

P(+)cost

其中,p是样例为正例的概率

cost_norm

其中,FPR是假正例率,FNR = 1 - TPR

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


代价曲线与期望总体代价

4. 比较检验

性能比较的复杂的原因

1)、通过实验评估方法获得的是测试集上的性能与泛化性能可能存在差异

2)、测试集上的性能与测试集本身的选择有很大关系

3)、很多学习算法本身有一定的随机性,即便使用相同的参数设置在同一个测试集上多次运行,其结果也会不同。

4.1 假设检验


4.2 交叉验证t检验

4.3 McNemar 检验

4.4 Friedman 检验与 Nemenyi 后续检验

5. 偏差与方差

“偏差-方差分解”用来解释学习算法泛化性能的一种重要工具

“偏差-方差分解”试图对学习算法的期望泛化错误率进行拆解。

以回归任务为例,学习算法的期望预测为


期望预测

其中,(x;D)为训练集D上学得的模型 在x上的预测输出

使用样本数相同的不同训练集产生的方差为


方差

噪声为


噪声

期望输出与真实标记的差别称为偏差,即


偏差

为了讨论方便,假定噪声期望为0,通过简单的多项式展开合并,可对算法的期望泛化误差进行分解。

噪声期望为0
期望泛化误差分解过程

于是得到,


期望泛化误差

泛化误差可分解为偏差、方差与噪声之和

偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声度量了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。

泛化性能时由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定。

一般来说,偏差与方差是有冲突的,称为偏差-方差窘境。

给定学习任务,假定我们能够控制学习算法的训练程度。

1)、在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以是数据集产生显著变化,此时偏差主导了泛化错误率;

2)、随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动逐渐能被学习器学到,此时方差主导了泛化错误率;

3)、在训练程度充足后,学习器的拟合能力非常强,数据的轻微扰动都会导致学习器发生显著的变化,若训练数据自身的、非全局的特性被学习器学到,则会发生过拟合。

泛化误差与偏差、方差的关系示例图

推荐阅读更多精彩内容