实用机器学习笔记十八:过、欠拟合
![实用机器学习笔记十八:过、欠拟合](https://static001.geekbang.org/infoq/44/443b9d262a26b22da75ee6091be3a77a.jpeg)
前言:
本文是个人在 B 站自学李沐老师的实用机器学习课程【斯坦福 2021 秋季中文同步】的学习笔记,感觉沐神讲解的非常棒 yyds。
训练和泛化误差:
训练误差:模型在训练集上的误差
泛化误差:模型在新数据上的预测与真实值之间的误差
实例说明:从过去的考试中预测未来的一场考试
过去的考试考的很好,就比如在备战高考中做了很多往届真题并且做得很好(训练误差)并不能保证在未来的考试中可以得高分(泛化误差)
学生 A 通过熟背答案,在做往届真题时,每次都能拿满分。因此在真正高考的考试中遇到了新的题,得分就会很少。
学生 B 在做往届真题时,理解并记住了问题的做题步骤等。因此在真正高考的考试中遇到了新的题,也能随机应变,做的很好。
过拟合和欠拟合:
训练误差很低,泛化误差也很低,代表模型训练的很好,正是想要的结果。
训练误差很高,泛化误差却很低,说明在训练集上学的不好,但是却能在新的样本上预测性能很好,这是出 bug 了吧?举个例子说明一下:训练集是小学三年级的知识,但是真正的场景中都是考小学一年级的知识,就会导致这种情况出现。工业场景中可能会出现,比如:工业场景中,数据集大量用到了数据增强,或者训练集中噪音很多,导致训练误差很大;但是在模型上线后,新的样本噪音就很少,所以泛化误差就会很小。但是我们应该避免这种情况出现。
训练误差很低,但是泛化误差很大,说明模型过拟合了。也就是说在训练集上可以学的很好,但是一遇到新的数据,就无能为力了。说明模型没有学习到精髓的本质,过度地学习训练集的特有特征,并没有学习到数据分布的普遍特征。
训练误差很高,同时泛化误差也很高,说明出现了欠拟合。也就是说在训练集上都没有学习到精髓本质的特征,自然也无法在新数据样本上做出很好的预测了。
![](https://static001.geekbang.org/infoq/84/84f1346c876d6c50f90169e8c3efa208.png)
数据和模型复杂度:
什么情况下会导致模型的欠拟合和过拟合呢?什么是机器学习,实际上就是让模型去拟合数据分布,因此模型的复杂度和数据的复杂度应该相匹配,才能训练出训练误差小,泛化误差又小的模型。
![](https://static001.geekbang.org/infoq/5e/5ee003c68711490fdf98dfee4abeebd3.png)
那么什么是模型复杂度和数据复杂度呢?
模型复杂度:
拟合各种各样函数的能力。从数学上来看,有些数据可能是复杂函数生成的,有些虽然不是函数生成的,但是本质上也可以用复杂的函数去拟合。模型能拟合的函数越复杂,模型就越复杂。
低复杂度的模型很难去拟合训练数据
高复杂度的模型能够很容易去拟合训练数据,甚至可以记住所有的数据特征
在不同类型的算法之间很难去比较模型的复杂度、
比如:决策树和多层感知机之间由于是不同类型的模型,因此无法比较它们之间的模型复杂度
在同一种算法类型中,两个因素决定了模型复杂度:
参数的数量。模型的可学习的参数越多,拟合能力也就越强。拿 MLP 来说,神经网络的层数以及每一层的神经元个数都决定了参数的数量
每一个参数值的取值范围。取值范围越大,模型也越复杂
模型复杂度的影响:
这个图是怎么来的呢?是固定住一个量,也就是固定住数据,然后让同一类型的模型(比如都是神经网络),但是不同复杂度的模型都在同一个数据集上训练,测试。两条曲线上的每一个点就代表了不同复杂度模型的训练和泛化误差。
绿色曲线显示:随着模型复杂度的提高,训练误差在不断减小。
蓝色曲线显示:随着模型复杂度的提高,泛化误差先减小够升高。也就是说模型复杂度升高到一定程度后,会出现过拟合。
在泛化误差最小值时对应的模型是最优模型,但是从图中依然可以看到,轻微的过拟合依然存在。
![](https://static001.geekbang.org/infoq/ef/ef228eb83dddbc2fa675b2e55f4004ff.png)
数据复杂度:
影响数据复杂度的因素:
样本数量。样本数量越多,数据当然越复杂一点
每一个样本包含的元素的数量。比如:一张 50*50 像素的图片要比一张 20*20 像素的复杂一点
时间/空间结构。图片有空间上的特征,句子有时间上的特征。这些肯定要比普通的向量复杂一点
多样性。比如:一个图片分类数据集中,有多少类型,每一张图片上除了类型主题之外,是否有其他物体存在等。
很难区别数据集之间的复杂性。一般从直观上来感觉。
数据复杂度的影响:
从图中可以看出:随着数据的容量增加(数据复杂度提高)泛化误差在下降,但是最后不管如何增加数据样本,简单的模型无法再提高性能了。从两条曲线的起点看,当数据量非常少的时候,简单的模型泛化能力比较好,而复杂的数据模型出现过拟合,泛化能力较弱。
在工业落地时,起初数据量比较小,可以使用简单的模型上线,随着用户的不断反馈,新的数据不断加进来,就应该考虑使用更加复杂的模型进行训练了。
![](https://static001.geekbang.org/infoq/74/7465f166ec31dbecc2a6d5b911ecf3dd.png)
模型选择:
根据数据选择复杂度相匹配的模型
目的就是最小化泛化误差
同时考虑商业指标
刚开始选择一种类型的模型,然后选择超参数
比如决策树:树的深度
神经网络:网络架构,网络层数,每一层的宽度,正则化等
版权声明: 本文为 InfoQ 作者【打工人!】的原创文章。
原文链接:【http://xie.infoq.cn/article/445081da6d39199b5292ae7d0】。文章转载请联系作者。
评论