2.1经验误差与过拟合
错误率:分类错误的样本数占样本总数的比例
精度=1-错误率
误差:学习器的实际预测输出与样本的真实输出之间的差异
训练误差/经验误差:学习器在训练集上的误差
泛化误差:在新样本上的误差
为了得到在新样本上也能表现好的学习器,应该从训练样本中尽可能找出适合所有潜在样本的普遍规律。如果学习器把训练样本学的太好时,很可能已经把训练样本自身的一些特点当做了所有潜在样本都会具有的一般性质,使泛化功能下降,这叫过拟合。与其相对的是欠拟合,指训练样本的一般性质未学好。两者的直观类比如图2.1所示
图2.1 过拟合、欠拟合的直观类比现实任务中,我们有很多学习算法可以选择,甚至对同一种学习算法,使用不同参数配置,也会产生不同的模型。模型选择问题就是指该选用哪种学习算法,使用哪种参数配置。
2.2评估方法
我们通常使用测试集来测试学习器对新样本的判别能力,以测试集上的测试误差作为泛化误差的近似。测试集应该尽可能与训练集互斥。
假设我们有一个包含m个样例的数据集D,要做到既要训练,又要测试,可以通过对D进行适当的处理,产生训练集S和测试集T,下面是几种做法
2.2.1留出法
留出法直接将数据集D分为两个互斥的集合,分别是训练集S和测试集T
分层采样:分层采样(stratified sampling) - zealfory - CSDN博客,链接的实例中,仍存在多种划分方式对数据集D进行分割,比如把D中的样本进行排序,可以把前350个正例放在S中,也可以把后350个正例放在S中,不同的划分会导致不同的训练集/测试集。因此,单次使用留出法不能保证结果的可靠性,一般要采用多次随机划分,重新进行实验评估后取平均值作为留出法的评估结果。
划分的常见做法是将大约2/3~4/5的样本用于训练,其余用于测试
2.2.2交叉验证法
交叉验证法先将数据集划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从D中通过分层采样得到,用k-1个子集的并集作为训练集,余下的子集作为测试集,这样可以获得k组训练集/测试集,最终返回k次测试结果的平均值。显然,交叉验证法评估结果的稳定性和保真性很大程度取决于k,通常把交叉验证法称为k折交叉验证,k常用的取值有5、10、20,10折交叉验证示意图如图2.2所示
图2.2 10折交叉验证示意图k折交叉验证通常要使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,常见的有10次10折交叉验证。
若数据集包含m个样本,令k=m,得到交叉验证法的特例:留一法。因为m个样本只有唯一的方式划分为m个子集——每个子集只包含一个样本,因此不受随机样本划分的影响。留一法的训练集比初始数据集只少了一个样本,使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出来的很相似,因此,评估结果往往被认为比较准确。缺陷是在数据集较大时,训练m个模型的计算开销可能难以忍受,另外留一法的估计结果也未必永远比其他评估方法准确。
2.2.3自助法
给定包含m个样本的数据集D,对它采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D‘,然后再将样本放回初始数据集D中,使得该样本在下次采样仍有可能被采到,这个过程重复执行m次,就得到包含m个样本的数据集D’,这就是自主采样的结果。显然,D中有一部分样本会在D‘中多次出现,而另一部分不出现。通过自助采样,初始数据集D中约有36.8%的样本未出现在D’中。实际评估的模型与期望评估的模型都使用m个训练样本,但仍有约1/3的没在训练集中的样本用于测试,这样的测试结果,称“包外估计”
在初始数据量足够时,留出法和交叉验证法更常用,自助法在数据集较小,难以有效划分训练集/测试集有用。
2.2.4调参与最终模型
对每个参数选定一个范围和变化步长,例如[0,0.2]范围内以0.05为步长,则在5个候选参数值中产生选定值,虽然选定的不是最佳,但通过这个折中学习过程变得可行
在模型选择完成后,学习算法和参数配置选定,此时用数据集D重新训练模型,这个模型在训练过程使用了所有m个样本,这就是我们最终提交给用户的模型
在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据分为训练集和验证集,基于验证集上的性能来进行模型选择和调参
2.3性能度量
性能度量:衡量模型泛化能力的评价标准
在预测任务中,要评估学习器f的性能,要把学习器预测结果f(x)与真实标记y进行比较
回归任务常用的性能度量是“均方误差”
2.3.1错误率与精度
错误率:分类错误的样本数占样本总数的比例
精度:分类正确的样本数占样本总数的比例
2.3.2查准率、查全率与F1
将样例数据根据其真实类别和学习器预测类别的组合分为四种情形,如图2.1所示
图2.1 分类结果的混淆矩阵查准率P=TP/(TP+FP)
查全率R=TP/(TP+FN)
查准率可理解为挑出来的西瓜中好瓜的比例。查全率可理解为所有好瓜中有多少比例被挑出来。两者是一对矛盾的度量,一般查准率高,查全率低,而查全率高,查准率低。
根据学习器的预测结果对样例进行排序,排在最前面的是学习器人认为最可能是正例的样本,排在后面的反之,以查准率为纵轴、查全率为横轴作图得到“P-R曲线”,如图2.3
图2.3 P-R曲线与平衡点示意图若一个学习器的P-R曲线被另一个学习器的曲线完全包住,则可断言后者的性能优于前者,例如图2.3所示,学习器A的性能优于学习器C。如果两个学习器的P-R曲线发生了交叉,例如图2.3的学习器A和B,比较性能有三种办法:1.比较P-R曲线下面积的大小,它在一定程度下表示学习器在查准率和查全率取得相对“双高”的比例,但这个值不太容易估算2.平衡点(BEP)是一个综合考虑查准率和查全率的性能度量,它是查准率=查全率时的取值,基于BEP的比较,认为学习器A优于B,但是BEP还是过于简化 3.常用的F1度量,F1=
F1度量的一般形式,能表达对查准率/查全率的不同偏好,其中>0度量了查全率对查准率的相对重要性,=1退化为标准的F1,>1查全率有更大影响,<1查准率有更大影响
在n个二分类混淆矩阵上综合考察查准率和查全率,有两种做法:
1.先在各混淆矩阵上分别计算查准率和查全率,再计算平均值,得到宏查准率(macro-P)、宏查全率(macro-R)及相应的宏F1(macro-F1)
2.将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,基于这些平均值算出微查准率(micro-P)、微查全率(micro-R)和微F1(micro-F1)
2.3.3ROC与AUC
将测试样本进行排序,分类过程就相当于在这个排序中以某个截断点将样本分为两部分,前一部分判作正例,后一部分则判作反例。
ROC(受试者工作特征):根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,计算真正例率(TPR)和假正例率(FPR),分别作为ROC曲线的纵轴和横轴。两者定义为
图2.4(a)是ROC图的示意图,对角线对应随机猜测模型,而(0,1)对应将所有正例排在反例之前的理想模型。现实任务中通常利用有限个测试样例来绘制ROC图,无法产生图2.4(a)的光滑曲线,只能绘制出图2.4(b)所示的近似ROC曲线。
ROC曲线绘制过程:给定m+个正例和m-个反例,根据学习器预测结果对样例进行排序,把所有样例均预测为反例,此时TPR和FPR均为0,在(0,0)处标记一个点,然后依次将每个样例划分为正例,设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为(x,y+1/m+),当前若为假正例,则对应标记点坐标为(x+1/m+,y),然后用线段连接相邻点即可
图2.4 ROC曲线与AUC示意图类似P-R图,若一个学习器的ROC曲线被另一个学习器的曲线包住,则可断言后者性能优于前者;若两个学习器的ROC曲线交叉,可以通过比较ROC曲线下的面积,即AUC来判断。
AUC可估算为
给定m+个正例和m-个反例,令D+和D-分别表示正、反例集合,排序“损失”定义为
2.3.4代价敏感错误率与代价曲线
为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”
以二类任务为例,设定一个“代价矩阵”,如表2.2所示,其中表示将i类样本预测为第j类样本的代价
表2.2 二分类代价矩阵在非均等代价下,我们希望最小化“总体代价”,而不是简单地最小化错误次数
将表2.2中的第0类作为正类、第1类作为反类,D+与D-分别代表样例集D的正例子集和反例子集,则“代价敏感”错误率为
非均等代价下,代价曲线可以反映出学习器的期望总体代价。代价曲线图的横轴是取值为[0,1]的正例概率代价(其中p是样例为正例的概率)
纵轴是取值为[0,1]的归一化代价(其中FPR是假正例率,FNR=1-TPR是假反例率)
代价曲线的绘制:ROC曲线上每个点对应代价平面上的一条线段,设ROC曲线上点的 坐标为(TPR,FPR),再相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积表示该条件下的期望总体代价,将ROC曲线上的每个点都转化成代价平面上的一条线段,取所有线段的下界,围成的面积为在所有条件下学习器的期望总体代价,如图2.5所示
图2.5 代价曲线与期望总体代价2.4比较检验
2.4.1假设检验
假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,下面是两种对单个学习器泛化性能的假设进行检验的方法
1.在包含m个样本的测试集上,泛化错误率为的学习器被测得测试错误率为的概率:
这符合二项分布,如图2.6所示,若=0.3,则10个样本中测得3个被误分类的概率最大
图2.6 二项分布示意图(m=10,=0.3)根据二项分布可以得到结论:在a的显著度下,假设“”不能被拒绝,即能以1-a的置信度认为,学习器的泛化错误率不大于,否则该假设可被拒绝,即在a的置信度下可认为学习器的泛化率大于
2.通过多次重复留出法或交叉验证法进行多次训练,此时可使用t检验,假设得到了k个测试错误率,...,则平均测试错误率和方差为
k个测试错误率可看作泛化错误率的独立采样,则变量
服从自由度为k-1的t分布,如图2.7所示
图2.7 t分布示意图(k=10)这里考虑双边假设,若平均错误率与之差||位于临界值范围[,]内,则不能拒绝假设“u=”,即可认为泛化错误率为,置信度为1-a,否则可拒绝该假设,即在该显著度下可认为泛化错误率与有显著不同
2.4.2交叉验证t检验
在一个数据集上比较两个学习器的算法
对k折交叉验证产生的k对测试错误率:先对每对结果求差(),若两个学习器性能相同,则差值均值为0,根据差值对“学习器A、B性能相同”假设做t检验,在显著度a下,变量
小于临界值,则假设不能被拒绝,即两个学习器的性能没有显著差别。
不同轮次的训练集可能有重叠,导致过高估计假设成立,这时可以采用5X2交叉验证法,即5次2折交叉验证,每次2折交叉验证前随机打乱数据,使得数据划分不重复。学习器A和B第i次2折交叉验证产生两队测试错误率,求差后的得到第1折的差值和第2折差值,每次2折实验都计算出方差
变量
服从自由度为5的t分布,双边检验的临界值为
2.4.3McNemar检验
在一个数据集上比较两个学习器的算法
两个学习期分类结果的差别如表2.4所示
假设两学习器性能相同,则,变量服从正态分布 ,均值为1,方差为,则变量
服从自由度为1的分布,在显著度a下,当以上变量小于临界值,不能拒绝该假设,即认为两学习器的性能没有显著差别,反之有显著差别,且平均错误率较小的学习器较优
2.4.4Friedman检验与Nemenyi检验
Friedman检验是基于算法排序
假定使用留出法或交叉验证法得到每个算法在每个数据集的测试结构,在每个数据集上根据测试性能由好到坏排序,赋予序值1,2...若测试性能相同,则平分序值。例如,D1上,A最好,其次B,最后C,在D2上,A最好,B和C性能相同,可列出表2.5,最后一行对每一列的序值求平均,得到平均序值
表2.5 算法比较序值表用Friedman检验判断这些算法是否性能都相同,若相同,则平均序值相同。假设N个数据集上比较k个算法,表示第i个算法的平均序值,“原始Friedman检验”过于保守,常使用变量
这个变量服从自由度为k-1和(k-1)(N-1)的F分布。若“所有算法的性能都相同”这个假设被拒绝,说明算法性能显著不同,可用户Nemenyi后续检验来进一步区别算法。它计算出平均序值差别的临界值域
表2.7 Nemenyi检验中常用的值以表2.5数据为例,根据式(2.34)和(2.35)计算出=24.429,查表可知,它大于a=0.05时的F检验临界值5.143,因此拒绝“所有算法性能相同”的假设,再使用Nemenyi后续检验,表2.7中k=3时=2.344,根据式(2.36)计算CD=1.657,由表2.5知,算法A与C、算法B与C的平均序值差距均未超过临界值域,而算法A与C的差距超过了,因此认为算法A与C的性能显著不同,算法A与C、算法B与C的性能没有显著差别
图2.8所示是Friedman检验图,可以看出,算法A与B的临界值域横线段有交叠,表示没有显著差别,算法A与C横线段没有交叠区域,表示A优于C。
2.5偏差与方差
对测试样本x,令为x在数据集的标记,y为x的真实标记,f(x;D)为训练集D上学得模型f在x上的预测输出,以回归任务为例,学习算法的期望预测为
样本数相同的不同训练集产生的方差为
噪声为
期望输出与真实标记的差别为偏差,即
通过计算得到泛化误差可分解为偏差、方差与噪声之和
偏差度量了学习算法的期望预测与真实结果的偏离程度,刻画了学习算法本身的拟合能力。方差度量了同样大小的数据集的变动导致的学习性能的变化,刻画了数据扰动造成的影响。噪声度量了在当前任务上任何学习算法所能达到的期望泛化误差的下界,刻画了学习问题本身的难度。偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性和学习任务本身的难度共同决定的。
偏差-方差窘境表示偏差与方差是有冲突的,如图2.9所示,训练不足时,学习器的拟合能力不够强,训练数据的扰乱不足以使学习器发生显著变化,此时偏差主导了泛化错误率,随着训练程度加深,学习器的拟合能力增强,训练数据发生的扰动渐渐被学习器学到,此时方差主导泛化错误率,训练程度充足后,学习器的拟合能力很强 ,训练发生的轻微扰动都能使学习器发生显著变化,若训练数据自身的,非全局的特性被学习器学到将发生过拟合。
图2.9 泛化误差与偏差、方差的关系示意图本章总结:本章讲述利用各种评估方法(例如留出法、交叉验证法,自助法等),将数据集划分为训练集和测试集,使用测试集的判别效果来估计学习器在新样本上的泛化能力。通过各种性能度量(例如错误率,精度,查准率,查重率、F1,ROC曲线等)来衡量模型泛化能力。利用各种比较检验方法(例如交叉验证t检验,McNemar检验等)来比较学习器的性能。
网友评论