机器学习笔记——误差哪来的?
机器学习笔记——误差哪来的?
一、回顾案例
- 上一篇博文中我们通过宝可梦进化的案例初步了解了回归分析的过程。
- 从模型选择->损失函数构建->梯度下降得到最优参数->模型变量高次化复杂模型->多输入变量复杂模型。
- 无论是通过高次化变量还是增加考虑因素,复杂化后的模型确实在训练数据集中表现更加优异,但规律并不同等适合于测试数据集。我们也因此发现了过拟合(Overfitting)的现象。
- 那我们就像要知道误差到底来源于哪里?只有我们知道了误差来源才能够对症下药,解决模型选择与参数最优化的相关难题。
二、误差所在
1.误差来源
- 先给出结论,在该案例中误差来源于bias(偏差)与variance(方差)。
- 设 f ^ \hat{f} f^为y与x之间的真实函数关系, f ∗ f^* f∗是我们选定模型经过梯度下降得到的函数关系,而 f ˉ \bar{f} fˉ表示相同模型不同训练集求出的函数关系的期望值。
- 一个固定的模型不同训练集可能会产生多个 f ∗ f^* f∗,但一定对应一个固定的 f ˉ \bar{f} fˉ。我们可以把 f ˉ \bar{f} fˉ理解为射击时我们瞄准的点,而多个 f ∗ f^* f∗可以理解为我们针对同一瞄准点位不同次射击射到的不同位置。而 f ^ \hat{f} f^则可以理解为射击时标靶的靶心。
- 偏差bias即可以理解为 f ˉ \bar{f} fˉ与 f ^ \hat{f} f^之间的差距,也就是射击瞄准的点位与靶心位置之间的差距。而方差variance则可以理解为多次不同 f ∗ f^* f∗与瞄准位置 f ˉ \bar{f} fˉ之间的差距,也就是不同此射击与瞄准位置之间的差距。
- 以射击为例解释回归分析中误差出现的原理。我们远远看到射击标靶的靶心,当然这就是我们的目标。我们站在远处开始瞄准,考虑到技术、环境等因素,我们可能瞄准的时候并不在靶心。然后我们针对选定的瞄准位置开始多次射击,我们发现我们的射击位置在瞄准位置附近散列。
- 模型的选择直接决定了我们bias与variance的大小,而我们训练所用的数据特征还有数据规模同样会影响最后的模型精度。
-
2.bias 与 variance四种组合
分析上图我们可以对bias与variance有更进一步的了解。
- low bias + low variance:我们可以看出瞄准的中心十分接近靶心,并且射击的范围也聚集于瞄准中心。这样的模型选择与训练数据当然是最好的,可以理解为“又准又稳”。
- low bias + high variance:我们可以看出瞄准的中心十分接近靶心,但是射击的范围却比较分散。但好在函数范围涵盖靶心,让我们有机会命中靶心,只是概率不高。可以理解为“准但不稳”。
- high bias + low variance:我们可以看出瞄准的中心就偏离靶心,即便射击范围聚集于瞄准中心,但函数选择范围似乎都没有包括靶心。即便再稳也无法命中靶心。可以理解为“不准但稳”。
- high bias + high variance:不仅瞄准中心偏离而且射击范围还不聚集于瞄准中心。可以理解为“不准也不稳”。
3.模型选择与variance间的关系
- 假设我们针对同一问题有100组不同的训练数据集,比如说我们在100个平行宇宙中每个宇宙都抓捕了100只宝可梦组成一个训练数据集。
- 针对相同模型选择,不同的训练数据集产生的具体函数参数是不同的。我们可以把所有数据集产生的函数曲线在一张图中展现来分析
f
∗
f^*
f∗的聚集程度,也就是variance指标。
- 分析以上图像可以看出,模型选择的次数越高,其 f ∗ f^* f∗函数曲线的聚集程度就越差,换言之就是愈发分散,variance值越高。
- 原因就是:模型越简单,变量次数越低,其输出值受到输入变量变化的影响程度也就越小,因此会保持相对聚集的效果。而复杂函数模型细微的变化都会被放大从而产生较大的差距。
4.模型选择与bias间的关系
在分析图像之前,做出以下说明:
- 黑线代表真实的函数曲线也就是 f ^ \hat{f} f^。
- 红线代表训练集计算出的所有直线集合也就是 f ∗ f^* f∗。
- 蓝线代表
f
∗
f^*
f∗的期望值也就是
f
ˉ
\bar{f}
fˉ。
- 分析以上图像可以看出,一次函数模型得出的 f ˉ \bar{f} fˉ与 f ^ \hat{f} f^之间有较大的差距。而五次函数模型得出的 f ˉ \bar{f} fˉ与 f ^ \hat{f} f^十分接近。也就是说简单模型的bias较大,而复杂模型的bias较小。
- 分析原因:比如说较低次的函数模型所代表的范围较小,很有可能根本不包含靶心位置,或者说所包含的最近位置都离靶心较远。而较高次的函数模型所代表的范围较大,较大可能包含靶心,或者离靶心较近的位置。
5.欠拟合与过拟合
- 因偏差bias较大而导致的误差大,我们称之为欠拟合(Underfitting)。
- 因方差variance较大而导致的误差大,我们称之为过拟合(Overfitting)。
三、解决方法
1.针对大bias导致的欠拟合
- 针对于因为bias较大而导致误差较大的现象(欠拟合),我们唯一能做的就是重新设计选择模型。我们可以增加变量的次数,也可以增加该问题的影响因素。
- 总之我们需要更复杂的模型来解决欠拟合的问题。
2.针对大variance导致的过拟合
- 第一种方法:我们可以获得更多的训练数据与测试数据。这样我们的训练样本就会减少随机性,其表现出的特征也就与全局特征更加接近。
- 这确实是一种最好的方法,因为这种方法不仅降低了variance还不会影响bias,既保证精度的同时使得结果更加聚集。而这种方法往往是不太现实的,因为数据集是最昂贵最难以获得的,往往我们拥有的数据集就是解决该问题的最大数据集,无法根据主观意愿而增加数据集。
- 第二种方法:第二种方法便是上一篇博文提到的正则化(Regularization),具体细节不再重复可以翻看上一篇博文。但正则化却不永远可靠,因为他会伤害bias从而影响精度。
3.综合来说
- 综合来说为了实现总体误差的最小化,我们需要合理的平衡bias与variance。实现这二者之间的trade-off。
4.交叉验证(Cross Validation)
- 我们可能会犯这种错误:针对训练数据集我们提出了三个模型,分别训练得到了三个模型下的最优函数,然后我们讲其应用到Testing Set中得到了三个模型最优函数的误差大小。经过比较我们选定了Model 3。
- 问题出现在哪里?我们把Testing Set分为两部分public与private。public是我们可见的,而private则是我们不可见的日后在模型应用中实际遇到的情况。private的误差通常会比public要大,因此我们不能依据模型针对public的适应情况去选择适应private。很有可能针对public误差大的模型更适用于private与全局。
- 针对此问题我们提出了交叉验证(Cross Validation)的概念。
- 我们将训练数据集分成两部分,一部分叫Training Set用来训练模型得到最优函数。另一部分叫做Validation Set用来测试模型做出选择。
- 比如图中我们认为Model 3最优,我们可以使用Model 3在全部Training Set上再进行一次训练。这样得出的模型函数应用到Testing Set中就更具有全局代表性。
- 注意当我们选好模型定好函数之后即便在Testing Data上表现不佳也不要再做修改了,因为所作出的修改只可能是局部更优更贴近Testing Data,而不会更贴近全局情况。
- 考虑到交叉验证可能会缩小Training Set或者使训练集使用的不充分,那么我们可以用上图所示的N-fold交叉验证。将训练集分成三份,轮流作为Validation Set得出三组测试结果取均值表征模型优劣。
四、我的疑问
以下是我在学习这部分中产生的疑问,欢迎各位大佬给小弟做出解答,不胜感谢。
- f ∗ f^* f∗的期望值 f ˉ \bar{f} fˉ是如何计算出来的?是简单的平均值求法吗?
- 既然Training Set与Testing Set都是我们已知的,那么我们如何选择数据用于Training还是Testing?也就是说Training Set的偏差会更小吗?
- 在交叉验证中,我们为什么把Training Set分为两部分,而不把Testing Set分为两部分,以实现二次验证?