Boostrap详解和延伸

今日心情:焦虑焦虑还是焦虑。
内容参考自: An Introduction to Statistical Learning-Second Edition
【机器学习】Bootstrap详解进行补充。

实例

假设我们想在两种金融资产上投资一些钱,这两种资产的回报分别记为X和Y(X、Y都是随机实数)。

α \alpha α部分的钱投资进X, 1 − α 1-\alpha 1α部分的钱投资进Y。现在我们需要找到一种投资组合,也就是找到一个 α \alpha α值,使得风险最小,也就是:
a r g m i n α   V a r ( α X + ( 1 − α ) Y ) \underset\alpha{argmin}\ Var(\alpha X+(1-\alpha )Y) αargmin Var(αX+(1α)Y)

几十年前马尔可维茨已经在其投资组合理论里给出了解答。当 σ X 2 \sigma_X^2 σX2 σ Y 2 \sigma_Y^2 σY2 σ X Y \sigma_{XY} σXY已知时,最优 α \alpha α的表达式如下:
α = σ Y 2 − σ X Y σ X 2 + σ Y 2 − 2 σ X Y \alpha = \frac {\sigma_Y^2-\sigma_{XY}}{\sigma_X^2+\sigma_Y^2-2\sigma_{XY}} α=σX2+σY22σXYσY2σXY
在现实世界中, σ X 2 \sigma_X^2 σX2 σ Y 2 \sigma_Y^2 σY2 σ X Y \sigma_{XY} σXY一般都是未知的。我们可以通过以往数据来估计这些值。
在Figure 1.中,设 σ X 2 = 1 \sigma_X^2=1 σX2=1 σ Y 2 = 1.25 \sigma_Y^2=1.25 σY2=1.25 σ X Y = 0.5 \sigma_{XY}=0.5 σXY=0.5,模拟生成了一组数据,则这组数据的真实 α \alpha α值为0.6。
在这里插入图片描述
F i g u r e   1. Figure\ 1. Figure 1.每张子图显示了100个模拟点(X, Y)。从左到右,上到下,分别计算 σ X 2 \sigma_X^2 σX2 σ Y 2 \sigma_Y^2 σY2 σ X Y \sigma_{XY} σXY,然后是 α \alpha α。他们的 α \alpha α估计值分别为0.576,0.532,0.657和0.651。

为了评估 α \alpha α的估计准确度,我们可以重复这个模拟+估计的步骤1000次来计算 α \alpha α的标准偏差(Standard Deviation/Standard Error)。每一次可以得到一个估计值 α ^ r \hat \alpha_r α^r r = 1 , 2 , . . . , 1000 r=1,2,...,1000 r=1,2,...,1000。Figure2.的左直方图展示了 α ^ r \hat \alpha_r α^r模拟结果的分布情况,真实值用紫色竖线表示。

在这里插入图片描述
F i g u r e   2. Figure\ 2. Figure 2.

接下来计算 a l p h a alpha alpha的均值:
α ‾ = 1 1000 ∑ r = 1 1000 α ^ r = 0.5996 \overline{\alpha} = \frac{1}{1000}\sum_{r=1}^{1000} \hat \alpha_r=0.5996 α=10001r=11000α^r=0.5996
可以看到 α ‾ \overline{\alpha} α非常接近真实值0.6。其标准偏差 S E ( α ^ r ) SE(\hat \alpha_r) SE(α^r)为:
1 1000 − 1 ∑ r = 1 1000 ( α ^ r − α ‾ ) 2 = 0.083 \sqrt{\frac{1}{1000-1}\sum_{r=1}^{1000}(\hat \alpha_r- \overline{\alpha})^2}=0.083 100011r=11000(α^rα)2 =0.083
这让我们对 α \alpha α的估计准确度有了一个概念。粗略来讲,从总体样本中随机取样,我们期望 α ^ \hat \alpha α^与真实值 α \alpha α的平均差距大约为0.08。然而,在实践中,上述估计方法并不能使用。因为对于真实的数据,我们不能从原来的总体样本中模拟生成新的样本。

Boostrap

然而,bootstrap方法允许我们使用计算机来模拟获得新样本集的过程,这样我们就可以估计 α ^ \hat \alpha α^的可变性而不产生额外的观测值。我们不是从总体中反复获得独立的数据集,而是通过从原始数据集中有放回的,反复抽样观测值得到不同的数据集。

