重抽样方法
重抽样方法(resampling method)是一种不可或缺的工具。这种方法通过反复从训练集中抽取样本,然后对每一个样本重新拟合一个感兴趣的模型,来获取关于拟合模型的附加信息。
这里主要讨论两种最常用的重抽样方法,交叉验证法(cross-validation)、自助法( bootstrap)。
交叉验证法
测试误差(test error) 是用一种统计学习方法预测在一个新的观测上的响应值所产生的的平均误差。
相比之下,只要将统计学习的方法用于训练观测上,训练误差是很容易计算的。
但是训练误差和测试误差往往有很大的不同,尤其是前者可能严重低估后者。
验证集方法
把可获得的观测集分为两部分:一个训练集(training set)、一个验证集(validation set)或者说保留集(hold-out set)。
模型在训练集上拟合,之后用拟合的模型来预测验证集中观测的响应变量。
结果产生的验证集错误率提供了对于测试错误率的一个估计。在定量响应变量时通常使用MSE进行评估,而在定性(离散)响应变量时使用错误分类率。
验证集方法的缺点:
- 测试错误率的验证法估计的波动很大,这取决于具体哪些观测被包括在训练集中,哪些被包括在验证集中。
- 在验证法中,只有一部分观测——那些被包含在训练集而非验证集中的观测——被用于拟合模型。由于被训练的观测越少,统计方法表现越不好,这意味着,验证集错误率可能会高估在整个数据集上拟合模型所得到的测试错误率。
k折交叉验证法
这种方法将观测集随机地分成
k
k
k 个大小基本一致的组,或者说折(fold),第1折作为验证集,然后在剩下
k
−
1
k-1
k−1 折上拟合模型。均方误差
M
S
E
1
MSE_1
MSE1 由验证集的观测计算得出。重复这个过程
k
k
k 次,每一次把不同的观测值作为验证集,得到
k
k
k 个测试误差的估计:
M
S
E
1
,
M
S
E
2
,
⋯
,
M
S
E
k
MSE_1,MSE_2,\cdots,MSE_k
MSE1,MSE2,⋯,MSEk。
k
k
k 折CV估计由上述求平均得到:
C
V
(
k
)
=
1
k
∑
i
=
1
k
M
S
E
i
CV_{(k)}=\frac{1}{k}\sum_{i=1}^kMSE_i
CV(k)=k1i=1∑kMSEi
共有
n
n
n 个观测值,第
i
i
i 类记为
C
i
C_i
Ci,其中有
n
i
n_i
ni 个观测值:
n
i
=
n
/
k
n_i=n/k
ni=n/k:
C
V
(
k
)
=
∑
i
=
1
k
n
i
n
M
S
E
i
其
中
,
M
S
E
i
=
∑
j
∈
C
i
(
y
j
−
y
j
^
)
2
/
n
i
CV_{(k)}=\sum_{i=1}^k\frac{n_i}{n}MSE_i\\其中 ,MSE_i=\sum_{j\in C_i}(y_j-\hat{y_j})^2/n_i
CV(k)=i=1∑knniMSEi其中,MSEi=j∈Ci∑(yj−yj^)2/ni
y
j
^
\hat{y_j}
yj^ 是第
j
j
j 个观测值的拟合值,通过去除第
i
i
i 类的数据集得到。
当
k
=
n
k=n
k=n 时,即为留一交叉验证法(LOOCV):
C
V
(
n
)
=
1
n
∑
i
=
1
n
M
S
E
i
CV_{(n)}=\frac{1}{n}\sum_{i=1}^nMSE_i
CV(n)=n1i=1∑nMSEi
用最小二乘法来拟合线性或者多项式回归模型时,LOOCV方法所花费的时间将被神奇地缩减至与只拟合一个模型相同:
C
V
(
n
)
=
1
n
∑
i
=
1
n
(
y
i
−
y
^
i
1
−
h
i
)
2
CV_{(n)}=\frac{1}{n}\sum_{i=1}^n(\frac{y_i-\hat{y}_i}{1-h_i})^2
CV(n)=n1i=1∑n(1−hiyi−y^i)2
其中
y
^
i
\hat{y}_i
y^i 为用最小二乘拟合的第
i
i
i 个拟合值,
h
i
h_i
hi 为杠杆值,
1
/
n
<
h
i
<
1
1/n<h_i<1
1/n<hi<1。
但是,每一折的估计都是高度相关的,因此它们的平均会有很高的方差。更好的选择是 k = 5 、 k = 10 k=5、k=10 k=5、k=10。
偏差——方差均衡
当 k = n k=n k=n(LOOCV)时,偏差是最小的,但是方差却很大。
k = 5 、 10 k=5、10 k=5、10 为偏差——方差均衡提供了很好的折中,从经验上来说,这些值使得测试错误率的估计不会有过大的偏差或方差。
交叉验证法在分类问题中的应用
我们将数据分成
k
k
k 个大小大致相同的部分
C
1
,
C
2
,
⋯
,
C
k
C_1,C_2,\cdots,C_k
C1,C2,⋯,Ck,第
i
i
i 类中有
n
i
n_i
ni 个观测值:
n
i
=
n
/
k
n_i=n/k
ni=n/k
C
V
k
=
∑
i
=
1
k
n
i
n
E
r
r
i
其
中
E
r
r
i
=
∑
j
∈
C
i
I
(
y
j
≠
y
^
j
)
/
n
i
CV_k=\sum_{i=1}^k\frac{n_i}{n}Err_i\\其中Err_i=\sum_{j\in C_i}I(y_j\neq\hat{y}_j)/n_i
CVk=i=1∑knniErri其中Erri=j∈Ci∑I(yj=y^j)/ni
C
V
k
CV_k
CVk 估计的标准差为
S
E
^
(
C
V
k
)
=
∑
i
=
1
k
(
E
r
r
i
−
E
r
r
ˉ
i
)
2
/
(
k
−
1
)
\hat{SE}(CV_k)=\sqrt{\sum_{i=1}^k(Err_i-\bar{Err}_i)^2/(k-1)}
SE^(CVk)=i=1∑k(Erri−Errˉi)2/(k−1)
自助法
自助法(bootstrap) 可用来衡量一个指定的估计量或统计学习方法中不确定的因素。
假设希望用一笔固定数额的钱对两个收益分别为X、Y的金融资产进行投资,打算把所有钱的百分比为
α
\alpha
α 的部分投资到X,
1
−
α
1-\alpha
1−α 的部分投资到Y。选择一个
α
\alpha
α 使投资风险或者说方差最小,即
V
a
r
(
α
X
+
(
1
−
α
)
Y
)
Var(\alpha X+(1-\alpha)Y)
Var(αX+(1−α)Y) 最小。使风险最小的
α
\alpha
α 为:
α
=
σ
Y
2
−
σ
X
Y
σ
X
2
+
σ
Y
2
−
2
σ
X
Y
其
中
:
σ
X
2
=
V
a
r
(
X
)
,
σ
Y
2
=
V
a
r
(
Y
)
,
σ
X
Y
=
C
o
v
(
X
,
Y
)
\alpha=\frac{\sigma^2_Y-\sigma_{XY}}{\sigma_X^2+\sigma_Y^2-2\sigma_{XY}}\\其中:\sigma_X^2=Var(X),\sigma_Y^2=Var(Y),\sigma_{XY}=Cov(X,Y)
α=σX2+σY2−2σXYσY2−σXY其中:σX2=Var(X),σY2=Var(Y),σXY=Cov(X,Y)
证明:
V a r ( α X + ( 1 − α ) Y ) = α 2 σ X 2 + 2 α ( 1 − α ) σ X Y + ( 1 − α ) 2 σ Y 2 = α 2 ( σ X 2 − 2 σ X Y + σ Y 2 ) + 2 α ( σ X Y − σ Y 2 ) + σ Y 2 = ( σ X 2 + σ Y 2 − 2 σ X Y ) ( α − σ Y 2 − σ X Y σ X 2 + σ Y 2 − 2 σ X Y ) 2 + C Var(\alpha X+(1-\alpha)Y)=\alpha^2\sigma_X^2+2\alpha(1-\alpha)\sigma_{XY}+(1-\alpha)^2\sigma^2_Y\\=\alpha^2(\sigma_X^2-2\sigma_{XY}+\sigma_Y^2)+2\alpha(\sigma_{XY}-\sigma_Y^2)+\sigma_Y^2\\=(\sigma_X^2+\sigma_Y^2-2\sigma_{XY})(\alpha-\frac{\sigma^2_Y-\sigma_{XY}}{\sigma_X^2+\sigma_Y^2-2\sigma_{XY}})^2+C Var(αX+(1−α)Y)=α2σX2+2α(1−α)σXY+(1−α)2σY2=α2(σX2−2σXY+σY2)+2α(σXY−σY2)+σY2=(σX2+σY2−2σXY)(α−σX2+σY2−2σXYσY2−σXY)2+C
用包含过去X、Y的数据集来计算上述值的估计量,得到使投资方差最小的
α
\alpha
α 为:
α
^
=
σ
^
Y
2
−
σ
^
X
Y
σ
^
X
2
+
σ
^
Y
2
−
2
σ
^
X
Y
\hat{\alpha}=\frac{\hat{\sigma}^2_Y-\hat{\sigma}_{XY}}{\hat\sigma_X^2+\hat\sigma_Y^2-2\hat\sigma_{XY}}
α^=σ^X2+σ^Y2−2σ^XYσ^Y2−σ^XY
为估计
α
^
\hat\alpha
α^ 的标准差,重复模拟生成100对X、Y的观测,然后估计
α
\alpha
α,重复上述过程1000次,得到1000个
α
\alpha
α 的估计,记为
α
^
1
,
α
^
2
,
⋯
,
α
^
1000
\hat\alpha_1,\hat\alpha_2,\cdots,\hat\alpha_{1000}
α^1,α^2,⋯,α^1000,模拟生成这些数据时,参数设定为
σ
X
2
=
1
,
σ
Y
2
=
1.25
,
σ
X
Y
=
0.5
\sigma_X^2=1,\sigma_Y^2=1.25,\sigma_{XY}=0.5
σX2=1,σY2=1.25,σXY=0.5,所以
α
\alpha
α 的真值为0.6。
1000个
α
\alpha
α 估计的均值为
α
ˉ
=
1
1000
∑
r
=
1
1000
α
^
r
=
0.5996
\bar\alpha=\frac{1}{1000}\sum_{r=1}^{1000}\hat\alpha_r=0.5996
αˉ=10001r=1∑1000α^r=0.5996
与
α
=
0.6
\alpha=0.6
α=0.6 非常接近,估计量的标准差为
1
1000
−
1
∑
r
=
1
1000
(
α
^
r
−
α
ˉ
)
2
=
0.083
\sqrt{\frac{1}{1000-1}\sum_{r=1}^{1000}(\hat\alpha_r-\bar\alpha)^2}=0.083
1000−11r=1∑1000(α^r−αˉ)2=0.083
实际中,对于真实数据,不能从原始的总体中生成新的样本。但是自助法可以用电脑模拟得到新的样本集,估计
α
^
\hat\alpha
α^ 的波动性而不用生成额外的样本。自助法通过反复从原始数据集中抽取观测得到数据集。
考虑包括
n
n
n 个观测的简单数据集
Z
Z
Z。首先随机从数据集中选择
n
n
n 个观测来产生一个自助法数据集
Z
∗
1
Z^{*1}
Z∗1。抽样通过有放回的方式执行,意味着同一个观测可能多次出现在自助法数据集中。用
Z
∗
1
Z^{*1}
Z∗1 产生一个新的对
α
\alpha
α 的自助法估计,记为
α
^
∗
1
\hat\alpha^{*1}
α^∗1,重复这个步骤
B
B
B 次,
B
B
B 是个很大的值,可以产生
B
B
B 个不同的自助法数据集,
Z
∗
1
,
Z
∗
2
,
⋯
,
Z
∗
B
Z^{*1},Z^{*2},\cdots,Z^{*B}
Z∗1,Z∗2,⋯,Z∗B,和
B
B
B 个相应的
α
\alpha
α 估计,
α
^
∗
1
,
α
^
∗
2
,
⋯
,
α
^
∗
B
\hat\alpha^{*1},\hat\alpha^{*2},\cdots,\hat\alpha^{*B}
α^∗1,α^∗2,⋯,α^∗B,用下式计算自助法估计的标准误差:
S
E
B
(
α
^
)
=
1
B
−
1
∑
r
=
1
B
(
α
^
∗
r
−
α
^
ˉ
∗
)
2
SE_B(\hat\alpha)=\sqrt{\frac{1}{B-1}\sum_{r=1}^B(\hat\alpha^{*r}-\bar{\hat\alpha}^*)^2}
SEB(α^)=B−11r=1∑B(α^∗r−α^ˉ∗)2
这可以作为原始数据集中所估计的
α
^
\hat\alpha
α^ 的标准误差的估计。
在更复杂的数据情况下,找出生成自助法样本的适当方法需要进行一些思考。例如,如果数据的时间序列,就不能简单的采样观测结果。
自助法还可以提供参数的置信区间(Bootstrap Percentile confidence interval)。
交叉验证中,每个 K K K 验证折都不同于其他用于训练的 K − 1 K-1 K−1 折,无重叠。但自助法样本中每个都与原始数据有显著的重叠,将导致其严重低估真正的预测误差。