zoukankan      html  css  js  c++  java
  • 机器学习西瓜书笔记---2.1-2.2、模型评估与选择【2.1经验误差与过拟合、2.2评估方法】

    机器学习西瓜书笔记---2.1-2.2、模型评估与选择【2.1经验误差与过拟合、2.2评估方法】

    一、总结

    一句话总结:

    当我不玩游戏的时候,我立马觉得整个人生充满【希望】
    当我玩游戏的时候,我觉得整个天空都是【黑暗】的

    1、错误率、精度、经验误差、泛化误差?

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

    2、过拟合和欠拟合的根本原因?

    有多种因素可能导致【过拟合】,其中【最常见的情况是由于学习能力过于强大】,以至于把训练样本所包含的不太一般的特性都学到了,
    而【欠拟合】则【通常是由于学习能力低下而造成的】.
    【欠拟合比较容易克服】,例如在【决策树学习中扩展分支、在神经网络学习中增加训练轮数等】,而过拟合则很麻烦.
    在后面的学习中我们将看到,【过拟合是机器学习面临的关键障碍,各类学习算法都必然带有一些针对过拟合的措施】;然而必须认识到,过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险.

    3、过拟合是无法彻底避免的的解释?

    机器学习面临的问题通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若可彻底避免过拟合,则通过经验误差最小化就能获最优解,这就意味着我们构造性地证明了“P=NP”;因此,【只要相信“P不等于NP”,过拟合就不可避免】.

    4、模型评估章节的意义?

    在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型.那么,【我们该选用哪一个学习算法、使用哪一种参数配置呢】?这就是机器学习中的“模型选择”(model selection)问题.
    理想的解决方案当然是【对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型】.
    通常,我们可通过实验测试来对学习器的泛化误差进行评估并进而做出选择.为此,需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后【以测试集上的“测试误差”(testing error)作为泛化误差的近似】.

    5、模型评估方法:留出法?

    【“留出法”(hold-out)直接将数据集D划分为两个互斥的集合】,其中一个集合作为训练集S,另一个作为测试集T,即【D=S∪T,S∩T=Φ】.在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计.
    以二分类任务为例,【假定D包含1000个样本,将其划分为S包含700个样本,T包含300个样本】,用S进行训练后,如果模型在T上有90个样本分类错误,那么其错误率为(90/300)×100%=30%,相应的,精度为1-30%=70%.
    这些【不同的划分将导致不同的训练/测试集,相应的,模型评估的结果也会有差别】.因此,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用【若干次随机划分】、重复进行实验评估后【取平均值】作为留出法的评估结果.例如进行100次随机划分,每次产生一个训练/测试集用于实验评估,100次后就得到100个结果,而留出法返回的则是这100个结果的平均.

    6、需注意的是,【训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响】,例如【在分类任务中至少要保持样本的类别比例相似】?

    如果从采样(sampling)的角度来看待数据集的划分过程,则【保留类别比例的采样方式通常称为“分层采样”(stratified sampling)】.
    例如通过对D进行分层采样而获得含70%样本的训练集S和含30%样本的测试集T,若D包含500个正例、500个反例,则分层采样得到的S应包含350个正例、350个反例,而T则包含150个正例和150个反例;【若S、T中样本类别比例差别很大,则误差估计将由于训练/测试数据分布的差异而产生偏差】.

    7、留出法需划分训练/测试集 窘境?

    若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,【但由于T比较小,评估结果可能不够稳定准确】;【若令测试集T多包含一些样本,则训练集S与D差别更大了】,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity).
    【这个问题没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试】.
    可从“偏差一方差”(参见2.6节)的角度来理解:【测试集小时,评估结果的方差较大;训练集小时,评估结果的偏差较大】.

    8、模型评估方法:交叉验证法?

    “交叉验证法”(cross validation)先将数据集D划分为k个大小相似的互斥子集,即D=D1UD2U..…UDA,DiND;=o(ifj).每个子集Di都尽可能保持数据分布的一致性,即从D中通过分层采样得到.然后,【每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集】;这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这【k个测试结果的均值】.
    显然,【交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值】,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold crossvalidation).k最常用的取值是10,此时称为10折交叉验证;其他常用的k值有5、20等.
    与留出法相似,将数据集D划分为k个子集同样存在多种划分方式.【为减小因样本划分不同而引入的差别,k折交叉验证通常要随机使用不同的划分重复p次】,最终的评估结果是这【p次k折交叉验证结果的均值】,例如常见的有“10次10折交叉验证”.

    9、模型评估方法:留一法?

    假定数据集D中包含m个样本,【若令k=m,则得到了交叉验证法的一个特例:留一法(Leave-One-Out,简称LOO)】.
    显然,【留一法不受随机样本划分方式的影响】,因为m个样本只有唯一的方式划分为m个子集一每个子集包含一个样本;【留一法使用的训练集与初始数据集相比只少了一个样本,这就使得在绝大多数情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似.因此,留一法的评估结果往往被认为比较准确】.
    然而,留一法也有其缺陷:【在数据集比较大时,训练m个模型的计算开销可能是难以忍受的】(例如【数据集包含1百万个样本,则需训练1百万个模型),而这还是在未考虑算法调参的情况下】,另外,【留一法的估计结果也未必永远比其他评估方法准确;“没有免费的午餐”定理对实验评估方法同样适用】.

    10、模型评估方法:自助法?

    我们希望评估的是用D训练出的模型.但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此【实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差】.【留一法受训练样本规模变化的影响较小,但计算复杂度又太高】了.有没有什么办法可以减少训练样本规模不同造成的影响,同时还能比较高效地进行实验估计呢?
    “自助法”(bootstrapping)是一个比较好的解决方案,它直接以自助采样法(bootstrap sampling)为基础[Efron and Tibshirani,1993].给定包含m个样本的数据集D,我们对它进行采样产生数据集D':【每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D’】,这就是自助采样的结果.
    显然,【D中有一部分样本会在D’中多次出现,而另一部分样本不出现】.可以做一个简单的估计,样本在m次采样中始终不被采到的概率是_$( 1 - frac { 1 } { m } ) ^ { m }_$,取极限得到:$$lim _ { m ightarrow infty } ( 1 - frac { 1 } { m } ) ^ { m } mapsto frac { 1 } { e } approx 0.368$$,即通过自助采样,初始数据集D中约有36.8%的样本未出现在采样数据集D’中.
    于是我们可将【D’用作训练集,DD'用作测试集】;这样,【实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试】,这样的测试结果,亦称【“包外估计”(out-of-bag estimate)】.

    11、为什么我们分测试集和训练集的时候要随机数据?

    我们希望评估的是用D训练出的模型.但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此【实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差】.
    而随机化可以很好的解决【因训练样本规模不同而引起的分布误差】

    12、模型评估方法:自助法 使用情况?

    【自助法在数据集较小、难以有效划分训练/测试集时很有用】;
    此外,【自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处】。
    然而,【自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差】.
    因此,【在初始数据量足够时,留出法和交叉验证法更常用一些】

    13、调参意义?

    大多数学习算法都有些参数(parameter)需要设定,【参数配置不同,学得模型的性能往往有显著差别】.因此,在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning).
    读者可能马上想到,【调参和算法选择没什么本质区别】:【对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果】.这样的考虑基本是正确的,但有一点需注意:学习算法的很多参数是在实数范围内取值,因此,【对每种参数配置都训练出模型来是不可行的】.
    【现实中常用的做法,是对每个参数选定一个范围和变化步长,例如在[0,0.2]范围内以0.05为步长,则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值】.显然,这样选定的参数值往往不是“最佳”值,但【这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行】.
    事实上,即便在进行这样的折中后,调参往往仍很困难.可以简单估算一下:【假定算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有5^3=125个模型需考察】;很多强大的学习算法有大量参数需设定,这将导致极大的调参工程量,以至于在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响.

    14、验证集是用来调参的原话?

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

    二、内容在总结中

    博客对应课程的视频位置:

     
    我的旨在学过的东西不再忘记(主要使用艾宾浩斯遗忘曲线算法及其它智能学习复习算法)的偏公益性质的完全免费的编程视频学习网站: fanrenyi.com;有各种前端、后端、算法、大数据、人工智能等课程。
    博主25岁,前端后端算法大数据人工智能都有兴趣。
    大家有啥都可以加博主联系方式(qq404006308,微信fan404006308)互相交流。工作、生活、心境,可以互相启迪。
    聊技术,交朋友,修心境,qq404006308,微信fan404006308
    26岁,真心找女朋友,非诚勿扰,微信fan404006308,qq404006308
    人工智能群:939687837

    作者相关推荐

  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/14028852.html
Copyright © 2011-2022 走看看