读周志华《机器学习》第二章笔记

目录

二、模型评估与选择

2.1经验误差与过拟合(重点概念)

2.2、评估方法

 1.留出法:

2.交叉验证法

 3.自助法:

 4.调参与最终模型

2.3、性能度量

1、错误率和精度

2.查准率、查全率与F1

 3.ROC 与AUC

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

4、比较检验

4.1假设检验

 4.2、交叉验证t检验

4.3 McNemar检验(有错误,勿看,还未修改)

 4.4 Friedman检验与Nemenyi后续检验

 5.偏差与方差


进入第二章,我们就要知道我们凭什么说这个模型好,为什么好,拿出证据来。

二、模型评估与选择

2.1经验误差与过拟合(重点概念)

             通常我们把分类错误的样本数占样本总数的比例称为“错误率”。即如果在m个样本中有α个样本分类错误,则错误率E= a/m;相应的,1- a/m称为“精度”(accuracy),即“精度=1-错误率”.更一般地,我们把学习器的实际预测输出与样本的真实输出之间的差异称为“误差”(error),学习器在训练集上的误差称为“训练误差”(training error)或“经验误差(empirical error),在新样本上的误差称为“泛化误差”(generalization error)。

            第二对概念:过拟合和欠拟合

           我们实际希望的,是在新样本上能表现得很好的学习器.为了达到这个目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”,这样才能在遇到新样本时做出正确的判别。然而,当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降.这种现象在机器学习中称为“过拟合”(overfitting)、与“过拟合”相对的是“欠拟合”(underfitting)。这是指对训练样本的一般性质尚未学好。下图表述两个概念。 

 简单的说,检测的过于细致叫做过拟合,不细致(学的太少了)叫做欠拟合。

2.2、评估方法

          评估方法 :怎么从数据中拿出测试集才是最合理的。分为三种方法。

      1.留出法:

 

 但是要注意一:

             训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似。如果从采样(sampling)的角度来看待数据集的划分过程,则保留类别比例的采样方式通常称为“分层采样”(stratifiedsampling)、例如通过对D进行分层采样而获得含70%样本的训练集S和含30%样本的测试集T,若D包含500个正例、500个反例,则分层采样得到的S应包含350个正例、350个反例,而T则包含150个正例和150个反例;若S、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差。

注意二:

        即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。例如在上面的例子中,可以把D中的样本排序,然后把前350个正例放到训练集中,也可以把最后350个正例放到训练集中,……这些不同的划分将导致o同的训练/测试集,相应的,模型评估的结果也会有差别.因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果.例如进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是这100个结果的平均.

2.交叉验证法

 

 循环10次,每一次都取一个子数据集当作测试集,循环10次的测试结果,求平均返回结果。

 

 

 3.自助法:

           我们希望评估的是用D训练出的模型.但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差.留一法受训练样本规模变化的影响较小,但计算复杂度又太高了。

有没有什么办法可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计呢?

 

    

 4.调参与最终模型

             大多数学习算法都有参数需要设定,参数配置不同,学得模型性能往往有显著差别,因此,在进行模型评估与选择时,除了要对适用的算法进行选择,还需要对算法参数进行设定,这就是通常所说的“参数调节”,简称“调参”

            机器学习常涉及的两类参数:一类是算法的参数,亦称为“超参数”,数目常在10以内;另一类是模型的参数,数目可能很多,例如大型“深度学习”模型甚至有上百亿个参数,两种调参方式相似,均是产生多个模型之后基于某种评估方法来进行选择;不同之处在于前者通常是由人工设定多个参数候选值后产生模型,后者则是通过学习来产生多个候选模型(例如神经网络在不同轮数停止训练)。

        给定包含m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型.因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用数据集D重新训练模型.这个模型在训练过程中使用了所有m个样本,这才是我们最终提交给用户的模型.

        另外,需注意的是,我们通常把学得模型在实际使用中遇到的数据称为测试数据,为了加以区分,模型评估与选择中用于评估测试的数据集常称为“验证集”(validation set).例如,在研究对比不同算法的泛化性能时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参.

