方差-偏差分解

2022-08-19  本文已影响0人  剑侠飞蓬

偏差-方差分析是(bias-variance decomposition)是解释算法学习泛化性能的一种重要工具。我们知道,算法在不同训练集上得到的结果可能不同。
对测试样本x, 不同的训练集为D\in\{D_1,D_2,\dots,D_n\},y为x的真实标记,由于噪声或者类似于测量误差的东西,可能训练集中的y_D\neq y,事实上我们不知道真实的y,但是我们假定噪声期望为0, 即E_D[y_D-y]=0, 我们可以用y=E_D[y_D]来表示真实的y。记在训练集D上x的预测输出为f(x;D).

泛化误差分解

如上所示,\overline{f}(x)是f(x;D)的期望,y是y_D的期望。
方差var定义为E_D[(f(x;D)-\overline{f}(x))^2],即在不同的数据集上的离散程度。
偏差bias定义为\overline{f}(x)-y, 这个值与D无关,因此不需要用期望形式来呈现。
噪声定义为y_D-y, 噪声引起的偏差记为\epsilon^2=E_D[(y_D-y)^2]

我们常用E_D[(f(x;D)-y_D)^2]来描述泛化误差,从图中很容易看出,
f(x;D)-y_D=f(x;D)-\overline{f}(x)+\overline{f}(x)-y+y-y_D
将三部分差分别用a,b,c来表示,由于,
(a+b+c)^2=a^2+b^2+c^2+2ab+2ac+2bc
将这个式子两边用算子E_D进行计算,右边的可以分配E_D算子。
由于b=\overline{f}(x)-y是常数,E_D(a)E_D(c)按照定义都为0,显然ab和bc项都为0。
比较难办的是E_D(ac), 但是好在按照常理分析,噪声与学习算法应该是独立的,因此
E_D(ac)=E_D(a)E_D(c)=0,
于是,我们有:
E_D[(f(x;D)-y_D)^2]=E_D[(f(x;D)-\overline{f}(x))^2]+(\overline{f}(x)-y)^2+E_D[(y_D-y)^2]
即:
泛化误差可分解为方差、偏差的平方、噪声的方差的和。
为了描述的简洁性,我们可以说,泛化误差分解为方差、偏差、噪声三部分。

本文内容出自清华大学出版社的周志华著的《机器学习》(俗称西瓜书)第44-45页的2.5章节“偏差与方差”。将其中的公式转化为更容易理解的图形。书中这段文字有几个不影响阅读和理解的歧义描述:
1、第二段第三行,y_D为x在数据集中的标记。疑改为“训练集D上”更合理。
2、公式2.39对噪声的定义与后续的“假定噪声期望为0”矛盾。疑改为噪声方差合理。
3、公式2.40对偏差的定义括号中没有平方,而公式2.42的解释中的偏差显然是有平方的。
书中公式2.41的第四行这一项为0,在左侧有解释为独立性,中间的逻辑不太直观。

上一篇 下一篇

猜你喜欢

热点阅读