第二章 模型评估与选择
2.1 经验误差与过拟合
错误率和精度:通常我们把分类错误的样本占样本总数的比例称为“错误率”(error rate),即如果在m个样本中有a个样本分类错误,则错误率E=a/m;相应的,1-a/m称为“精度”。(accuracy).即“精度=1-错误率”。
误差:学习期的实际预测误差和样本的真实输出之间的差异称为“误差”(error)
训练误差/经验误差:学习器在训练集上的误差称为“训练误差”(training error)或 “经验误差”(expircial error)
泛化误差(generalization error):学习期在新样本上的误差称为“泛话误差”。
显然,我们需要的是泛化误差小的学习器,但我们事先无法知道新样本什么样,实际上我们能做的只是将经验误差尽可能的小。但是是否这种精简误差基本没有,精度达到100%的就是我们所需要的学习器?答案是否定的!!
我们所需要的学习器是要对新样本表现良好的学习器。为了得到这样的学习期,应该从训练样本中尽可能学得适用于所有潜在样本的“普遍规律”。
然而当学习器把训练样本学的“太好了“的时候,就会将一些训练样本的自身特点也当做他们的”普遍规律“,反而导致泛化性能的下降。这种现象在机器学习中称之为”过拟合“,亦称为“过配”(overfitting)。与过拟合相对的是“欠拟合”,亦称为“欠配”(underfitting)。这是指对训练样本的一般性能尚未学好。
有很多种因素可能导致过拟合,其中最常见的情况就是:由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合则是由于学习能力低下造成的。学习能力是否“过于强大”,是由学习算法和数据内涵共同决定的。
欠拟合比较容易克服,例如:1.在决策树学习中扩展分支,2.在神经网络学习中增加训练的轮数等。
过拟合是机器学习所面临过的关键障碍。过拟合是无法避免的,我们所能做的只是“缓解”,或者说减小其风险。
在现实问题中,我们常常有很多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。如何选择一个学习算法,使用哪一种参数配置,便是机器学习中的“模型选择”(data selection)问题。理想中的选择方式当然是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个。但我们无法直接获得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准,那么如何选择?
2.2评估方法
通常,我们可以通过实验测试来对学习器的泛化误差进行评估并进而做出选择。在现实中往往还需要考虑时间开销,存储开销,可解释性等方面的因素,这里暂且只考虑泛化误差。
为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试机上的“测试误差”(testing error)作为泛化误差的近似。但需要注意的是,测试机应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现,未在训练过程中使用过。
当我们只有一个包含m个样例的数据集D = {(x1,y1),(x2,y2),...,(xm,ym)},既要训练,又要测试,怎么才能做到呢?答案是:通过多D进行适当的处理,从中产生出训练集S和测试集T。下面是相应的几种方法:
2.2.1 留出法:
“留出法”(hold_out)直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即D = S U T, S & T = NULL。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
需注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”。若S,T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。
另一个需要注意的问题是,即便在给定训练/测试集的样本比例后,任然存在多种划分方式对初始数据集D进行分割。单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分,重复进行实验评估后取平均值作为留出法的评估结果。
此外,还需要注意的是,我们希望评估的是用D训练出来的模型的性能,但留出法需要划分训练/测试集,这就会导致一个囧境:若令训练集S包含绝大多数样本则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定精确;若令测试集T多包含一些样本,则训练集S和D的差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。常见的做法是将大约2/3 ~ 4/5的样本用于训练,剩余的用于测试。
2.2.2 偏差与方差
对学习算法除了通过实验估计其泛化性能,我们往往还希望了解它“为什么”具有这样的性能。
“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要的工具。
泛化误差可以分解为偏差,方差和噪音之和。
偏差:偏差度量了学习算法的拟合能力,即度量了学习算法的期望预测和真实结果的偏离程度;
方差:方差反映了学习算法对于样本变化所受到的影响程度。即度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响;
噪声:噪声反映了当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
偏差-方差分解说明,泛化性能是由学习算法本身的能力,数据的充分性,以及学习任务本身的难度所共同决定的。
对于给定的任务,为了取得很好的泛化性能,则需要使偏差较小,即能充分的拟合数据;使方差较小,即拥有充分的数据样本,使得数据扰动产生的影响小。
2.2.3 交叉验证法:
“交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即D = D1 U D2 U ... U Dk,Di && Dj = NULL(i != j)。每个子集Di都尽可能保持数据的一致性,即从D中通过分层采样得到,然后每次选取k-1个子集作为训练集,余下的那个子集作为测试机;这样就可以获得k组训练和测试集,从而可以进行k次测试和训练,最终返回的是这k个测试结果的均值。交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“K折交叉验证”(k-fold cross validation)。k最常用的取值是10,其他常用的k值有5,20等。
与留出法类似,将数据集D划分为k个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值。
假设数据集D中包含m样本,若令k=m,则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO),显然,留一法不受随机样本划分方式的影响,因为m个样本只有唯一的方式划分为m个子集——每个子集包含一个样本;留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出来的模型很相似。
留一法的缺陷:在数据集比较大的时候,训练m个模型的计算开销可能是难以忍受的。另外根据没有“免费的午餐(NFl)”定理,留一法的评估结果也未必永远比其他评估方法准确。
2.2.4 自助法
自助法:它是直接以自助采样法为基础的。(自助采样法亦称为:“可重复采样”或“有放回采样”)。
2.2.5 调参与最终模型
大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有很大的差异。因此,除了要对适用学习算法进行选择,还需要对算法的参数进行设定,这就是通常所说的“参数调节”或简称为“调参”。(parameter tuning)。
最朴素的想法是:对于每种参数配置都训练出模型,然后把对应的最好的模型的参数作为结果。但是,学习算法的很多参数都是在实数范围内取值,影刺,对每种参数配置都训练出模型来是不可行的。现实中常用的做法是,对每个参数选定一个范围和变化步长。
给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型,这个模型在训练过程中使用了所有m个样本,这才是我们最终提交给用户的模型。
2.3性能度量
性能度量(performance measure):对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。
性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评价结果:这意味着模型的“好坏”是相对的,什么样的模型好,不仅取决与算法和数据,还取决于任务需求。
在预测任务中,给定样例集D = {(x1,y1),(x2,y2),...,(xm,ym)},其中yi是实例xi的真实标记,要评估学习器f的性能,就要把学习预测结果f(x)与真实标记y进行比较。
回归任务最常用的性能度量是“均方误差”(mean squared error)
E(f;D) = (1/m) Σ(i=1 ,m) (f(xi) - yi)2
更一般的,对于数据分布D和概率密度函数p(.),均方误差可描述为:
E(f;D) = ∫(x~D) (f(x) - y)2 p(x) dx .
2.3.1错误率与精度
错误率与精度,这是分类任务中最常用的两种性能度量,即适用于二分类任务,也适用于多分类任务。错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本占样本总数的比例。
对样例集D,分类错误率定义为:
E(f;D) = (1/m) Σ(i=1 ,m) II(f(xi) != yi)
精度则定义为:
acc(f;D) = (1/m) Σ(i=1 ,m) II(f(xi) = yi)
= 1 - E(f;D)
更一般的,对于数据分布D和概率密度函数p(.),错误率与精度可分别描述为:
E(f;D) = ∫(x~D) II(f(xi) != y) p(x) dx
acc(f;D) = ∫(x~D) II(f(xi) = y) p(x) dx
=1 - E(f;D)
2.3.2 查准率,查全率与F1
精度和错误率虽然常用,但是在某些情况下并不能满足任务需求。在书中以西瓜为例,若我们关心的是“挑出的西瓜中有多少比例是好瓜”(即通过学习器预测的好瓜中,有多少是真实的好瓜),“所有好瓜中有多少被挑了出来”(即真实的好瓜中有多少被学习器预测到了),这时查准率(precision)和查重率(recall)就能很好的满足我们的需求。
公式见书p30 (2.8) (2.9)
查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;查全率高时,查准率往往偏低。
P-R曲线(图):在很多情况下,我们可以根据学习期的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率和查准率。以查准率为纵轴,查全率为横轴作图,就可以得到查准率-查全率曲线。
P-R图直观的显示出学习期在样本总体上的查全率,查准率。在进行比较时,若一个学习器的P-R曲线完全被另一个学习器的P-R曲线包围,那么就可以认为后者的性能比前者更好。但是两个曲线出现交点,那么我们可以通过计算曲线所包围面积的大小来判断他们的性能优劣,它在一定程度上表征了学习器查准率和查全率取得“双高”的比例。但是这个值不是很好计算,所以我们设计了另外的度量方式。
“平衡点”(bread-even Point)BEP ,他是“查准率 = 查全率”时的取值。
更常用的是F1度量:
公式见p32 (2.10)
在一些度量中,对查准率和查全率的重视程度有所不同。F1的一般度量形式——Fβ,能让我们表达出对查全率/查准率的不同偏好,它定义为:
公式间p32 (2.11)
其中β >0 度量了查全率对查准率的相对重要性。β = 1时退化为标准的F1;β > 1 时查全率有更大影响;β < 1时查准率有更大影响。
2.3.3 ROC 与 AUC
很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,负责为反类。
这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。
实际上,根据这个实值或概率预测结果,我们可以将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例。
在不同的应用任务中,我们可根据任务需求来采用不同的截断点,若我们更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视“查全率”,则可选择靠后的位置进行截断。因此,排序本身的质量的好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏。ROC
曲线则是从这个角度出发来研究学习器泛化性能的有力工具。
ROC全称是 “受试者工作特征”(Receiver Operating Characteristic)曲线。
与P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以他们为横,纵坐标作图,就得到了“ROC曲线”。与P-R曲线不同,ROC曲线的纵轴是”真正例率“(True Positive Rate,TRP) ,横轴是”假正例率“(False Positive Rate,FPR),两者定义的公式为:
见P33 (2.18)
见P33 (2.19)
在现实任务中,我们只能用有限个样本来绘制我们的ROC曲线。绘制规则为:在开始时,我们将阈值设置为最大,在这时,我们所有的样本都为反例,那么此时真正例率和假正例率都将为0,在坐标系中,我们的点位于(0,0),通过学习器,我们对于每个样本都会有一个实值或概率预测值,将它们进行排序,这样在越是在上面的值就越可能是正例,反之,越是下面的值就越不可能是正例。我们根据每个样本的预测结果来绘制ROC曲线,即将分类阈值依次设置为每个样例的预测值,即依次将每个样本划分为正例。设前一个点的坐标为(x,y),若当前是真正例,那么(x,y + 1/m+),若为假正例,则(x + 1/m-,y),然后用线段连接相邻点即可。
进行学习器的比较时,与P-R图类似,若一个学习器的ROC曲线被另一个学习器的ROC曲线完全包围,则表示后者的泛化性能要优于前者;若两条曲线出现交点,那么难以一般性的断言二者孰优孰劣。如果一定要进行比较,那么可以通过比较他们各自ROC曲线下的面积来判断,即AUC(Area Under ROC Curve)
AUC公式见p35 (2.20)
形象化的看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。
2.3.4 代价铭感错误率与代价曲线
因为不同类型错误所造成的后果不同,为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unrqual cost).
在非均等的代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”。