3.1.1.5 模型评估与选择

模型评估与选择

原理

《机器学习》周志华

2.1 经验误差与过拟合
  • 通常我们把分类错误的样本数占样本总数的比例称为“错误率”(error rate),即如果在 m 个样本中有 a 个样本分类错误,则错误率 E = a / m;相应的, 1- a/m 称为“精度”(accuracy),即“精度=1-错误率”。更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error) 或“经验误差”(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。显然,我们希望得到泛化误差小的学习器。
  • 我们实际希望的,是在新样本上能表现得很好的学习器。为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为“过拟合”(overfitting)。与“过拟合”相对的是“欠拟合”(underfitting),这是指对训练样本的一般性质尚未学好。
  • 有多种因素可能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学到了,而欠拟合通常是由于学习能力低下造成的。欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等,而过拟合则很麻烦,过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施;然而必须认识到,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。关于这一点,可大致这样理解:机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获得最优解,这意味着我们构造性地证明了“P=NP”;因此,只要相信“P≠NP”,过拟合就不可避免。
  • 在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。那么,我们该选用哪一个学习算法、使用哪一种参数配置呢?这就是机器学习中的“模型选择”(model selection)问题。
2.2 评估方法
  • 通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择。为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采用而得。但需要注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。
2.2.1 留出法
  • “留出法”(hold-out)直接将数据集 D 划分为两个互斥的集合,其中一个集合作为训练集 S,另一个作为测试集 T,即 D = S ∪ T, S ∩ T = ∅。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。
  • 需要注意的是,训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratified sampling)。若S、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。
  • 另一个需要注意的问题是,即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。这些不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别。因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。
  • 常见做法是将大约 2/3 ~ 4/5 的样本用于训练,剩余样本用于测试。
2.2.2 交叉验证法
  • “交叉验证法”(cross validation) 先将数据集 D 划分为 k 个大小相似的互斥子集,每个子集 Di 都尽可能保持数据分布的一致性,即从 D 中通过分层采样得到。然后,每次用 k-1 个子集的并集作为训练集,余下的那个子集作为测试集;这样就可获得 k 组训练/测试集,从而可进行 k 次训练和测试,最终返回的是这 k 个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于 k 的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证” (k-fold, corss validation)。k最常用的取值是10.
  • 与留出法相似,将数据集 D 划分为 k 个子集同样存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复 p 次,最终的评估结果是这 p 次 k 折交叉验证结果的均值,例如常见的有“10次10折交叉验证”。
  • 假定数据集 D 中包含 m 个样本,若令 k = m,则得到交叉验证法的一个特例:留一法(Leave-One-Out, LOO)。
2.2.3 自助法
  • 我们希望评估的是用 D 训练出的模型,但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型使用的训练集比D小。
  • “自助法”(bootstrapping)是一个比较好的解决方法,它直接以自助采用法(bootstrap sampling)为基础。给定包含 m 个样本的数据集 D,我们对它进行采用产生数据集 D':每次随机从 D 中挑选一个样本,将其拷贝放入 D',然后再将该样本放回初始数据集 D 中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行 m 次后,我们就得到了包含 m 个样本的数据集 D',这就是自助采样的结果。显然, D 中有一部分样本会在 D' 中多次出现,而另一部分样本不出现。通过自助采样,初始数据集 D 中约有36.8%的样本未出现在采样数据集 D' 中,于是我们可将 D' 用作训练集, D \ D' 用作测试集;这样,实际评估的模型与期望评估的模型都使用 m 个训练样本,而我们仍有数据总量 1/3 的、没在训练集中出现的样本用于测试。这样的测试结果,亦称为“包外估计”(out-of-bag-estimate)。
  • 自助法在数据集小、难以有效划分训练/测试集时很有用;此外,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。然而,自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。因此,在初始数据量足够时,留出法和交叉验证法更常用一些。
2.2.4 调参与最终模型
  • 大多数学习算法都有些参数(parameter)需要设定,参数配置不同,学得模型的性能往往有显著差别。因此,在进行模型评估与选择时,除了要适应学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning)。
  • 读者可能马上想到,调参和算法选择没什么本质区别:对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果。这样的考虑基本是正确的,但有一点需注意:学习算法的很多参数是在实数范围内取值,因此,对每种参数配置都训练出模型来是不可行的。现实中常用的做法,是对每个参数选定一个范围和变化步长。事实上,即便在进行这样的折中后,调参往往仍很困难。很多强大的学习算法有大量参数需设定,这将导致极大的调参工程量,以至于在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响。
  • 需要注意的是,我们通常把学得模型在实际使用中遇到的数据成为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set)。例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集合验证集,基于验证集上的性能进行模型选择和调参。
2.3 性能度量
  • 对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要由衡量模型泛化能力的评价标准,这就是性能度量(performance measure)。性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅取决于算法和树,还取决于任务需求。
  • 回归任务最常见的性能度量是“均方误差”(mean squared error)
2.3.1 错误率与精度
  • 错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例。