2.3、性能度量

        对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。

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

 简单介绍一个2.2的公式:代表着学习器f在测试集D中的均方误差

              查看在每一个测试集D的样例误差,去个正数,然后取个平均。

1、错误率和精度

         本章开头提到了错误率和精度,这是分类任务中最常用的两种性能度量,既适用于二分类任务,也适用于多分类任务.错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例.对样例集D,分类错误率定义为 

 简单介绍一个2.4的公式:指示公式,括号里面成立则为1,反之为0.所以说加起来求个平均值,就是错误率,反之2.5公式就是精度。

2.查准率、查全率与F1

比如说:我们从100个西瓜里面找过多少个好西瓜 -> 查准率(准确率)

所有好瓜中有多少比例被挑了出来  -> 查全率(召回率)

        对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+ FN一样例总数.分类结果的“混淆矩阵”(confusion matrix)如表2.1所示。

       查准率和查全率是一对矛盾的度量.一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低.例如,若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就会较低;若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低.通常只有在一些简单任务中,才可能使查全率和查准率都很高。

     对于两对关系,在很多情形下,我们可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本.按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率.以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”,显示该曲线的图称为“P-R图”﹒图2.3给出了一个示意图.

     有三个A、B、C三个模型,不同的标准,三个曲线谁高谁好,A要高于C,那必然是好于C。A与B就不一定了。但是可以人为的判定,就是图中的一条曲线,每条曲线对应的三个平衡点,就能判定哪个好。“平衡点”(Break-Event Point,简称BEP)就是这样一个度量,它是“查准率=查全率”时的取值,例如图2.3中学习器C的BEP是0.64,而基于BEP的比较,可认为学习器A优于B。

这里引入F1度量,带入2.8,2.9公式:

 F1是基于查准率与查全率的调和平均(harmonicmean)定义的:

 

           很多时候我们有多个二分类混淆矩阵,例如进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能;甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵;……总之,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率.

把P与R,换成混淆矩阵:

 

 3.ROC 与AUC

        在不同的应用任务中,我们可根据任务需求来采用不同的截断点,例如若我们更重视“查准率”,则可选择排序中靠前的位置进行截断;若更重视“查全率”,则可选择靠后的位置进行截断.因此,排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏.ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具

          ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,它源于“二战”中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,此后被引入机器学习领域[Spackman,1989]、与2.3.2节中介绍的P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”.与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False PositiveRate,简称FPR),基于表2.1中的符号,两者分别定义为

        显示ROC曲线的图称为“ROC图”.图2.4(a)给出了一个示意图,显然,对角线对应于“随机猜测”模型,而点(0,1)则对应于将所有正例排在所有反例之前的“理想模型”。

总结一句话,越靠近真正例率模型就越好。

下面的截图中,(x,y)只是ROC曲线的坐标点,不是数据样本。

 下面单提出一个2.21公式:

 m+,m-之和就是总例,我们要找损失,所以使用指示函数,括号中若正例的预测值小于反例,指示函数就是1,则记一个“罚分”,若相等,则记为0.5个“罚分”。最后就简单了。

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

 认对就是0,认错就是损失。

          回顾前面介绍的一些性能度量可看出,它们大都隐式地假设了均等代价,例如式(2.4)所定义的错误率是直接计算“错误次数”,并没有考虑不同错误会造成不同的后果.在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost).(层层递进,加深度)若将表2.2中的第0类作为正类、第1类作为反类令D+与D-分别代表样例集D的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率

         类似的,可给出基于分布定义的代价敏感错误率,以及其他一些性能度量如精度的代价敏感版本.若令costij中的i、j取值不限于0、1,则可定义出多分类任务的代价敏感性能度量。

       在非均等代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可达到该目的.代价曲线图的横轴是取值为[0,1]的正例概率代价

     其中p是样例为正例的概率;纵轴是取值为[0,1]的归一化代价

       其中FPR是式(2.19)定义的假正例率.FNR = 1-TPR是假反例率。代价曲线的绘制很简单: ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR, FPR),则可相应计算出 FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价,如图2.5所示。

