目录
Task03 偏差和方差理论
均方误差的概念:即: M S E = 1 N ∑ i = 1 N ( y i − f ^ ( x i ) ) 2 MSE = \frac{1}{N}\sum\limits_{i=1}^{N}(y_i -\hat{ f}(x_i))^2 MSE=N1i=1∑N(yi−f^(xi))2,其中 f ^ ( x i ) \hat{ f}(x_i) f^(xi)是样本 x i x_i xi应用建立的模型 f ^ \hat{f} f^预测的结果。
当一个模型的训练均方误差最小时,不能保证测试均方误差同时也很小。对于这种想法构造的模型,一般在训练误差达到最小时,测试均方误差一般很大!如图:
灰色的线是训练均方误差,红色的线是测试均方误差。需要找到中间蓝色的点(即不是最小的训练均方误差)
当训练均方误差很小,测试均方误差很大时,就是过拟合的情况。
想要得到测试均方误差一般有直接估计和间接估计两种方法。
偏差-方差的权衡:
从上图的测试均方误差曲线可以看到:测试均方误差曲线呈现U型曲线,这表明了在测试误差曲线中有两种力量在互相博弈。可以证明:
E
(
y
0
−
f
^
(
x
0
)
)
2
=
Var
(
f
^
(
x
0
)
)
+
[
Bias
(
f
^
(
x
0
)
)
]
2
+
Var
(
ε
)
E\left(y_{0}-\hat{f}\left(x_{0}\right)\right)^{2}=\operatorname{Var}\left(\hat{f}\left(x_{0}\right)\right)+\left[\operatorname{Bias}\left(\hat{f}\left(x_{0}\right)\right)\right]^{2}+\operatorname{Var}(\varepsilon)
E(y0−f^(x0))2=Var(f^(x0))+[Bias(f^(x0))]2+Var(ε)
也就是说,我们的测试均方误差的期望值可以分解为
f
^
(
x
0
)
\hat{f}(x_0)
f^(x0)的方差、
f
^
(
x
0
)
\hat{f}(x_0)
f^(x0)的偏差平方和误差项
ϵ
\epsilon
ϵ的方差。为了使得模型的测试均方误差达到最小值,也就是同时最小化偏差的平方和方差。
由于我们知道偏差平方和方差本身是非负的,因此测试均方误差的期望不可能会低于误差的方差,因此我们称 Var ( ε ) \operatorname{Var}(\varepsilon) Var(ε)为建模任务的难度,这个量在我们的任务确定后是无法改变的,也叫做不可约误差。
Q1:用一个具体的案例解释什么是偏差和方差?
A1:
偏差:为了选择一个简单的模型去估计真实函数所带入的误差。假如真实的数据X与Y的关系是二次关系,但是我们选择了线性模型进行建模,那由于模型的复杂度引起的这种误差我们称为偏差。偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。
方差:比如要拿着国人的身高去预测体重,由于人口基数很大不可能取14亿人每个人的身高,所以进行抽样。一共随机抽100个样本,每个样本随机抽1000人,在每个样本做线性回归去预测身高所对应的体重。那么这100个样本就有不同的参数,参数之间的差异就是方差。我们希望方差越小越好(代表越可信),与此同时,模型越复杂则方差通常越大。
综上,偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。一个模型越复杂,它的偏差会越小(也就是越拟合真实),它的方差会越大(因为越复杂)。
Q2:偏差与方差和误差之间的关系。
A2:
引用知乎
bias(偏差)描述的是根据样本拟合出的模型的输出预测结果的期望与样本真实结果的差距,简单讲,就是在样本上拟合的好不好。要想在bias上表现好,low bias,就得复杂化模型,增加模型的参数,但这样容易过拟合 (overfitting),过拟合对应上图是high variance,点很分散。low bias对应就是点都打在靶心附近,所以瞄的是准的,但手不一定稳。
varience(方差)描述的是样本上训练出来的模型在测试集上的表现,要想在variance上表现好,low varience,就要简化模型,减少模型的参数,但这样容易欠拟合(unfitting),欠拟合对应上图是high bias,点偏离中心。low variance对应就是点都打的很集中,但不一定是靶心附近,手很稳,但是瞄的不准。
Erroe(误差)等于 bias(偏差) + varience(方差)
我们训练一个模型的最终目的,是为了让这个模型在测试数据上拟合效果好,也就是Error(test)比较小,但在实际问题中,test data我们是拿不到的,也根本不知道test data的内在规律。
让Error(train)尽可能小
让Error(train)尽可能等于Error(test)
让Error(train)尽可能小,即把模型复杂化,把参数搞,十元线性回归,肯定error要比二元线性回归低。 即low bias
然后怎么让Error(train)尽可能等于Error(test)?把模型简单化,把参数少的。什么叫Error(train)=Error(test)?就是模型没有偏见,对train test一视同仁。那么怎样的模型更容易有这这种一视同仁的特性,换句话说,更有『通用性』,对局部数据不敏感?那就是简单的模。即low variance
Q3:训练误差与测试误差之间的联系和区别,如何估计测试误差?
A3:
训练误差:模型在训练集上的误差。
泛化误差(测试误差):在新样本上的误差。
估计测试误差:有两种方式:
- 直接估计:即交叉验证
- 间接估计:即训练误差修正
交叉验证:
前面讨论的对训练误差修正得到测试误差的估计是间接方法,这种方法的桥梁是训练误差,而交叉验证则是对测试误差的直接估计。交叉验证比训练误差修正的优势在于:能够给出测试误差的一个直接估计
K折交叉验证:我们把训练样本分成K等分,然后用K-1个样本集当做训练集,剩下的一份样本集为验证集去估计由K-1个样本集得到的模型的精度,这个过程重复K次取平均值得到测试误差的一个估计
C
V
(
K
)
=
1
K
∑
i
=
1
K
M
S
E
i
CV_{(K)} = \frac{1}{K}\sum\limits_{i=1}^{K}MSE_i
CV(K)=K1i=1∑KMSEi。5折交叉验证如下图:(蓝色的是训练集,黄色的是验证集)
训练误差修正:
前面的讨论我们已经知道,模型越复杂,训练误差越小,测试误差先减后增。因此,我们先构造一个特征较多的模型使其过拟合,此时训练误差很小而测试误差很大,那这时我们加入关于特征个数的惩罚。因此,当我们的训练误差随着特征个数的增加而减少时,惩罚项因为特征数量的增加而增大,抑制了训练误差随着特征个数的增加而无休止地减小。
具体的数学量如下:
C
p
=
1
N
(
R
S
S
+
2
d
σ
^
2
)
C_p = \frac{1}{N}(RSS + 2d\hat{\sigma}^2)
Cp=N1(RSS+2dσ^2),其中d为模型特征个数,
R
S
S
=
∑
i
=
1
N
(
y
i
−
f
^
(
x
i
)
)
2
RSS = \sum\limits_{i=1}^{N}(y_i-\hat{f}(x_i))^2
RSS=i=1∑N(yi−f^(xi))2,
σ
^
2
\hat{\sigma}^2
σ^2为模型预测误差的方差的估计值,即残差的方差。
AIC赤池信息量准则:
A
I
C
=
1
d
σ
^
2
(
R
S
S
+
2
d
σ
^
2
)
AIC = \frac{1}{d\hat{\sigma}^2}(RSS + 2d\hat{\sigma}^2)
AIC=dσ^21(RSS+2dσ^2)
BIC贝叶斯信息量准则:
B
I
C
=
1
n
(
R
S
S
+
l
o
g
(
n
)
d
σ
^
2
)
BIC = \frac{1}{n}(RSS + log(n)d\hat{\sigma}^2)
BIC=n1(RSS+log(n)dσ^2)
BIC是惩罚最重的(特征个数最少)。
Q8:用sklearn,对一组数据进行特征简化(三种方式),再使用回归模型,最后用网格搜索调参,观察三种方法的优劣。
A8:
待做