这一讲主要聊的是误差到底是从哪里来的,误差主要来源于两个地方,即w和b,这两个参数其实也代表了上一讲提到过的回归模型。通过了解误差的来源,我们可以提升模型。这节课大量知识都是概率论中学的,很基础很有趣。
1 初步分析
不同的model会产生不同的error,很多时候,更复杂的model会产生更复杂的error。error来源:变量与偏差。
我们不知道实际情况下模型到底是什么样子的,但是我们能通过训练数据,拟合出模型,这个模型实际上可以算是估计值,但是估计值不等于实际值,两者之差即为误差,误差可能来源于偏差或者特征的参数。
以下我们需要复习一些知识为之后的学习做铺垫:
图 1-1 样本均值
概率论中学到过均值,可以利用均值估计,但是平均值很难等于实际估测值。当数据足够多,样本的期望其实会趋近于实际的均值的。
图1-2 无偏估计方差
同样,概率论中很初步的知识,方差也可以进行描述出样本的偏差的情况,方差越大,样本分布点越分散。
图 1-3 有偏估计方差
这里可以使用数理统计中的知识进行对应了,上图中的s2的期望需要进行修正后便可以对样本方差进行估计,数理统计中讲的很明确不赘述了。
由上面的知识我们可以回归主题:误差从何而来?
图1-4 偏差与变量对误差影响
误差来源于两个地方,如图1-4,可以想象为打靶,实际的样本点就是靶心红色区域,我们目标是通过模型估测值尽量趋近于靶心。bias的误差会导致我们的估计值会偏离精确值(靶心),偏差的误差会导致我们瞄准靶心时没有瞄准。variance的误差会导致估计值分布较为分散,会导致我们打靶分布会分散。图上,我们当然希望两者的误差都很小。
不同的模型,在不同的实际情况会导致完全不同的误差,说的更具体一下,做不同的实验,经常结果也会不同。
2 varience
图2-1 不同模型对实际情况的影响
接着上文来说,我们使用不同的模型做大量的实验。如图2-1,使用不同模型经过多次分析,发现。使用较为简单的模型,在实际情况下,会有较小的变量上的误差(左图),而复杂的模型varience上的误差影响较大(左图)。很容易明白,模型越复杂,不同的样本对模型的影响就会更大。
3 bias
图3-1 bias对模型影响
再来考虑bias,如图3-1。可以看出,使用较为简单的模型,会导致偏差误差会较大,即实际情况下据目标中心偏差较大(左图)。而较为复杂的模型,bias误差较小,据实际目标中心偏差较小(右图)。
详细来说,看图3-1,黑线是实际的线,红线是做了5000次实验后拟合模型的线,蓝色为红线的平均的模型。通过两图对比,结论显而易见了,如果模型较为简单,那么这个模型包含的靶子上区域可能就比较小,甚至就没有包含我们的实际目标。相反复杂的模型可能包含了我们的实际目标,但它的包含的区域太大了,我们很难准确找出这个精确的目标。(这段可以听一下老师讲的)
4 欠拟合与过拟合
图4-1 过拟合与欠拟合
上面我们了解到了不同的模型会导致的结果,这里我们就要引出两个重要的观点了。根据图4-1我们可知,当出现模型过于简单时,容易出现bias误差较大,而varience误差较小,我们称为欠拟合。欠拟合意味着我们的模型过于简单并没有较好的反映了实际的情况。
相反的是模型较为复杂,bias小,varience大,我们称此为过拟合。过拟合意味着我们的模型过于适应样本而不适用于实际情况,导致泛化能力较差。
如果,你的模型不能拟合较多的样本点,无法较好的适应模型,会发生欠拟合。而当你的模型几乎全部的包含了样本点,但是产生了拟合中的巨大的错误,很可能是过拟合。
对于欠拟合,你可以重新设计你的模型:
- 在输入中,增加新的因素
- 选择更为复杂的模型
对于varience大:
- 增加样本量(视频中提到了有时我们可以自己去“制作”“data,比如手写数字辩识,影像辩识)
- 正则化:使曲线平滑(上节提到过,正则化算是一个比较有用的工具喽)
图4-2 过大的variance
5 模型选择
根据上文所说啊,其实我们希望选取平衡两者的模型。
实际情况下,我们会使用测试集去对模型测试,当然测试集是有一定的参考价值的,但我们更应该去仔细考量实际情况下进行测试的误差,而且我们经常会发现实际情况下的误差往往会比我们测试集上的误差要大哦,如图5-1。
图5-1模型测试
通常,我们在模型设计时,会将训练数据直接分成两组,一组训练集,一组验证集(validation set),训练之后可以进行验证评估,我们称为交叉验证(交叉验证这个建议去看西瓜书,周老师这里讲的还是比较全面的)。交叉验证, 重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”。如图5-2。
图5-2 交叉验证
当然,我们可以把样本集分成N份,取其中1份为测试集,剩下N-1份为训练集,之后模型测试。后更改测试集,不断重复这种实验,每个模型求平均误差,如图5-3。(这个也可以看周老师的西瓜书,写的很详细)
图5-3 n阶交叉验证