4、比较检验

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

那么,有没有适当的方法对学习器的性能进行比较呢?

         统计假设检验(hypothesis test)为我们进行学习器性能比较提供了重要依据.基于假设检验结果我们可推断出,若在测试集上观察到学习器A比B好,则A的泛化性能是否在统计意义上优于B,以及这个结论的把握有多大.下面我们先介绍两种最基本的假设检验,然后介绍几种常用的机器学习性能比较方法.为便于讨论,本节默认以错误率为性能度量,用∈表示。

4.1假设检验

拿到一个测试集错误率,怎么去看待它和最后得到的泛化误差之间的关系?

        假设检验中的“假设”是对学习器泛化错误率分布的某种判断或猜想,例如“∈ = ∈o”.现实任务中我们并不知道学习器的泛化错误率,只能获知其测试错误率 ∈hat .泛化错误率与测试错误率未必相同,但直观上,二者接近的可能性应比较大,相差很远的可能性比较小.因此,可根据测试错误率估推出泛化错误率的分布。

 这个公式是干嘛的,就是在那些地方能够推翻这个假设。

            

 最小的错误率在右边的条件满足时成立。

 

 

 4.2、交叉验证t检验

 

     具体来说,对k折交叉验证产生的k对测试错误率:先对每对结果求差,如果说差值在一定的范围之内,那么我们认为两个学习器性能相同。

         对于上一个假设检验,这个公式有所不一样,少了一个泛化误差率,因为上一个是找泛化误差率与测试误差率关系。而这个是找两对测试错误率的差值,再去一个绝对值。套路是一样的,上一个就是只要我的数值落在了在2.7图中的阴影之外,那么就否定这样的假设,越靠近0的位置越好。

       然而,通常情况下由于样本有限,在使用交叉验证等实验估计方法时,不同轮次的训练集会有一定程度的重叠,这就使得测试错误率实际上并不独立,会导致过高估计假设成立的概率.为缓解这一问题,可采用“5×2交叉验证”。

4.3 McNemar检验(有错误,勿看,还未修改)

          对二分类问题,使用留出法不仅可估计出学习器A和B的测试错误率,还可获得两学习器分类结果的差别,即两者都正确、都错误、一个正确另一个错误的样本数,如“列联表”(contingency table)2.4所示.

 4.4 Friedman检验与Nemenyi后续检验

         交叉验证t检验和 McNemar检验都是在一个数据集上比较两个算法的性能,而在很多时候,我们会在一组数据集上对多个算法进行比较.当有多个算法参与比较时,一种做法是在每个数据集上分别列出两两比较的结果,而在两两比较时可使用前述方法;另一种方法更为直接,即使用基于算法排序的Friedman检验.

          假定我们用D1、D2、D3和D4四个数据集对算法A、B、C进行比较(多算法多个数据集检验).首先,使用留出法或交叉验证法得到每个算法在每个数据集上的测试结果,然后在每个数据集上根据测试性能由好到坏排序,并赋予序值1,2,...;若算法的测试性能相同,则平分序值.例如,在D1和 D3上,A最好、B其次、C最差,而在D2上,A最好、B与C性能相同,……,则可列出表2.5,其中最后一行通过对每一列的序值求平均,得到平均序值.

      然后,使用Friedman检验来判断这些算法是否性能都相同.若相同,则它们的平均序值应当相同.假定我们在N个数据集上比较 k 个算法, 令ri表示第 i 个算法的平均序值,为简化讨论,暂不考虑平分序值的情况,则ri服从正态分布,其均值和方差分别为(k+1)/2和(k^2 - 1)/12.变量 

             表2.7给出了α = 0.05和0.1时常用的qo值.若两个算法的平均序值之差超出了临界值域CD,则以相应的置信度拒绝“两个算法性能相同”这一假设.

 5.偏差与方差

          对学习算法除了通过实验估计其泛化性能,人们往往还希望了解它“为什么”具有这样的性能.“偏差-方差分解”(bias-variance decomposition)是解释学习算法泛化性能的一种重要工具.

 

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值