每个采样得到的数据集拥有原数据集一样的大小,其中某些样本可能会出现多次也有可能没有出现过。其整个流程的示例如Figure 3.所示,对一个简单的数据集Z进行boostrap,其中Z仅包含n=3个观测值。我们随机选择n个观测样本来生成一个boostrap数据集, Z ∗ 1 Z^{*1} Z1。这个采样过程是有放回的,也就是说同一个观测值有可能在一个数据集中重复出现多次。在这个例子中, Z ∗ 1 Z^{*1} Z1包含了观测值3两次,观测值1一次,观测值2零次。我们可以用 Z ∗ 1 Z^{*1} Z1计算一个新的 α \alpha α估计,记作 α ∗ 1 \alpha^{*1} α1。这个步骤将重复B次,产生B个不同的boostrap数据集 Z ∗ 1 , Z ∗ 2 , . . . , Z ∗ B Z^{*1},Z^{*2},...,Z^{*B} Z1,Z2,...,ZB和B个相应的 α \alpha α α ∗ 1 , α ∗ 2 , . . , α ∗ B \alpha^{*1},\alpha^{*2},..,\alpha^{*B} α1,α2,..,αB
在这里插入图片描述
F i g u r e 3. Figure 3. Figure3.
于是我们可以计算boostrap估计的 α ^ r \hat \alpha_r α^r标准误差:
S E B ( α ^ ) = 1 B − 1 ∑ r = 1 B ( α ^ ∗ r − 1 B ∑ r ′ = 1 B α ^ ∗ r ′ ) 2 SE_B(\hat \alpha)=\sqrt{\frac{1}{B-1}\sum_{r=1}^{B}(\hat \alpha^{*r}- \frac{1}{B}\sum_{r'=1}^{B}\hat \alpha^{*r'})^2} SEB(α^)=B11r=1B(α^rB1r=1Bα^r)2
Figure 2.的右直方图展示了1000次boostrap之后 α \alpha α的预测值,每次计算使用不同的boostrap数据集。我们可以看到右直方图和模拟1000次生成的左直方图十分相似,他们的boxplot也有着相似的分布,这表明了boostrap可以有效估计 α ^ \hat \alpha α^的可变性。不仅是 α \alpha α的标准差,如果我们想要估计 α \alpha α的中位数、分位数等统计量,也是可以通过Boostrap方法做到。Figure 4.对比了两种方法的步骤。
在这里插入图片描述
F i g u r e   4. Figure\ 4. Figure 4.

Bootstrap 置信区间(Confidence Interval)

Boostrap主要用于计算某个估计的标准误差,同时也可以用于计算某个总体参数的置信区间的近似值。
假设我们需要找到 α \alpha α的95%置信区间。
P ( L ≤ α ≤ U ) = 0.95 P(L\leq \alpha \leq U)=0.95 P(LαU)=0.95
令B=1000,即boostrap采样1000次,得到 Z ∗ 1 , Z ∗ 2 , . . . , Z ∗ 1000 Z^{*1},Z^{*2},...,Z^{*1000} Z1,Z2,...,Z1000 α ∗ 1 , α ∗ 2 , . . , α ∗ 1000 \alpha^{*1},\alpha^{*2},..,\alpha^{*1000} α1,α2,..,α1000

  • Bootstrap Percentile confidence interval:
    [ L , U ] = [ α ∗ 25 , α ∗ 975 ] [L,U]=[\alpha^{*25},\alpha^{*975}] [L,U]=[α25,α975]
  • Bootstrap Standard Error based confidence interval:
    [ L , U ] = α ‾ ± z 0.0025 ∗ S E ∗ 1000 [L,U]=\overline \alpha\pm z_{0.0025} * \frac{SE^*}{1000} [L,U]=α±z0.00251000SE

思考:boostrap可以估计预测误差吗?

在K折交叉验证中,每个fold中的验证集都不相同,也就是说互相之间没有重叠的样本,这是K折效果出色的重要原因。

但在boostrap中,每个boostrap数据集都与原始数据有很大的重叠。原始数据集大约 2 3 \frac{2}{3} 32的样本会出现在每个boostrap数据集中(具体证明略),这会使boostrap方法严重低估预测误差。

应用:boostrap+线性回归

考虑以下线性回归模型:
Y i = β 0 + β 1 X i + ε i ,   i = 1 , . . , n Y_i = \beta_0 + \beta_1 X_i + \varepsilon_i,\ i=1,..,n Yi=β0+β1Xi+εi, i=1,..,n
如何计算 β 0 \beta_0 β0 β 1 \beta_1 β1的标准误差(S.E.)和95%置信区间(C.I.)?
可以用三种不同的boostrap方法:

  • Empirical Bootstrap
  • Residual Bootstrap
  • Wild Bootstrap

Empirical Bootstrap

从数据集 ( X 1 , Y 1 ) , . . . , ( X n , Y n ) (X_1,Y_1),...,(X_n,Y_n) (X1,Y1),...,(Xn,Yn)中反复抽样,得到B个boostrap数据集:

