模型评估与选择 机器学习第二章

机器学习

第二章 机器学习之模型评估与选择



前言

一、经验误差与过拟合

错误率:分类错误的样本数占样本总数的比例
精度:1-错误率
误差:学习器的实际预测输出与样本真实值之间的差异
训练误差:也称经验误差,是学习器在训练集上的误差
泛化误差:学习器在新样本上的误差

我们希望获得的学习器在新样本上能表现很好的学习器,即泛化能力强的学习器。
过拟合:学习器在训练样本上“学习过度”,很可能将训练样本自身的一些特点当做了所有潜在样本的都会具有的一般性质,导致泛化能力下降。
欠拟合:学习器对训练样本的一般性质尚未学好。

过拟合原因很多,常见有:
  学习器学习能力过于强大,将训练样本所包含的不太一般的特性学到了。
欠拟合原因,通常是:
  学习能力低下。

过拟合 欠拟合
概念 训练样本学习过度 训练样本学习不足
常见原因 学习能力过强 学习能力低下
克服方式 只能缓解,无法克服 1、在决策树学习中扩展分支
2、在神经网络学习中增加训练轮数等

  在现实任务中,我们往往有多种学习算法可供选择,对同一个学习算法,可能存在多个参数配置,也会产生不同的模型。对此,涉及到模型选择问题。
  理想方案为:对候选模型的泛化误差进行评估,然后选择泛化误差最小的模型,但是我们无法直接获得泛化误差,训练误差又因为存在过拟合无法克服不适合作为标准,对于模型评估和选择,请看下文。

二、评估方法

  通常,我们通过实验测试对学习器的泛化误差进行评估,进而做出选择。对此,需要一个测试集来测试学习器对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。
  测试集:测试样本的集合,假设从样本的真实分布中独立采样获得(训练集也是)。测试集尽可能与训练集互斥,即测试样本尽可能不在训练集中出现,未在训练集中使用过。
  对于一个含有m个样本的数据集D,既要训练又要测试,需要将其进行适当的划分,产生训练集S和测试集T。以下是常见的划分方法。

1.留出法

  直接将数据集D划分为两个互斥的集合,一个为训练集S,一个为测试集T。即D=S∪T,S∩T=∅。在训练集训练出模型后,用测试集来评估其测试误差,作为对泛化误差的估计。(举例来说,假设数据集D有1000个样本,即可划分为训练集700个,测试集300个。)
需要注意:

  • 训练集/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分的时候,引入额外的偏差,而对最终结果产生影响。
  • 即便在给定训练集/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。在使用留出法时,一般要采用若干次随机划分、重复进行试验评估后取平均值作为留出法的评估结果。(比如定好训练集/测试集比例是7:3,总量1000个,训练集的700个随机进行抽取,剩下300个作为测试集)

  我们原本是希望通过整个样本集D训练一个模型,但是由于要留出一个测试集,会导致一个窘境:训练集S大一点,训练出的模型更贴近用数据集D训练出的模型,但是由于测试集T较小,评估结果可能不够准确;若测试集T大一点,训练集S就会和数据集D差距较大,训练出来的模型和用D训练出来的模型差距较大。
  常见的做法训练集和数据集的比例:2:3 ~ 4:5

2.交叉验证法

  将数据集D划分为k个大小相似的互斥子集,即D = D1 ∪ D2 ∪ ……∪ Dk,任选两个子集的交集都为空。每个子集Di都尽可能保持数据分布的一致性。然后其中k-1个子集作为训练集,剩下那个作为测试集。这样就可以获得k种训练集/测试集的划分,从而进行k次训练和测试,最终返回的是这k个测试结果的均值。
  k折交叉验证法:交叉验证法评估结果的稳定型和保真性在很大程度上取决于k的取值,为强调这一点,交叉验证法通常称为“k折交叉验证法”。常用取值为10,称为10折交叉验证法。
  p次k折交叉验证:将数据集划分为k个子集存在多种划分方式。为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,称为p次k折交叉验证。若重复划分了10次,每次形成10个子集,则称为10次10折交叉验证法,共进行了100次训练/测试。
  留一法:k折交叉验证的特例,将数据集中的每个样本作为一个子集,即D中包含m个样本,k=m,此时,留下一个子集即为仅留下了一个样本。注:留一法不受随机样本划分方式的影响(m个样本仅有唯一的划分方式,一个样本一个子集);留一法训练集在绝大多数情况下,使用的训练集和数据集D很相似(仅少了一个样本),留一法的评估结果往往被人认为比较准确。缺点:数据集较大时,训练开销太大。

3.自助法(bootstrapping)

  以自助采样为基础。对含有m个数据样本的数据集D,对它进行采样产生数据集D’。

