这次的文章是对于周志华所著的《机器学习》一书第二章模型评估与选择的读书笔记,还是以问答的形式尽量通俗地对一些基本的概念作一个总结。
一 在模型训练中常常会过拟合,能不能跟一个小白讲讲什么是过拟合?
先来看看官方原话是怎么说的:当学习器把训练样本觉得‘太好了’的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化能力的下降,这就是所谓的过拟合。
哎,说得人云里雾里的,一大堆的专业词汇,好多人就是这样从入门到放弃的…
现在我通过一个肤浅的例子用大白话来讲一下下:现有一个任务,判断一个女孩算不算得上美女。我就开始想了,貌似皮肤白,大眼睛的就会被称为美女啊,因为我从小到大看到的美女都有这几个特征哎,而且周围的人也说我的审美眼光不差哎。那么渐渐地,我把这几个特征当作了判断美女的准则。可是有一天我去了非洲,咦,怎么个个都黑不溜秋的,可是仔细瞧瞧,分明也有很多看着很顺眼的啊。我之前的判断准则貌似失效了,不知道该怎么判断一个女孩差还是丑了。这就是产生了过拟合现象。‘我在国内见到的女生’对应‘训练样本’,而‘我在国外见到的女生’是‘测试样本’,因为之前一直只见过国内的美女,也有一套准确率很高的判断标准,所以把国内评判美女的标准普遍到了全球的标准,直到看到外国的女生,才发现之前的判断标准不太准了。
总结一下,因为见过的太少,所以经验有限,一旦走到外面的世界,才发现自己的认知水平还是远远不够。
二 那么,可以防止拟合吗?
必须说明,过拟合是无法避免的。
用官方的话来解释:因为机器学习面临的通常是NP难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,若彻底避免过拟合,则通过经验误差最小化就能获得最优解,这就意味着我们构造性地证明了P=NP, 因此,只要相信P不等于NP, 过拟合就不可避免!
什么鬼,什么P不P的,读了十遍,还是没明白。让我用一句大白话解释一下下:就是因为不可能通过有限的经验去完全推测一个无限的世界啊!(在这里感叹一句,生而为人,往往无不在枷索当中!)
三 那总可以减弱过拟合吧,应该咋办呢?
确实,我们只能够减弱过拟合现象。
大概可以从两个角度出发:
从样本的角度:增大样本量,既然你见的太少,那就多走出去看看外面的世界啊!
从模型的角度:让模型变得简单些,既然你的准则不能放之四海而皆准,那你就不要那么固执,把自己的准则放宽松些嘛!
四 还有个问题,什么又是欠拟合呢?
这种情况是指尚未对训练样本的一般性质学好。
简单地说,就是:一屋不扫,何以扫天下。自己手头上的东西都还没掌握好,就先不急着出门见世界了。
五 那模型训练过程中应当怎么做评估呢?
官方原答案:我们可通过实验测试来对模型的泛化误差进行评估并进而做出选择,为此,需要使用一个测试集来测试模型对新样本的判别能力,然后以测试集上的测试误差作为泛化误差的近似。需要注意的是,测试集应该尽可能与训练集互斥。
举个大家喜闻乐见的例子:在高考之前我们是不是要经过大大小小的测验?那在还没有高考之前,我们暂且用的是平时测验的成绩,来评估自己大概能在高考中考个什么样的大学吧。而这些测验,最好是我们平时没有做过的题,为什么呢,因为高考题都是我们平时没见过的,这样的评估才可靠些。
六 能说说在具体实践中都有哪些评估操作流程?
常见的做法有:留一法,交叉验证法,自助法(有放回采样法)
一般在实践中我常常用10折交叉验证法,下面详细讲讲这个方法:
我们把训练集划分为10个大小相同的互斥子集,每个子集尽可能保持数据分布的一致性,然后每次拿其中9个子集作为训练集,余下的那个作为测试集,一共做10次这样的操作,这样每个子集都被当作测试集使用过。最终返回的是这10次测试的均值作为结果。
还是举个例子:现在有一个任务,有个10名小学生的班级,给你10套难度类似的题,怎么样评估这班级总的学习能力呢?用10折交叉法,就是让每个小学生做9套题,再测试1 套题,而且每个小学生测试的那套题都不一样,最后取所有学生的测试结果来评估这个班级的学习能力。
七 有了可靠可行的实验估计方法,我们用什么指标来评价这个模型好不好使呢?
这就是性能度量的问题了。
炸一想,这个问题很简单啊,如果是判断美女的话看看判断对了几个就行啦,如果是做题的话看看得了几分就行啦。其实事实没有这么简单。
事实上模型的好坏是相对的,使用不同的性能度量往往会导致不同的评判结果,什么样的模型是好的,不仅取决于算法和数据,还决定于任务需求。
以上的话有些抽像,在这里我先来说说一个现象当作引子:
中国的法律是‘有罪推断’,如果一个人被列为犯罪嫌疑人了,基本上大家也都认定这是个罪犯了;而美国的法律是‘无罪推断’,就算是犯罪嫌疑人,在没有找到确切的证据之前,我们不能把这个人当作罪犯来看待。大家来想想,这两者的区别是什么?前者倾向于‘决不姑息一个坏人’,后者倾向于‘决不冤枉一个好人’。这又是为什么呢?个人认为,中国是集体主义,以大局为重,放走一个坏人会危害社会,美国是个人主义,从犯罪嫌疑人的角度来考虑,如果是错判,那这个人的一生基本上就毁了。
(集体主义和个人主义,又可以追溯到中国的农耕文明,需要稳定和结盟以及西方的海洋文明,向往冒险和自由。题文无关,便不再多述。对了,推荐一部电影《12怒汉》,比较的就是以上所述的两种不同态度,中国版的也有。)
简言之,关注的点不一样,评价指标也就不一样了。
这里列举一些常见的评价指标:均方误差,错误率,精度,准确率,召回率,F1, ROC, AUC, 代价敏感错误率和代价曲线。这些指标的具体算法网络上有很多介绍,便不再一一描述了。(主要还是因为自己黔驴技穷,想不出那么多例子来解释了…)
八 有了实验评估方法和性能度量,那怎么做性能比较呢?
是直接取性能度量值然后比大小吗?事情没有想象中的那么简单。
官方解释:首先,我们希望比较的是泛化性能,然而能过实验评估方法我们获得的是测试集上的性能,两者的对比结果可能未必相同;第二,测试集上的性能与测试集本身的选择有很大关系,且不论使用不同大小的测试集会得到不同的结果,即使使用想同大小的测试集,若包含的测试样例不同,测试结果也会不同;第三,很多机器学习算法本身有一定的随机性,即便使用相同的参数设置在同一个测试集上多次运行,其结果也会有不同。
通常是基于统计假设检验,有交叉验证t检验,McNemar检验,Friedman检验和Nemenyi后续检验。(这些东西还没有理解透彻,不知道怎么通俗地说,等之后再补上吧)
九 什么是方差-偏差窘境呢?
根据一系列的公式可推出,泛化误差可分解为偏差,方差与噪声之和。
偏差刻画的是算法本身的学习能力,期望预测和真实结果的偏离程度。
方差刻画的是数据扰动造成的影响,即同样大小的训练集的变动导致的学习性能的变化。
噪声则表示了当前任务下任何算法所能达到的期望泛化误差的下界,代表问题本身的难度。
一般来说,偏差与方差是有冲突的。若训练不足,学习器的拟合能力不够强,偏差很大,训练数据的振动不足以使学习器发生显著变化,即方差很小;若训练程度充足,拟合能力很强,偏差减小,则训练数据发生的轻微振动就会导致学习器发生显著变化,即方差很大。我们需要在这两者间做一个平衡。
还是举个大家喜闻乐见的小学生做题的例子:小学生做的题量还不够多,学习能力不好,即偏差大,老师随便拿了几套试卷来做测试,最后结果都差不多地差,即学习性能很稳定,方差很小;后来这个小学生被家长骂了后幡然醒悟,开始疯狂做题,过了几天,老师又随便拿了几套卷子来做测验,咦,数学这么好,英语那么差,原来小学生之前一直在做数学题呢,所以在不同的卷子上成绩差别很大,这就是所谓的偏科,即方差很大。(可能拿这个例子并不是十分恰当,毕竟小学生的课程数量是有限的,可以在各个课程上面下功夫,来应对老师出的各种卷子。但是在更复杂的生活中,根本无法预测人生会给我们出一张什么样的卷子。)
这次的笔记先记到这里,如果有什么错误劳烦指出。