Boostrap Sample 1: ( X 1 ∗ 1 , Y 1 ∗ 1 ) , . . . , ( X n ∗ 1 , Y n ∗ 1 ) (X_1^{*1},Y_1^{*1}),...,(X_n^{*1},Y_n^{*1}) (X11,Y11),...,(Xn1,Yn1)

Boostrap Sample 2: ( X 1 ∗ 2 , Y 1 ∗ 2 ) , . . . , ( X n ∗ 2 , Y n ∗ 2 ) (X_1^{*2},Y_1^{*2}),...,(X_n^{*2},Y_n^{*2}) (X12,Y12),...,(Xn2,Yn2)

Boostrap Sample B: ( X 1 ∗ B , Y 1 ∗ B ) , . . . , ( X n ∗ B , Y n ∗ B ) (X_1^{*B},Y_1^{*B}),...,(X_n^{*B},Y_n^{*B}) (X1B,Y1B),...,(XnB,YnB)

对于每个Boostrap Sample,拟合一个线性回归模型,然后得到:

( β ^ 0 ∗ 1 , β ^ 1 ∗ 1 ) . . . ( β ^ 0 ∗ B , β ^ 1 ∗ B ) (\hat \beta_0^{*1}, \hat \beta_1^{*1})...(\hat \beta_0^{*B}, \hat \beta_1^{*B}) (β^01,β^11)...(β^0B,β^1B)
然后估计S.E.和C.I.。

Residual Bootstrap

线性回归的残差(Residual)可以表示为:
e ^ i = Y i − Y ^ i = Y i − β ^ 0 − β ^ 1 X i \hat e_i = Y_i - \hat Y_i = Y_i - \hat \beta_0 - \hat \beta_1X_i e^i=YiY^i=Yiβ^0β^1Xi
β ^ 0 → β 0 \hat \beta_0 \rightarrow \beta_0 β^0β0 β ^ 1 → β 1 \hat \beta_1 \rightarrow \beta_1 β^1β1时,我们可以将 e ^ i \hat e_i e^i视作对 ε i \varepsilon_i εi的模拟,因为 ε i = Y i − β 0 − β 1 X i \varepsilon_i= Y_i - \beta_0- \beta_1X_i εi=Yiβ0β1Xi

boostrap残差,得到B个boostrap残差数据集:
Boostrap Residual 1: e ^ 1 ∗ 1 , . . . , e ^ n ∗ 1 \hat e_1^{*1},...,\hat e_n^{*1} e^11,...,e^n1

Boostrap Residual 2: e ^ 1 ∗ 2 , . . . , e ^ n ∗ 2 \hat e_1^{*2},...,\hat e_n^{*2} e^12,...,e^n2

Boostrap Residual B: e ^ 1 ∗ B , . . . , e ^ n ∗ B \hat e_1^{*B},...,\hat e_n^{*B} e^1B,...,e^nB

然后生成新的boostrap样本:
X i ∗ b = X i ,   Y i ∗ b = β ^ 0 + β ^ 1 X i + e ^ i ∗ b X_i^{*b} = X_i,\ Y_i^{*b}=\hat\beta_0 + \hat\beta_1 X_i + \hat e_i^{*b} Xib=Xi, Yib=β^0+β^1Xi+e^ib
根据boostrap样本这些拟合回归模型,然后再估计S.E.和C.I.。

Wild Bootstrap

思想与Residual Bootstrap类似。此处略。

Bagging 和随机森林(Random Forest)

装袋法(Bagging)又称自助法聚集(bootstrap aggregation),思想是生成B个不同的boostrap训练集,然后平均每个训练集的预测值。
f ^ b a g ( x ) = 1 B ∑ b = 1 B f ^ ∗ b ( x ) \hat f_{bag}(x) = \frac{1}{B}\sum_{b=1}^{B}{\hat f^{*b}(x)} f^bag(x)=B1b=1Bf^b(x)

随机森林在bagged树的基础上进行了改进,不同之处在于:每一次用boostrap建立的样本集之后并不用全部特征去建立决策树,而是同样对特征也进行抽样。
那么为什么不用所有的特征呢?对于bagged树来说,每次都用所有特征,如果存在一些强特征,就会导致每棵树的分裂方式都类似,这样不同树之间的预测变量就高度相关。这样即使最后对所有树的输出求平均,方差能减少的程度也有限。所以对特征也进行抽样可以更有效减少方差。

随机森林的构建步骤
对于每个bootstrap数据集,用下面的循环生成一颗决策树:

  • 从p个特征中随机选取m个特征(一般 m ≈ p m\approx\sqrt{p} mp
  • 在m个特征中选择最佳的分裂结点
  • 分裂结点
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值