机器学习基础-方差 & 偏差

偏差&方差

在统计学里面有两个衡量模型的重要指标,分别是偏差Bias 和 方差Variance。

  • 偏差:表示每次模型学习到的数据跟真实数据之间的差距。
  • 方差:表示每次模型学习到的数据之间的差距。

以下我们通过以下几幅图来讲解这两个指标的含义。

机器学习基础-方差 & 偏差_第1张图片

首先我们给定一个模型,训练5次,每次的结果分布我们这里表示为上图的黑色五角星。

如果5次的结果都在我们可容忍的结果范围内(上图的圆圈中),那么就说明结果的偏差bias比较低(如第1个圆圈,第3个圆圈);如果结果数据大多脱离了真实数据的范围,则其偏差比较高(如第2个圆圈,第4个圆圈)。

如果5次的结果的分布范围比较离散,那么就说明结果的方差Variance比较大(如第1个圆圈,第2个圆圈)。反之,如果结果分布比较集中,则防擦好比较低(如第3个圆圈,第4个圆圈)。

数学定义

  • 我们从真实数据 f ( x ) f(x) f(x)中采样一组数据 D D D,即
    D = { ( x 1 , y 1 ) , … , ( x n , y n ) } D=\left\{\left(x_{1}, y_{1}\right), \ldots,\left(x_{n}, y_{n}\right)\right\} D={(x1,y1),,(xn,yn)} from y = f ( x ) + ε y=f(x)+\varepsilon y=f(x)+ε
    其中 ε \varepsilon ε表示noisy

  • 我们在 D D D通过学习 f ^ \hat{f} f^ ,使得最小化均方误差MSE,从而我们希望它在 D D D的不同选择上产生很好的结果

为了加强模型对未知数据的泛化能力,我们会优化以下函数:
E D [ ( y − f ^ ( x ) ) 2 ] = E [ ( ( f − E [ f ^ ] ) + ε − ( f ^ − E [ f ^ ] ) ) 2 ] = ( f − E [ f ^ ] ) 2 + E [ ε 2 ] + E [ ( f ^ − E [ f ^ ] ) ) 2 ] = Bias ⁡ [ f ^ ] 2 + Var ⁡ [ f ^ ] + σ 2 其 中 , E [ f ] = f E [ ε ] = 0 , Var ⁡ [ ε ] = σ 2 ε  is independent of  f ^ \begin{aligned} \mathrm{E}_{D}\left[(y-\hat{f}(x))^{2}\right] &=\mathrm{E}\left[((f-\mathrm{E}[\hat{f}])+\varepsilon-(\hat{f}-\mathrm{E}[\hat{f}]))^{2}\right] \\ &\left.=(f-\mathrm{E}[\hat{f}])^{2}+\mathrm{E}\left[\varepsilon^{2}\right]+\mathrm{E}[(\hat{f}-\mathrm{E}[\hat{f}]))^{2}\right] \\ &=\operatorname{Bias}[\hat{f}]^{2}+\operatorname{Var}[\hat{f}]+\sigma^{2}\\ &其中,\\ &\mathrm{E}[f]=f \\ &\mathrm{E}[\varepsilon]=0, \operatorname{Var}[\varepsilon]=\sigma^{2} \\ &\varepsilon \text { is independent of } \hat{f} \end{aligned} ED[(yf^(x))2]=E[((fE[f^])+ε(f^E[f^]))2]=(fE[f^])2+E[ε2]+E[(f^E[f^]))2]=Bias[f^]2+Var[f^]+σ2E[f]=fE[ε]=0,Var[ε]=σ2ε is independent of f^

上式表示我们期望在不同的采样之间,每次学习到的数据结果都跟真实结果有较小的误差,大白话来讲就是泛化误差,即泛化能力的体现。可以看到我们优化的泛化误差关乎于三个指标,方差 V a r i a n c e Variance Variance,偏差 B i a s Bias Bias,噪音 σ \sigma σ

  • 对于偏差,即每次训练出来结果取平均,跟真实结果之间的误差
  • 对于方差,即每次训练出来的结果,与平均结果之间的误差,用来衡量结果的波动大小

偏差与方差之间的Tradeoff

在之前的文章中提到过欠拟合和过拟合,这两个指标也和偏差、方差有关。

机器学习基础-方差 & 偏差_第2张图片
  • 一开始,我们的模型比较简单,模型可能学习不到什么信息,这时候对数据的拟合能力比较差,偏差比较高,这个现象就定义为欠拟合
  • 随着模型复杂度的升高,对数据的拟合能力逐渐增强,这时候偏差就会越来越小,但是方差也会随之升高。
  • 当模型复杂度过高时,它对原数据的拟合越来越完美,但是随之带来的是模型没法泛化新来的未知数据,就会造成方差过高,这个现象就定义为过拟合
  • 在欠拟合与过拟合之间,可以寻找一个平衡点(如上图中的Best),这时候我们可以获取一个相对较低的偏差和方差,从而我们的泛化误差取到最低点。

如何降低偏差和方差?

降低偏差

  • 偏差的出现,根本原因在于模型对原数据的拟合能力不够,这时候我们可以增加模型的复杂度,如深度学习中增加隐藏层的数量和神经元的数量;或者在模型选择时,选择一些可选超参数较多的模型(一般该类模型复杂度较高)

降低方差

  • 方差的出现,根本原因在于模型对原数据的拟合能力过于强大,导致模型在面对新数据时反而“无从下手”。就好比一个学生期末考之前,把所有的题型都背下来了(过拟合),但是在真正期末考的时候(新数据),题型不一样,却考出了一个不理想的成绩(泛化能力差)。
  • 降低方差的方法:选择更简单点的模型,弱化过于强大的学习能力;增加正则项,降低特征间的权重,防止模型训练和预测受某个特征的偏重影响。

弱化噪点影响

  • 噪点来自于数据,所以在做数据采集的时候,要加强数据质量的把控。

模型层面降低偏差和方差

  • 可以选择集成学习的模型,如Xgboost,Lightgbm等。通过其中的bagging或boosting等思想来降低偏差的方差。

总结

  • 要想使得模型有较好的泛化能力,就得关注三个指标:方差 V a r i a n c e Variance Variance,偏差 B i a s Bias Bias,噪音 σ \sigma σ
  • 集成学习的方法,可以有效地降低偏差和方差。

你可能感兴趣的:(机器学习基础,算法,机器学习,python)