前言

泛化误差可以分解为偏差平方,方差与随机噪声平方之和,也就是E(f;D)=bias2(x)+var(x)+ε2E(f;D)=bias^2\left(x\right)+var\left(x\right)+\varepsilon^2,是统计学习中一个非常重要的结论。本文将会给出该公式的详细推导过程,并且给出这个公式对实际机器学习建模的指导。

方差-偏差分解

概念

泛化误差:指机器学习模型在训练集之外的数据集的表现,一般来说,机器学习建模与调参就是在追求最优的泛化误差

偏差:指机器学习模型的预测结果与实际结果的距离,也就是预测结果的准度

方差:指机器学习模型的预测结果之间的距离,也就是预测结果的波动程度

具体表现如下图

image-20240214223347560

可以看到偏差越低,预测值距离中心,即真实值更近,方差越低,预测值越集中。

公式推导

首先,我们假设真实的xxyy之间存在关系y=f(x)+εy = f(x) + \varepsilon,其中的ε\varepsilon为随机噪声,我们假设其独立并服从均值为0方差为σ2\sigma^2正态分布。现在,记我们训练出的机器学习模型为f^\hat{f},也就是说,模型的预测结果为f^(x)\hat{f}(x)。那么,泛化误差可以写为E[(yf^(x))2]E\left[ \left(y-\hat{f}(x) \right)^2 \right],偏差可以写为(fE[f^])(f - E[\hat{f}]),方差根据定义可写为E[(f^E[f^])2]E\left[ (\hat{f} - E[\hat{f}])^2 \right]

\begin{eqnarray} \label{eq} E\left[ \left(y-\hat{f}(x) \right)^2 \right] &=& E\left[ \left(f + \varepsilon - \hat{f} \right)^2 \right] = E\left[ \left((f - E[\hat{f}]) - (\hat{f} - E[\hat{f}]) + \varepsilon \right)^2 \right] \nonumber \\ ~&=& E\left[ (f - E[\hat{f}])^2 + (\hat{f} - E[\hat{f}])^2 + \varepsilon^2 + \cdots \right] \nonumber \\ ~&=& E\left[ (f - E[\hat{f}])^2 \right] + E\left[ (\hat{f} - E[\hat{f}])^2 \right] + E\left[ \varepsilon^2 \right] + E\left[ \cdots \right] \nonumber \\ ~&=& (f - E[\hat{f}])^2 + E\left[ (\hat{f} - E[\hat{f}])^2 \right] + \sigma^2 \nonumber \\ ~&=& bias^2[\hat{f}] + var[\hat{f}] + \sigma^2 \nonumber \end{eqnarray}

上述推导过程中的\cdots代表将平方拆开后的交叉项,交叉项的期望E[]E\left[ \cdots \right]为0,下面我们来看看交叉项的处理方法

E[]=E[2(fE[f^])ε]+E[2E[f^](f^E[f^])]E[2f(f^E[f^])]E[2ε(f^E[f^])]E\left[ \cdots \right] = E\left[ 2(f - E[\hat{f}])\varepsilon \right] + E\left[ 2E[\hat{f}](\hat{f} - E[\hat{f}]) \right] - E\left[ 2f(\hat{f} - E[\hat{f}]) \right] - E\left[ 2\varepsilon(\hat{f} - E[\hat{f}]) \right]

首先,ε\varepsilon独立,且E[ε]=0E[\varepsilon] = 0,故

E[2(fE[f^])ε]=2E[(fE[f^])]E[ε]=0E[2ε(f^E[f^])]=2E[ε]E[(f^E[f^])]=0E\left[ 2(f - E[\hat{f}])\varepsilon \right] = 2E[(f - E[\hat{f}])]E[\varepsilon] = 0 \\ E\left[ 2\varepsilon(\hat{f} - E[\hat{f}]) \right] = 2E[\varepsilon]E[(\hat{f} - E[\hat{f}])] = 0

然后我们来处理剩下的两项

\begin{eqnarray} E\left[ 2E[\hat{f}](\hat{f} - E[\hat{f}]) \right] &=& E\left[ 2E[\hat{f}]\hat{f} - 2E[\hat{f}]E[\hat{f}]) \right] \nonumber \\ ~&=& 2E[\hat{f}]E[\hat{f}] - 2E[\hat{f}]E[\hat{f}] \nonumber \\ ~&=& 0 \nonumber \end{eqnarray}

由于E[f^]E[\hat{f}]是常量,所以可以从期望运算中直接提出

\begin{eqnarray} E\left[ 2f(\hat{f} - E[\hat{f}]) \right] &=& E\left[ 2f\hat{f} - 2fE[\hat{f}]) \right] \nonumber \\ ~&=& 2E[f]E[\hat{f}] - 2E[f]E[\hat{f}] \nonumber \\ ~&=& 0 \nonumber \end{eqnarray}

由于fff^\hat{f}相互独立,故E[ff^]=E[f]E[f^]E[f\hat{f}] = E[f]E[\hat{f}]

实际意义

方差-偏差分解与拟合程度

将泛化误差与偏差方差的关系可视化,如下图

image-20240214224211589

可以看到,一开始是偏差主导泛化误差,也就是欠拟合的情况,而在过了最佳泛化误差点后,则是方差主导泛化误差,这也就是过拟合。

调参策略

从上述结论我们可以想到,我们要降低泛化误差可以通过降低偏差,方差与噪声来实现

降低偏差:偏差过高的情况是模型的学习能力不够,可以通过增加模型的复杂度来降低偏差,比如换用复杂度更高的模型,使用集成学习(Boosting),增加神经网络的层数等。

降低方差:方差过高的情况是模型过拟合或者数据代表性不足的问题,可以通过处理过拟合的方法来解决,如正则化,剪枝等,也可以通过优化数据来解决,如特征工程。

降低噪声:在统计学习中这属于不可优化的部分,但是在实际场景中,可以通过优化数据获取端来达到降低噪声的目的,如更干净准确的数据采集。