我们之所以需要拟合,就是因为我们难以甚至无法获得全部真实数据
如果我们可以获取完备的真实数据集,那么我们压根就不需要做拟合了,我们只要查询就好了。
所以,我们能获取的数据,以及能够用于训练的数据,只是真实数据的一部分,而且,我们也是假设,训练数据分布与真实数据独立同分布,所以训练数据越多,可以认为越接近真实分布。
我们用训练误差表示模型在训练集上表现好坏
用泛化误差表示模型在测试集上表现好坏
实际上,训练数据分布与真实数据分布是有一定偏差的,而且,数据本身也存在噪声。
这就暗示我们,如果我们只用训练数据去完美地拟合/训练一个模型M1即,但它在实际测试数据上很可能是不完美甚至是很差的即,这就叫过拟合。
而如果我们连训练数据都拟合地很差,那在实际数据上一定也很差,这就叫欠拟合。
泛化误差
所谓泛化误差,即训练好的模型使用测试数据评测时的误差。
我们的根本目的是降低泛化误差,因为训练一个模型,其根本目的是用于预测未知数据而不是训练数据。
对于一个真实的训练任务,其样本值往往是由可解释的规律部分和不可解释的噪音组成的即
e可以认为是难以通过模型训练的噪音,我们往往会忽略(因为很小)
所以我们要拟合的部分是f(x),而不是去拟合Y(如果忽略e,那就是拟合Y)
用训练数据D训练的模型称之为 注意此处是戴帽子的f(x)
当我们使用相同的算法,但使用不同的训练数据D时就会得到多个则
代表了这个模型的期望,即使用某一算法训练模型所能得到的稳定的平均水平。
方差variance
代表了这个模型/算法的稳定性。我们称之为方差。
如果方差很大,则代表相同算法在不同训练数据上会得到相差很大的结果,这往往表示模型训练过拟合,不同的拟合曲线相差很大,这样就会导致对同一个测试样本,结果相差大。这表示数据的变化会给模型带来很大的扰动,就像打靶一样,射点不集中
偏差 bias
而
此称为偏差bias。注意这里为何不再加一个期望符号E了呢,因为括号内两者都已经是定值了,而不是离散值。如果偏差很大,即这个此模型的平均水平与真实值相差太大,简单来说就是结果整体跑偏。就像打靶一样,射点整体偏离靶心。
泛化误差:
对于泛化误差,是由模型的损失(这部分可以通过改善模型来减小)再加上不可解释的噪声(这是单纯数据的问题)带来的损失组成的。
当使用MSE作为损失函数的时候,有
那么有
注意第三项,是一个固定值
所以第三项
所以
即泛化误差由偏差,方差和不可解释的噪音组成。
我们能控制的就是偏差和方差,尽可能减少他们
也能看出,过拟合与bias和var有密切关系:
拟合程度 | 模型复杂度 | bias | var | error | 表现 | 改善 |
---|---|---|---|---|---|---|
欠拟合 | 低 | 高 | 高 | 预测不准 | 提高模型复杂度,增加迭代,boosting,减小正则参数 | |
过拟合 | 高 | 高 | 高 | 敏感易受扰动 | 降低模型复杂度,增加训练集数据,特征筛选,提高正则参数,bagging | |
好拟合 | 中 | 低 | 低 | 低 | 准而稳 |
参考
csdn1
blog1
PRML
bagging & var