文章目录
- 方差与偏差
- 1.1 数据
- 1.1.1 数据的分布
- 1.1.2 拟合
- 1.2 方差与偏差
- 1.2.1 泛化误差的拆分
- 1.2.2 理解方差偏差
- 1.3 方差-偏差trade-off
- 1.3.1 方差-偏差trade-off
- 1.3.2 方差与偏差诊断
- 1.4 降低策略
- 1.4.1 噪声
- 1.4.2 高偏差
- 1.4.3 高方差
方差与偏差
1.1 数据
1.1.1 数据的分布
-
我们考虑一个简单的多项式回归问题,假设存在一个二次分布函数 f ( x ) f(x) f(x) 如下图所示
我们需要从中抽取一些(图中只画了5个,假设足够多)数据来进行我们的回归任务
而现实中的数据往往都包含一定的噪声 ,所以我们抽样过程,也需要模拟这一步,我们用 y y y 表示我们抽样出的数据点的真实值 y t r u e y_{true} ytrue , 另 $y = f(x) + \epsilon $ ,其中 ϵ \epsilon ϵ 为我们自己加上的噪声,抽样完成的点可以如下图所示:
好了,现在我们可以抛弃 f ( x ) f(x) f(x) (实际中我们也只知道 y 而不知道y的分布,或者说我们通常所说的模型$$
-
总结下即:从分布函数 f ( x ) f(x) f(x) 中,以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 ,用D表示数据,则
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } = { ( x i , y i ) } i = 1 N \begin{aligned} \mathop{D} &= \{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \} \\ &=\{(x_i,y_i)\}_{i=1}^{N} \end{aligned} D={(x1,y1),(x2,y2),...,(xn,yn)}={(xi,yi)}i=1N
其中 ϵ \epsilon ϵ 服从与均值为 0,方差为 σ 2 \sigma^2 σ2 的正态分布
ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathop{N}(0,\sigma^2) ϵ∼N(0,σ2)
1.1.2 拟合
-
如下图,我们分别使用不同的多项式来拟合,怎样判断哪个模型的好坏呢?
备注:给定 n + 1 n+1 n+1 个数据点,存在唯一一个最高阶为 n n n 的多项式通过全部数据点。
1.2 方差与偏差
1.2.1 泛化误差的拆分
-
从分布函数 f ( x ) f(x) f(x) 中,我们以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 D = { ( x i , y i ) } i = 1 N D=\{(x_i,y_i)\}_{i=1}^{N} D={(xi,yi)}i=1N ,设我们学习到的多项式模型用 f ^ ( x ) \hat f (x) f^(x) 表示,损失函数使用Loss 使用MSE
M S E = ( y − f ^ ( x ) ) 2 \mathop{MSE} = \left(y-\hat f(x)\right)^2 MSE=(y−f^(x))2
为了方便公式推导,使用 f f f 代替 f ( x ) f(x) f(x),使用 f ^ \hat f f^ 代替 f ^ ( x ) \hat f(x) f^(x) ,则我们的泛化误差(期望风险 E D E_D ED)表示为
E D = E D [ L o s s ] = E [ ( y − f ^ ) 2 ] = E [ ( f + ϵ − f ^ ) 2 ] = E [ ( f + ϵ − f ^ + E [ f ^ ] − E [ f ^ ] ) 2 ] = E [ ( ( f − E [ f ^ ] ) + ϵ − ( f ^ − E [ f ^ ] ) ) 2 ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] + E [ 2 ⋅ ( f − E [ f ^ ] ) ⋅ ϵ − 2 ⋅ ( f − E [ f ^ ] ) ⋅ ( f ^ − E [ f ^ ] ) − 2 ⋅ ( f ^ − E [ f ^ ] ) ⋅ ϵ ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 \begin{aligned} E_D & = E_D[Loss] \\ &=E[(y-\hat f)^2] \\ &=E[(f+\epsilon-\hat f)^2] \\ &=E[\left(f+\epsilon-\hat f + E[\hat f] - E[\hat f] \right)^2]\\ &=E[\left((f- E[\hat f])+\epsilon-(\hat f - E[\hat f]) \right)^2]\\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2 \right]\\ &+E\left[ 2\cdot(f- E[\hat f])\cdot\epsilon-2\cdot(f- E[\hat f])\cdot(\hat f - E[\hat f])-2\cdot(\hat f - E[\hat f])\cdot\epsilon \right] \\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2\right]\\ &=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 \end{aligned} ED=ED[Loss]=E[(y−f^)2]=E[(f+ϵ−f^)2]=E[(f+ϵ−f^+E[f^]−E[f^])2]=E[((f−E[f^])+ϵ−(f^−E[f^]))2]=E[(f−E[f^])2+ϵ2+(f^−E[f^])2]+E[2⋅(f−E[f^])⋅ϵ−2⋅(f−E[f^])⋅(f^−E[f^])−2⋅(f^−E[f^])⋅ϵ]=E[(f−E[f^])2+ϵ2+(f^−E[f^])2]=Bias[f^]2+Var[f^]+σ2
其中:- 第四步中是同时加上和减去一个 E [ f ^ ] E[\hat f] E[f^]
- ϵ ∼ N ( 0 , σ 2 ) → E [ ϵ ] = 0 , V a r [ ϵ ] = σ 2 \epsilon \sim N(0,\sigma^2)\to E[\epsilon] = 0,Var[\epsilon] = \sigma^2 ϵ∼N(0,σ2)→E[ϵ]=0,Var[ϵ]=σ2
-
总结就是:使用以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合
E D = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 E_D=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 ED=Bias[f^]2+Var[f^]+σ2
其中,噪声在统计上市无法被模型减少的,所以主要关注组成泛化误差的两个主要部分- 由偏差bias导致的误差
- 由方差vars导致的误差
1.2.2 理解方差偏差
-
上面从数学公式的角度推导出以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合,现在以图形的方式更为一般的描绘方差、偏差、泛化误差之间的关系(图中没法打出 f ^ \hat f f^ ,用 f ∗ f* f∗表示 )
偏差(Bias)
: 偏差衡量了模型 f ^ \hat f f^ 的 预测值与 实际值 f ( x ) f(x) f(x) 之间的偏离关系(图中 y = f ( x ) y=f(x) y=f(x) 未考虑噪声),偏差越大,越偏离真实数据。方差(vars)
:模型 f ^ \hat f f^ 的 预测值的方差,描述预测值的变化范围,离散程度,方差越大,预测值的分布越散。
-
下面是4种方差和偏差的组合
- 低方差vs低偏差 : 这是最好的情况
- 低方差vs高偏差:通常出现在刚开始训练时
3. 高方差vs低偏差:一般最常见的过拟合情况,模型较为贴合训练集,导致其泛化能力差
4. 高方差vs高偏差:这是最坏的情况,意味着不仅准确度低,而且数据差异还大
-
理想情况下,我们希望得到一个不论在训练集还是未知测试集上都表现非常好的模型,不幸的是我们通常不可能完全做到这两件事。以上面回归的例子来说,我们分别使用不同的多项式来拟合,每个不同的多项式即是一个模型,不同模型的选择其实也是在方差和偏差之间做权衡
通过方差和偏差的诊断可以帮助弄清如何提升模型的表现,多项式次数越高,代表模型越复杂,可以学到的东西就越多,如最后一个4阶多项式
以图中的5个数据点举例,有且只有唯一个四阶多项式能经过这5个点,这样就意味着该模型将整体数据已经全部记住,那么如果我们来了一个新的数据就会导致模型完全无法识别出。
-
事实上,通常情况下模型的训练误差和泛化误差之间的关系,以及泛化误差与方差偏差之间的关系可以由以下两张图表示
将这两张图对应到多项式回归的例子中则是,我们给定了数据 D ,期望利用多项式回归去学习出一个曲线 f ^ \hat f f^,那么此时我们可以通过拟合多项式的次数来控制学习曲线的复杂度了(理想状态下):
- 刚开始可以尝试一阶线性方程,此时学习器的拟合能力弱,学习曲线预测值和我们真实值之间的差距较大,此时偏差主导了泛化误差,而此时训练数据的扰动不足以使学习器产生显示变化;
- 随着我们将多项式次数增加到二阶,学习器的拟合能力增强了,意味着学习曲线预测值和我们真实值之间的差距在逐渐拉小,即偏差在下降,此时的方差会逐渐上升并开始影响泛化误差;
- 最后我们将多项式的次数增加到四阶,则我们学到了唯一一条穿过每个点的4阶多项式曲线(假设之后5个数据点),此时学习器相当于记住了整个数据集,学习曲线的预测值和真实值完美重叠,偏差为0,但是这时候若有个新的数据进来,我们的学习曲线预测值会发生显著的变化。
可以总结为:
- 多项式次数越高,模型越复杂,模型越复杂,在训练集上的训练误差越低(甚至可以记住整个数据集,即训练误差降到0);
- 随着训练误差降低(模型变复杂),泛化误差先上升后降低;
- 偏差会随着模型复杂度增高而降低,方差会随着模型复杂度增高而上升
1.3 方差-偏差trade-off
1.3.1 方差-偏差trade-off
-
在泛化误差的拆分公式部分,得出要关注组成泛化误差的两个主要部分
- 由偏差bias导致的误差
- 由方差vars导致的误差
而通过方差、偏差与泛化误差变化图可以看出,偏差与方差并非同增同涨的关系,通常情况下我们都需要进行方差和偏差的权衡,意味着我们
必须减少其中一项而增加另一项
,对应于我们的多项式回归问题来说,训练误差、泛化误差之间的关系图如下同时我们可以确定(权衡)相对较好的模型
1.3.2 方差与偏差诊断
-
从上述图我们还可以得出一些比较有用的经验法则,最简单的判断模型是受方差还是受偏差影响较多的办法是:
- 如果你的模型在训练集上表现非常好,但是在测试集上却非常糟糕,这是典型的过拟合问题,是方差过大问题
- 若你的模型在训练集、测试集上都表现不好,这是典型的欠拟合问题,是偏差过大问题
欠拟合 = 偏差问题 过拟合 = 方差问题 欠拟合=偏差问题 \\ 过拟合=方差问题 欠拟合=偏差问题过拟合=方差问题
-
再次总结下方差问题与偏差问题的特征
-
高偏差问题
- 高训练误差
- 高测试误差
-
高方差问题
- 低训练误差
- 特别高测试误差
-
-
诊断之后,我们需要做什么呢?当然是想办法
解决,当然解决是不可能解决的,真如之前说过的,偏差和方差是有冲突的,只能尽量降低影响,降低的方法汇总参考下图
1.4 降低策略
1.4.1 噪声
-
如上述采样 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 中,噪声 ϵ \epsilon ϵ 在统计意义上是无法被消除的,但是可以从数据的采集,清洗,数据预处理等方面提升数据的质量来达到降低数据噪声的目的
1.4.2 高偏差
-
这里将重点放在
增加模型复杂度
上- 让相同的算法变得更加复杂,通常从模型结构入手。 例如,
- 回归模型可以用更高阶多项式
- 决策树可以有更多的深度
- 更改为更复杂的算法/模型。 例如,
- 将回归算法更改为神经网络
- 将决策树更改为随机森林
- 让相同的算法变得更加复杂,通常从模型结构入手。 例如,
-
然而,增加模型复杂度并不一定是好事,我们可能会经历下面的困境
- 模型越复杂也意味着越多计算开销(例如单个决策树与 100 棵树的随机森林)
- 更多的模型复杂性依赖于更复杂的模型特征工程
- 更复杂通常意味着相反解释能力。 当我们选择更复杂的模型,我们的模型因为更难解释,因为大多数复杂的模型都很难被解释
- 更加复杂可能会增加以下风险:过拟合
1.4.3 高方差
-
获取更多的数据
如果有足够的计算能力来训练更多的数据,获取更多的数据总是最好的选择,但是获取更多的数据通常是既昂贵又耗时
-
使用正则化
防止过拟合在分类或者回归问题中,正则化项通常是指在损失函数中添加额外项的过程,通常是为了引入对更简单模型的偏好(防止模型过度复杂)。
-
减少特征数量
过拟合的主要解决方案之一是减少特征数量
- 手动选择需要保留的特征(前向选择,后向选择,方差过滤、互信息、F检验、相关性等过滤法)
- 自动选择要 保留或扔掉的特征(embedding,warapper等)
缺点:在丢弃特征的过程中,可能会有有用的信息遗失
-
超参数调优
一个简单的算法与良好的调整参数往往会比一个不充分调参的复杂算法产生的模型效果更好,超参数可以控制模型的复杂性(正则化),可以控制训练算法的行为,而超参数调整是为算法寻找最优超参数的过程,常用的超参数调优算法有
- 网格搜索
- 对半搜索
- 随机搜索
- 贝叶斯优化
那么什么是参数和超参数的区别呢?
超参数
:超参数是在训练算法开始之前指定的,无法优化 在训练算法本身中。它们是模型的外部参数。有一下的特点:- 通常用于帮助估计模型参数
- 无法从数据中估计
- 它们通常由从业者指定
- 通常不会在训练过程中改变。
模型参数
:模型参数取决于你用什么算法,用于拟合数据,它们是模型的外部参数。有以下的特点:- 模型在进行预测时需要它们
- 它们是从数据中估计或学习的
- 它们通常不由从业者手动设置
- 值通常由学习算法选择,如线性回归或神经网络的权重
- 会在训练过程中改变。