【机器学习】Bootstrap详解

【机器学习】Bootstrap详解

Bootstrap简介

Bootstrap方法是非常有用的一种统计学上的估计方法,是斯坦福统计系的教授Bradley Efron(我曾有幸去教授办公室约谈了一次)在总结、归纳前人研究成果的基础上提出一种新的非参数统计方法。Bootstrap是一类非参数Monte Carlo方法,其实质是对观测信息进行再抽样,进而对总体的分布特性进行统计推断。

因为该方法充分利用了给定的观测信息,不需要模型其他的假设和增加新的观测,并且具有稳健性和效率高的特点。1980年代以来,随着计算机技术被引入到统计实践中来,此方法越来越受欢迎,在机器学习领域应用也很广泛。

首先,Bootstrap通过重抽样,可以避免了Cross-Validation造成的样本减少问题,其次,Bootstrap也可以用于创造数据的随机性。比如,我们所熟知的随机森林算法第一步就是从原始训练数据集中,应用bootstrap方法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类回归树。

具体讲解

下面我们用一个例子具体介绍bootstrap的原理和用法:

假设我们有两个金融资产X和Y,我们现在想要合理配置这两个资产,使得其资产组合的风险最小。也就是找到一个\alpha ,使得Var(\alpha X+(1-\alpha)Y)最小。这个问题几十年前马尔可维茨已经在其投资组合理论里给出了解答,最优的\alpha表达式如下:

但是现实生活中实际上我们并不知道\sigma _X^2,\sigma_Y^2以及\sigma_{XY}的值,故而只能通过X和Y的一系列样本对其进行估计。并用估计值\hat{\sigma _X^2},\hat{\sigma_Y^2}以及\hat{\sigma_{XY}}代替\sigma _X^2,\sigma_Y^2以及\sigma_{XY}插入公式:

所以我们唯一的任务就是合理地估计\hat{\sigma _X^2},\hat{\sigma_Y^2}以及\hat{\sigma_{XY}},传统方法中我们一般会考虑直接使用样本方差(sample variance)去估计\sigma _X^2,\sigma_Y^2以及\sigma_{XY}的值,然而自从有了Bootstrap之后,我们有了另一种方法与途径,可以更好地去做估计总体的分布特性,即不仅可以估计\alpha
,还可以估计\alpha
的方差、中位数等值。下面就讲讲Bootstrap究竟是如何做到这一点的:

Bootstrap步骤:

1. 在原有的样本中通过重抽样抽取一定数量(比如100)的新样本,重抽样(Re-sample)的意思就是有放回的抽取,即一个数据有可以被重复抽取超过一次。

2. 基于产生的新样本,计算我们需要估计的统计量。

在这例子中,我们需要估计的统计量是\alpha
,那么我们就需要基于新样本的计算样本方差、协方差的值作为\hat{\sigma _X^2},\hat{\sigma_Y^2}以及\hat{\sigma_{XY}},然后通过上面公式算出一个\hat{\alpha}


3. 重复上述步骤n次(一般是n>1000次)。

在这个例子中,通过n次(假设n=1000),我们就可以得到1000个\alpha_i。也就是\alpha_1,\alpha_2,\cdots,\alpha_{1000}

4. 最后,我们可以计算被估计量的均值和方差(不用关注最后的具体数值,这与原本的样本有关):

我们发现,通过Bootstrap方法我们竟然不仅可以估计\alpha的值( 这点普通方法也可以很容易做到),还可以估计\alpha的accuracy也就是其Standard Error。这可是只利用原有的样本进行一次估计所做不到的。那么Bootstrap对于分布特性的估计效果究竟如何呢?请看下图:

左边是真实的\alpha
分别,右边则是基于bootstrap方法得到的1000个\alpha
的分布,可以看到,二者是比较相近的,也就是说Bootstrap有着不错的估计效果。而且当重复次数增多,Bootstrap的估计效果会更好。

不仅是\alpha
的标准差,如果我们想要估计\alpha
的中位数、分位数等统计量,也是可以通过Boostrap方法做到的,其整个流程可以用下面一张图诠释:


本质上,Bootstrap方法,是将一次的估计过程,重复上千次上万次,从而便得到了得到上千个甚至上万个的估计值,于是利用这不止一个的估计值,我们就可以估计\alpha
均值以外的其他统计量:比如标准差、中位数等。

本文部分图片来源:《An Introduction to Statistical Learning with Applications in R》

说在后面

关于机器学习的内容还未结束,请持续关注该专栏的后续文章。

更多内容请关注我的专栏:R Language and Data Mining

或者关注我的知乎账号:温如

编辑于 2017-01-16

文章被以下专栏收录