偏差-方差权衡 (Bias-Variance Tradeoff)
为避免过拟合,我们经常会在模型的拟合能力和复杂度之间进行权衡。
- 拟合能力强的模型一般复杂度会比较高,易导致过拟合。
- 如果限制模型的复杂度,降低其拟合能力,又可能会导致欠拟合。
因此,如何在模型能力和复杂度之间取得一个较好的平衡对一个机器学习算法来讲十分重要。
偏差-方差分解 (Bias-Variance Decomposition)
偏差-方差分解(Bias-Variance Decomposition)是从偏差和方差的角度来解释学习算法泛化性能的一种重要工具。
在机器学习中,我们用训练数据集去训练一个模型,通常的做法是定义一个误差函数,通过将这个误差的最小化过程,来提高模型的性能。然而我们学习一个模型的目的是为了解决训练数据集这个领域中的一般化问题,单纯地将训练数据集的损失最小化,并不能保证在解决更一般的问题时模型仍然是最优,甚至不能保证模型是可用的。这个训练数据集的损失与一般化的数据集的损失之间的差异就叫做泛化误差(generalization error)。
而泛化误差(期望误差)可以分解为偏差(Biase)、方差(Variance)和噪声(Noise)。
符号定义
:数据集;
:测试样本;
:
的真实标签,
,其中,
为真实模型;
为噪声,满足均值为 0,方差为
,简记为
:学习算法,由数据集
学得的模型
对
的输出;
学习算法的期望预测为:
这里的期望预测也就是针对不同数据集 ,模型
对样本
的预测值取其期望,也叫做平均预测(average predicted)。
偏差 (Bias)
偏差 (Bias) 是用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异。
偏差的含义:偏差度量了学习算法的期望预测与真实模型的偏离程度,即刻画了学习算法本身的拟合能力。
方差 (Variance)
方差 (Variance) 是不同的训练数据集训练出的模型输出值之间的差异。
使用样本数相同的不同训练集产生的方差为:
方差的含义:方差度量了同样大小的训练集的变动所导致的学习性能的变化,即刻画了数据扰动所造成的影响。
噪声 (Noise)
噪声的存在是学习算法所无法解决的问题,数据的质量决定了学习的上限。假设在数据已经给定的情况下,此时上限已定,我们要做的就是尽可能的接近这个上限。
噪声的含义:噪声表达了在当前任务上任何学习算法所能达到的期望泛化误差的下界,即刻画了学习问题本身的难度。
泛化误差(期望误差)、偏差和方差的关系
前置知识
对于任意的随机变量 ,有:
证明
以回归问题为例,记 为
,
为
,因为
是真实模型,是判别式,不依赖于数据集
,因此:
因为 ,
,
,所以:
因为 与
是独立的,采用平方损失函数,算法
的期望泛化误差为:
于是得到了:
“偏差-方差分解”说明,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。
给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据;并且使方差较小,即使得数据扰动产生的影响小。
偏差和方差的图形解释
靶心为真实模型(最优模型),蓝点为不同训练数据集
上训练得出的模型对样本的预测值,当我们从靶心逐渐往外移动时,预测效果逐渐变差。
- 图 (a) 为低偏差低方差的情况,是一种理想情况,方差和偏差都比较小。
- 图 (b) 为高偏差低方差的情况,表示模型的泛化能力很好,但拟合能力不足,即欠拟合。
- 图 (c) 为低偏差高方差的情况,表示模型的拟合能力很好,但泛化能力比较差,即过拟合。
- 图 (d) 为高偏差高方差的情况,是一种最差的情况。
注意:
- 偏差的对象是单个模型,是期望输出与真实标记的差别。它描述了模型对本训练集的拟合程度。
- 方差的对象是多个模型,是相同分布的不同数据集训练出模型的输出值之间的差异。它刻画的是数据扰动对模型的影响。
偏差-方差窘境 (Bias-Variance Dilemma)
一般来说,偏差与方差是有冲突的,这称为偏差-方差窘境 (Bias-Variance Dilemma)。给定学习任务,假定我们能控制学习算法的训练程度,则在训练不足时,学习器的拟合能力不够强,训练数据的扰动不足以使学习器产生显著变化,此时偏差主导了泛化错误率;随着训练程度的加深,学习器的拟合能力逐渐增强,训练数据发生的扰动渐渐能被学习器学到,方差逐渐主导了泛化错误率;在训练程度充足后,学习器的拟合能力已经非常强,训练数据发生的轻微扰动都会导致学习器发生显著变化,若训练数据自身的、非全局的特性被学习器学到了,则将发生过拟合。
偏差、方差与过拟合、欠拟合的关系
一般来说,简单的模型会有一个较大的偏差和较小的方差,复杂的模型偏差较小方差较大。
欠拟合:模型不能适配训练样本,有一个很大的偏差。
举个例子:我们可能有本质上是多项式的连续非线性数据,但模型只能表示线性关系。在此情况下,我们向模型提供多少数据不重要,因为模型根本无法表示数据的基本关系,模型不能适配训练样本,有一个很大的偏差,因此我们需要更复杂的模型。那么,是不是模型越复杂拟合程度越高越好呢?也不是,因为还有方差。
过拟合:模型很好的适配训练样本,但在测试集上表现很糟,有一个很大的方差。
方差就是指模型过于拟合训练数据,以至于没办法把模型的结果泛化。而泛化正是机器学习要解决的问题,如果一个模型只能对一组特定的数据有效,换了数据就无效,我们就说这个模型过拟合。这就是模型很好的适配训练样本,但在测试集上表现很糟,有一个很大的方差。
偏差、方差与模型复杂度的关系
偏差和方差的来源:我们训练的机器学习模型,必不可少地对数据有依赖。但是,如果你不清楚数据服从一个什么样的分布,或是没办法拿到所有可能的数据(肯定拿不到所有数据),那么我们训练出来的模型和真实模型之间存在不一致性。这种不一致性表现在两个方面:偏差和方差。
既然偏差和方差是这么来的,而且还是无法避免的,那么我们有什么办法尽量减少它对模型的影响呢?一个好的办法就是正确选择模型的复杂度。复杂度高的模型通常对训练数据有很好的拟合能力,但是对测试数据就不一定了。而复杂度太低的模型又不能很好的拟合训练数据,更不能很好的拟合测试数据。因此,模型复杂度和模型偏差和方差具有如下图所示关系:
偏差、方差与 Bagging、Boosting 的关系
Bagging 是对训练样本进行采样,产生出若干不同的子集,再从每个数据子集中训练出一个分类器,取这些分类器的平均,所以是降低模型的方差(Variance)。Bagging 算法和 Random Forest 这种并行算法都有降低模型方差的效果。
Boosting 则是迭代算法,每一次迭代都根据上一次迭代的预测结果对样本进行权重调整,所以随着迭代不断进行,误差会越来越小,所以模型的偏差(Bias)会不断降低。
偏差、方差和 K 折交叉验证的关系
K-fold Cross Validation 的思想:将原始数据分成 K 组(一般是均分),将每个子集数据分别做一次验证集,其余的 K-1 组子集数据作为训练集,这样会得到 K 个模型,用这 K 个模型最终的验证集的分类准确率的平均数作为此 K-CV 下分类器的性能指标。
对于一系列模型 ,我们使用交叉验证的目的是获得预测误差的无偏估计量 CV,从而可以用来选择一个最优的
,使得 CV 最小。CV 统计量定义为每个子集误差的平均值,而 K 的大小和 CV 平均值的偏差和方差是有关的:
其中,代表每个子集的大小,
是总的训练样本量,
是子集的数目。
- 当 K 较大时,m 较小,模型建立在较大的 N-m 上,经过更多次数的平均可以学习得到更符合真实数据分布的模型,偏差就小了,但是这样一来模型就更加拟合训练数据集,再去测试集上预测的时候预测误差的期望值就变大了,从而方差就大了;
- 当 K 较小时,模型不会过度拟合训练数据,从而偏差较大,但是正因为没有过度拟合训练数据,方差也较小。
如何解决偏差、方差问题
首先,要知道偏差和方差是无法完全避免的,只能尽量减少其影响。
- 在避免偏差时,需尽量选择正确的模型,一个非线性问题而我们一直用线性模型去解决,那无论如何,高偏差是无法避免的。
- 有了正确的模型,我们还要慎重选择数据集的大小,通常数据集越大越好,但大到数据集已经对整体所有数据有了一定的代表性后,再多的数据已经不能提升模型了,反而会带来计算量的增加;而训练数据太小一定是不好的,这会带来过拟合,模型复杂度太高,方差很大,不同数据集训练出来的模型变化非常大。
- 最后,要选择合适的模型复杂度,复杂度高的模型通常对训练数据有很好的拟合能力,但容易过拟合。
偏差问题
即避免欠拟合。
- 寻找更好的特征:具有代表性
- 用更多的特征:增大输入向量的维度,增加模型复杂度
方差问题
即避免过拟合。
- 增大数据集合:使用更多的数据,减少数据扰动所造成的影响
- 减少数据特征:减少数据维度,减少模型复杂度
- 正则化方法
- 交叉验证法