记录 DataWhale集成学习的组队学习过程,Task3主要介绍的是方差偏差理论。
泛化误差和经验损失
在机器学习中,我们真正感兴趣的使模型能很好的拟合未知数据,设模型为
f
f
f,损失函数为
L
(
f
(
x
)
,
y
)
L(f(x),y)
L(f(x),y),带标签的数据由随机变量
X
,
Y
X,Y
X,Y独立同分布生成,且联合分布为
P
(
X
,
Y
)
P(X,Y)
P(X,Y),由概率论的基础知识我们可以知道,损失函数
L
(
f
(
x
)
,
y
)
L(f(x),y)
L(f(x),y)可以看作是随机变量
X
,
Y
X,Y
X,Y的函数,度量
L
(
f
(
x
)
,
y
)
L(f(x),y)
L(f(x),y)的均值就是期望,我们把此期望称为期望损失。
R
e
x
p
(
f
)
=
E
(
X
,
Y
)
∼
P
(
X
,
Y
)
[
L
(
f
(
X
)
,
Y
)
]
R_{exp}(f)=\mathbb{E}_{(X,Y)\sim P(X,Y)}[L(f(X),Y)]
Rexp(f)=E(X,Y)∼P(X,Y)[L(f(X),Y)]假设我们已经通过优化算法选择了一个模型
f
∗
f^*
f∗,则模型
f
∗
f^*
f∗的泛化误差就是模型的期望损失。
R
e
x
p
(
f
∗
)
=
E
(
X
,
Y
)
∼
P
(
X
,
Y
)
[
L
(
f
∗
(
X
)
,
Y
)
]
R_{exp}(f^*)=\mathbb{E}_{(X,Y)\sim P(X,Y)}[L(f^*(X),Y)]
Rexp(f∗)=E(X,Y)∼P(X,Y)[L(f∗(X),Y)]我们的目的就找到泛化误差最小的模型。
但是,我们不知道数据真正的联合分布
P
(
X
,
Y
)
P(X,Y)
P(X,Y),更不可能得到所有的数据,我们真正有的只是某个数据集
D
∗
D^*
D∗,模型在这个确定数据集
D
∗
D^*
D∗上的平均损失称为经验风险。
R
e
m
p
(
f
)
=
E
(
x
,
y
)
∼
D
∗
[
L
(
x
,
f
(
x
)
)
]
R_{emp}(f)=\mathbb{E}_{(x,y)\sim D^*}[L(x,f(x))]
Remp(f)=E(x,y)∼D∗[L(x,f(x))]我们能做的是将
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)降低,但
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)的降低是否能带来
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)的降低呢?在PAC理论中,可以使用Hoeffding不等式得到泛化误差
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)和经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)之间的关系,具体的关系及证明过程可以参考李航老师的《统计学习方法》,根据这个关系我们可以知道把经验风险
R
e
m
p
(
f
)
R_{emp}(f)
Remp(f)降低,泛化误差
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)在一定程度上也会降低,这为机器学习打下了理论基础。但是我们发现,在数据集
D
∗
D^*
D∗上将模型
f
∗
f^*
f∗的经验风险降到0,模型在未知的数据上表现不一定好,这引出了机器学习中常用的偏差-方差分解。
偏差-方差分解
这里假设我们处理的是回归问题,且选用的损失函数为平方差损失函数,也即
L
(
f
(
x
)
,
y
)
=
(
y
−
f
(
x
)
)
2
L(f(x),y)=(y-f(x))^{2}
L(f(x),y)=(y−f(x))2首先,由于噪音干扰,数据集中的标签和样本真实标签可能存在差距,假设对于样本
x
\boldsymbol{x}
x,其对应的真实的标签为
y
y
y,某个数据集中的标签为
y
D
y_{D}
yD,用损失函数衡量两者之间的误差为
(
y
−
y
D
)
2
(y-y_{D})^{2}
(y−yD)2。则我们在所有可能数据集上对误差求平均,就等于将数据集
D
D
D看作随机变量,求误差函数的期望:
ϵ
2
=
E
D
[
(
y
−
y
D
)
2
]
\epsilon^2=\mathbb{E}_{D}[(y-y_{D})^{2}]
ϵ2=ED[(y−yD)2]
同一个模型
f
f
f在不同的数据集上训练出来的结果是不同的,可以把模型
f
f
f看作是关于数据集
D
D
D的函数,真实的数据可以分为无数个样本个数相同的子数据集
D
1
,
D
2
,
…
,
D
∞
D_1,D_2,\dots,D_{\infty}
D1,D2,…,D∞无数个子数据集就对应着无数个模型,对于相同的输入
x
\boldsymbol{x}
x,每个模型都有不同的输出,记作
f
(
x
;
D
)
f(\boldsymbol{x};D)
f(x;D),可以看作是随机变量
D
D
D的函数,无数个模型在
x
\boldsymbol{x}
x上的平均输出值可以看作对这个函数求期望:
f
−
(
x
;
D
)
=
E
D
[
f
(
x
;
D
)
]
\overset{-}f(\boldsymbol{x};D)=\mathbb{E}_{D}[f(\boldsymbol{x};D)]
f−(x;D)=ED[f(x;D)]
f
−
(
x
;
D
)
\overset{-}f(\boldsymbol{x};D)
f−(x;D)代表模型整个拟合能力,我们在开头已经提到,这里使用平方差作为损失函数,所以模型
f
f
f的损失(这里也记为偏差,即衡量模型
f
f
f与真实标签的偏差):
b
i
a
s
(
x
)
=
(
f
−
(
x
;
D
)
−
y
)
bias(\boldsymbol{x})=(\overset{-}f(\boldsymbol{x};D)-y)
bias(x)=(f−(x;D)−y)
有了期望,我们自然可以计算方差,作为衡量着无数个模型输出的差距:
v
a
r
(
x
)
=
E
D
[
(
f
(
x
;
D
)
−
f
−
(
x
;
D
)
)
2
]
var(\boldsymbol{x})=\mathbb{E}_{D}[(f(\boldsymbol{x};D)-\overset{-}f(\boldsymbol{x};D))^2]
var(x)=ED[(f(x;D)−f−(x;D))2]
偏差-方差分解说的就是,某个模型的泛化误差
R
e
x
p
(
f
)
R_{exp}(f)
Rexp(f)可以进行分解,具体为:
R
e
x
p
(
f
)
=
E
(
X
,
Y
)
∼
P
(
X
,
Y
)
[
(
f
(
x
−
y
)
2
)
]
=
E
D
[
(
f
(
x
;
D
)
−
y
)
2
]
R_{exp}(f) =\mathbb{E}_{(X,Y)\sim P(X,Y)}[(f(\boldsymbol{x}-y)^2)]=\mathbb{E}_{D}[(f(\boldsymbol{x};D)-y)^2]
Rexp(f)=E(X,Y)∼P(X,Y)[(f(x−y)2)]=ED[(f(x;D)−y)2]
具体的推导过程可以参考《机器学习》,经过公式化简后有:
R
e
x
p
(
f
)
=
b
i
a
s
(
x
)
2
+
v
a
r
(
x
)
+
ϵ
2
R_{exp}(f)=bias(\boldsymbol{x})^2+var(\boldsymbol{x})+\epsilon^2
Rexp(f)=bias(x)2+var(x)+ϵ2
根据此理论,我们可以做以下分析:
- 对于同一个模型来说,模型在训练集上训练的越充分,则这个模型的偏差就越小,但是模型会过度拟合当前数据集,会把当前数据集中的噪音当作特征,很显然,这个模型在其他数据集中表现肯定不好,这就是低偏差-高方差,是模型过拟合的表现。
- 对于不同的模型来说,模型VC维越大,说明模型越复杂,学习能力强,容易过拟合。在同一个数据集上,复杂度大的模型偏差低,方差高。我们知道,树模型的复杂度就很大,所以树模型方差高,bagging对基学习器的要求就是低偏差高方差,树模型正好满足这个特点,所以随机森林一直是bagging的代表算法,而像逻辑回归这种模型复杂度低的,偏差高方差低,使用bagging结果就不理想了。
降低方差的方法
我们都希望使用更稳健的模型,即模型的方差低,一些常用的方法有:
1.去除冗余特征,降低特征空间的维度。维度越高,过拟合风险越大,所以要选取最重要的维度。可以使用PCA或LDA降维,也可以做特征选择,教材中介绍的逐步回归法就是一个特征选择的方法。
2.正则化,在训练时使用结构风险函数替代经验风险函数。结构风险函数
R
s
r
m
R_{srm}
Rsrm就是经验风险加上正则化项,用于控制模型复杂度,模型越复杂,正则化项越大。常用的是L1正则化和L2正则化,一个经常被提到的知识点是L1正则化更容易产生稀疏解,加了正则项后去寻找最优模型就等于在解决一个约束优化问题,L1正则化约束为菱形,L2正则化约束为圆形,最优的参数为椭圆形曲线与菱形和圆形区域相切的点,很明显L1正则化的交点更容易在坐标轴上,所以会产生稀疏解。
3.交叉验证。交叉验证相当于多次在不同数据集上进行实验求平均来衡量模型,会抵消模型在单个数据集上的随机性。