2.3.2 查准率、查全率与F1
  • 对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形。
  • 查准率(precision) P = TP/ (TP+FP)。检索出的信息中有所少比例是用户感兴趣的。
  • 查全率(recall) R = TP / (TP+FN)。 用户感兴趣的信息中有多少被检索出来了。
  • 查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。
  • 很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器任务“最可能”是正例的样本,排在最后的是学习器认为“最不可能”是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”。P-R图直观地显示出学习器在样本总体上的查全率、查准率。在进行比较时,若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者。
  • “平衡点”(Break-Event Point, BEP)是“查全率=查准率”时的取值,基于BEP,可以比较两个学习器。但BEP还是过于简化了,更常用的是F1度量。
  • F1 = (2 * P * R) / (P + R)。F1是基于查准率与查全率的调和平均(harmonic mean)定义的。
  • 在一些应用中,对查准率和查全率的重视程度有所不同。F1度量的一般形式——Fβ = ((1+β^2) * P * R) / ((β^2 * P) + R)。其中 β > 0 度量了查全率对查准率的相对重要性。 β > 1时查全率有更大影响; β < 1时查准率有更大影响。
  • 宏查准率(macro-P)、宏查全率(macro-R)、宏F1(macro-F1)
2.3.3 ROC 与 AUC
  • “一般情况下”泛化性能的好坏。ROC曲线是从这个角度出发来研究学习器泛化性能的有力工具。
  • ROC 全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。ROC曲线的纵轴是“真正例率”(True Positive Rate, TPR),横轴是“假正例率”(False Positive Rate, FPR)。
  • 进行学习器的比较时,与P-R图相似,若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣。此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即AUC(Area Under ROC Curve).
2.3.4 代价敏感错误率与代价曲线
  • 在现实任务中常会遇到这样的情况:不同类型的错误所造成的后果不同。为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)。
  • 我们可根据任务的领域知识设定一个“代价矩阵”(cost matrix)。我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。
  • 在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的。
2.4 比较检验

-首先,我们希望比较的是泛化性能,然而通过是按评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;第二,测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即便用相同大小的测试集,若包含的测试样例不同,测试结果也会有不同;第三,很多机器学习算法本身有一定的随机性,即便用相同的参数设置在同一个测试集上多次运行,其结果也会有不同。

  • 统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据。
2.4.1 假设检验
  • 假设检验中的“假设”是对学习器泛化错误分布的某种判断或猜想,例如“e = e0”。现实任务中我们并不知道学习器的泛化错误率,只能获知其测试错误率 e_hat。泛化错误率与测试错误率未必相同,但直观上,二者接近的可能性应比较大,相差很远的可能性比较小。因此,可根据测试错误率估推出泛化错误率的分布。
  • 我们可使用“二项检验”(binomial test)来对“e <=0.3”(即“泛化错误不大于0.3”)这样的假设进行检验。
  • 在很多时候我们并非仅做一次留出法估计,而是通过多次重复留出法或是交叉验证法等进行多次训练,这样会得到多个测试错误率,此时可使用“t检验”(t-test)。
  • 上面介绍的两种方法都是对关于单个学习器泛化性能的假设进行检验,而在现实任务中,更多时候我们需对不同学习器的性能进行比较。
2.4.2 交叉检验t检验
  • 对两个学习器 A 和 B, 若我们使用k折交叉检验法得到的测试错误率分别为eiA 和 eiB,其中 eiA 和 eiB是在相同的第 i 折训练/测试集上得到的结果,则可用 k 折交叉验证“成对 t 检验”(paired t-tests)进行比较检验。这里的基本思想是若两个学习器的性能相同,则它们使用相同的训练/测试集得到的测试错误率应相同,即 eiA = eiB。
  • 欲进行有效的假设检验,一个重要前提是测试错误率均为泛化错误率的独立采样。然而,通常情况下由于样本有限,在使用交叉验证等实验估计方法时,不同轮次的训练集会有一定程度的重叠,这就使得测试错误率实际并不独立,会导致过高估计假设成立的概率,为缓解这一问题,可采用“ 5 * 2 交叉验证法”。
  • 5 * 2 交叉验证是做5次2折交叉验证,在每次2折交叉验证之前随机将数据打乱,使得5次交叉验证中的数据划分不重复。
2.4.3 McNemar检验
  • 对于二分类问题,使用留出法不仅可估计出学习器 A 和 B 的测试错误率,还可获得两学习器分类结果的差别,即两者都正确、都错误、一个正确另一个错误的样本数,如“列联表”(contingency table)。
2.4.4 Friedman检验 与 Nemenyi后续检验
  • 交叉验证 t 检验和 McNemar检验都是在一个数据集上比较两个算法的性能,而在很多时候,我们会在一组数据集上对多个算法进行比较。当有多个算法参与比较时,一种做法是在每个数据集上分别列出两两比较的结果,而两两比较时可使用前述方法;另一种方法更为直接,即使用基于算法排序的 Friedman检验。
  • 若“所有算法的性能相同”这个假设被拒绝,则说明算法的性能显著不同。这时需进行“后续检验”(post-hoc test)来进一步区分各算法,常用的有Nemenyi 后续检验。
2.5 偏差与方差
  • 对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它“为什么”具有这样的性能。“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具。
  • 泛化误差可分解为偏差、方差与噪声之和。
  • 回顾偏差、方差、噪声的含义:偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力;方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响;噪声则表达了当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。偏差-方差分解说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
  • 一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境(bias-variance dilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发送的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容