方法:

  • 创建一个空集D’;
  • 每次随机从D 中挑选一个样本,拷贝至D’(D不变);
  • 重复m次,产生新的包含m个数据的数据集D’。
  • 一个样本在一次随机采样中,不被采集到的概率为:1 - 1/m,在m次采样中不被采集到的概率为上式的m次方,求极限得:1/e,约为0.368。即,通过自助采样,初始数据集D中约有36.8%的样本未出现在D’中。用D’做训练集,D\D’做测试集(这里测试集是,在D中出现,但是未在D’中出现,的数据集合)。

优点:

  • 在数据集较小、难以有限划分训练、测试集是很有用
  • 能从初始数据集中产生多个不同的训练集,对集成学习等方法有很大好处。(集成学习,详情点击)

缺点:

  • 自助法产生的数据集改变了初始数据集的分布,会引入估计偏差。

  在初始数据量足够时,常用留出法和交叉验证法。

4.调参和最终模型

  调参:在进行模型评估与选择时,除了选择学习算法,还要对算法参数进行设定。(这些算法参数是在程序运行过程中基本无法改变的,也就是说,不是通过学习得来的)

  学习算法的参数都是在实数范围内的,可取值是无穷的,对每种参数配置都训练出一个模型不可行。常见做法为:对每个参数选定一个范围和变化步长。许多强大的学习算法有不少参数需要设定,调参工程量极大,在不少应用任务中,参数调的好不好往往对最终模型性能有关键性影响。

  最终模型:顾名思义,最终提交的模型。
  对于含有m个样本的数据集D,由于要留出测试集,实际上只用了一部分用于训练模型。因此,在模型选择完成后,学习算法和参数配置已经选定,此时应该用数据集D重新训练模型。此时,才是用了m个样本进行训练的完整的、最终提交的模型。

  此外,我们经常将数据集划分为训练集和测试集,但是为了区分在模型在实际中遇到的测试数据,将模型用于评估测试的数据集称为验证集
请添加图片描述

三、性能度量

  性能度量:衡量模型泛化性能的评价标准。
  性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的好坏是相对的,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
  在预测任务中,给定样例集D={(x1,y1),(x2,y2),……,(xm,ym)},其中yi是示例xi的真实标记。要评估学习器f的性能,就要把学习器的预测结果f(x)与真实标记y进行比较。(标记,详情点击)

  回归任务常用的性能度量是:“均方误差”
  可描述为:对给定的数据集D和已经学得的学习器f,均方误差为,每个样本的预测值与真实值之差,求平方,将m个平方求和,除以m求平均值。
公式如下:请添加图片描述

1、错误率与精度

  错误率和精度是分类任务中最常用的两种性能度量。
  错误率:分类错误的样本数占总数的比例。
  精度:分类正确的样本数占总数的比例。
请添加图片描述

2、查准率、查全率与F1

  对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为:真正例(TP)、假正例(FP)、假反例(TN)、真反例(FN)。
  真正例(TP):真的正例,即预测值与真实值都是正例。(例如,一个瓜是好瓜,通过模型判别,结果也是好瓜,即为一个真正例)
  假正例(FP):假的正例,即预测为正例,实际为反例。(例如,一个瓜预测为好瓜,实际是一个坏瓜)
  假反例(TN):假的反例,即预测为反例,实际为正例。(例如,一个瓜预测为坏瓜,实际是一个好瓜)
  真反例(FN):真的反例,即预测值与真实值都是反例。
  有TP+FP+TN+FN=样例总数。
分类结果的混淆矩阵如下图所示:请添加图片描述

查准率、查全率定义:

  • 查准率,也称为“准确率”,就是正例判别正确的样例数占 预测为正例的总数 的比例。查准率越高,正例的准确性越高,FP越小,即判别为正例的有xx%都是正确的。
  • 查全率,也称“召回率”,就是正例判别正确的样例数占 实际为正例的总数 的比例。查全率越高,正例被查到的数量越多,FN越小,即有xx%的正例都被“找到了”。
    请添加图片描述
      查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率偏低;查全率高时,查准率偏低。
      根据学习器的预测结果对样例进行排序,越可能被学习器判为正例的样本越靠前,则随着样本预测数量的增多,查准率逐渐降低,查全率逐渐上升。以查准率、查全率为纵轴和横轴作图,得到查准率-查全率曲线,简称“P-R曲线”。请添加图片描述
      如图,P-R曲线可以直观显示学习器在样本总体上的查准率、查全率。
      如何比较两个学习器的性能?
  • 平衡点(BEP):查准率=查全率时的取值。
  • F1度量:请添加图片描述
      在一些应用中,查准率和查全率的重视程度有所不同。F1度量的一般形式——Fβ,能表达出对查准率和查全率的不同偏好。如图所示:
    请添加图片描述
      其中β>0度量了查全率对查准率的相对重要性。β=0退化为F1;β>1,查全率影响更大;β<1,查准率影响更大。

3、ROC和AUC

  ROC:“受试者工作特征”曲线。在不同的任务需求中,会应用到根据学习器判别对数据进行排序,ROC曲线是从排序质量的好坏角度出发,研究学习器泛化性能。
  AUC:ROC曲线下的面积。根据ROC曲线判别学习器性能的好坏。

  ROC曲线:
  与P-R曲线相似,根据学习器的预测结果对样例进行排序,按此顺序做个把样本作为正例进行预测。每次计算出两个重要量的值,分别以他们为横纵坐标,作图,得到ROC曲线。ROC的纵轴是真正例率(TPR),横轴是假正例率(FPR),两者分别定义为:请添加图片描述

4、代价敏感错误率与代价曲线

  代价敏感错误率:非均等代价下的错误率。
  为了权衡不同类型错误所造成的不同损失,可将错误赋为“非均等代价”。
  以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”。如图所示,costij表示将第i类样本预测为第j类样本的代价。
  一般来说,costii = 0;若将第0类判别为第1类所造成的的损失更大,则cost01 > cost10;损失程度相差越大,cost01与cost10值的差别越大。在这里插入图片描述
  在之前我们提到的性能度量,都是隐式的假设了均等代价,即cost01 = cost10,并没有考虑不同错误会造成不同后果。在非均等代价下,我们希望不再是简答的最小化错误次数,而是希望最小化“总体代价”。代价敏感错误率为:
在这里插入图片描述
  公式以上表为例,其中第0类为正例,第1类为反例,D+、D-代表正例子集和反例子集。
  在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,“代价曲线”可以。代价曲线的横轴是取值为[0,1]的正例概率代价,纵轴是取值为[0,1]的归一化代价。正例概率代价和归一化代价如图所示:
在这里插入图片描述
  其中,FPR是假正例率(同上节定义),FNR = 1 - FPR 是假反例率。
代价曲线的绘制:
  ROC曲线上每一点对应了代价平面上的一条线段:
  设ROC曲线上的坐标为(FPR,TPR),计算出相应的FNR。
  在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段(线段下的面积表示了该条件下的期望总体代价)
  将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下,学习器的期望总体代价。如下图所示:
请添加图片描述

四、比较检验(本章节涉及较多的数学基础,在此仅做简要介绍)

学习器的性能比较不能直接取得性能度量的值进行比较大小,原因如下:

  1. 我们希望比较的是学习器的泛化性能,但是通过试验评估方法获得的是测试集上的性能。(两者未必相同)
  2. 测试集上的性能与测试机本身的选择也有很大关系。(测试集大小不同会得到不同结果;即便相同大小,所包含的样例不同,结果也会不同)
  3. 很多学习器算法本身有一定的随机性。(即便参数相同在同一个测试集上多次运行结果也有不同)

对于以上问题,我们有以下几种办法对学习器的性能进行比较检验。

1、假设检验

  假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,例如“ε=ε0”。现实任务中,我们并不知道学习器的泛化错误率,只能获知其测试错误率。泛化错误率与测试错误率未必相同,但是直观上,二者接近的可能性应比较大,相差很远的可能性比较小。因此可根据测试错误率估算推出泛化错误率的分布。
  假设检验主要是关于单个学习器泛化性能假设进行检验。
  假设检验涉及到概率论与数理统计知识,有需要的同学请参考书籍理解。

2、交叉验证t检验

  交叉验证t检验对于不同学习器性能进行比较。
  对两个学习器A和B,若我们使用k折交叉验证法,得到的测试错误率分别为ε1A,ε2A,……,εkA和ε1B,ε2B,……,εkB,其中εiA和εiB是在相同的第i折训练/测试集上得到的结果,用k折交叉验证“成对t检验”进行比较检验。基本思想是,若两个学习器相同,则他们使用相同的训练/测试集得到的测试错误率应相同,即εiA = εiB。

3、McNemar检验

  对二分类问题,若两个学习器性能相同,则 学习器A判别正确时学习器B判别错误的样本数 = 学习器B判别正确时学习器A判别错误的样本数。

4、Friedman检验与Nemenyi后续检验

  交叉验证t检验和McNemar检验都是在一个数据集上比较两个算法的性能,很多时候,我们会在一组数据集上对多个算法进行比较。此时有两种方法进行多算法比较,一种是两两对比,另一种就是基于算法排序的Friedman检验,直接进行比较。
当算法的性能显著不同,此时需要进行后续检验进一步区分各个算法,常用就是Nemenyi后续检验。

五、偏差与方差

以回归任务为例:
  方差就是
    (每个预测值 - 期望预测)²求和除以总数
  偏差就是
    期望输出与真实标记的差别

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

  一般来说,偏差和方差是有冲突的,称为偏差方差窘境。给定学习任务,假设我们能控制学习算法的训练程度,当训练不足时,偏差主导泛化错误率,当训练逐渐加深,方差逐渐主导泛化错误率。

在这里插入图片描述


总结

学好机器学习需要一定的数学基础,学习机器学习深层次的知识,需要学好机器学习,打下扎实的基础,以后学深层次知识才能更容易理解。

猜你喜欢

转载自blog.csdn.net/G_Shengn/article/details/127548510