首页 > 代码库 > Bootstrap 自助法
Bootstrap 自助法
一、简介
Bootstrap是一个很通用的算法,用来估计标准误差、置信区间和偏差。由Bradley Efron于1979年提出,用于计算任意估计的标准误差。术语“Bootstrap”来自短语“to pull oneself up by one’s bootstraps” (源自西方神话故事“TheAdventures of Baron Munchausen”,男爵掉到了深湖底,没有工具,所以他想到了拎着鞋带将自己提起来)。
在统计学中,自助法(BootstrapMethod,Bootstrapping或自助抽样法)可以指任何一种有放回的均匀抽样,也就是说,每当选中一个样本,它等可能地被再次选中并被再次添加到训练集中。自助法能对采样估计的准确性(标准误差、置信区间和偏差)进行比较好的估计,它基本上能够对任何采样分布的统计量进行估计。
Bootstrap有两种形式:非参数bootstrap和参数化的bootstrap,但基本思想都是模拟。参数化的bootstrap假设总体的分布已知或总体的分布形式已知,可以由样本估计出分布参数,再从参数化的分布中进行再采样,类似于MC。非参数化的bootstrap是从样本中再抽样,而不是从分布函数中进行再抽样。
二、非参数化Bootstrap
基本思想是:假设是我们的估计量为,样本大小为N,从样本中有放回的再抽样N个样本,原来每一个样本被抽中的概率相同,均为1/N,得到新的样本我们称为Bootstrap样本,重复B次之后我们得到B个bootstrap样本集,在每一个样本集上都有对应的估计量,对于B个,我们可以计算得到标准误,置信区间,偏置等。
三、参数化Bootstrap
和非参数化Bootstrap不同的地方在于总体分布函数的形式是已知的,需要根据样本估计参数 (参数估计),这样得到经验分布函数,从经验分布函数中再采样得到Bootstrap样本,非参数化Bootstrap是从原始样本中再抽样,得到的Bootstrap样本与原始样本有重合。
四、Matlab实例
假设我们的整体(population)来自与Bernouli分布(掷硬币),参数theta等于0.7,即投一次有0.7的概率出现1。为了考察采样点对估计的影响,我们分别采样了10和100个样本,采用了参数和非参数方法。
%% Bootstrap demo for the MLE for a Bernoulli close all; clear all; %统计量或估计量,这里是均值 estimator = @mean; %Bernoulli分布的参数theta theta = 0.7; %样本数目分别为10和100 Ns = [10 100]; for Ni=1:length(Ns) %当前的样本数 N = Ns(Ni); %再采样次数B B = 2000; %参数为theta的Bernoulli分布的采样 X = rand(1,N) < theta; %MLE参数估计 bmle = estimator(X); %参数化Bootstrap方法对应的B次再采样的统计量 mleBoot = zeros(1,B); %非参数化Bootstrap方法对应的B次再采样的统计量 mleBootNP=zeros(1,B); for b=1:B %参数化Bootstrap对应的分布函数就是Bernoulli分布,其参数为Mle估计的参数,参数化Bootstrap再采样得到样本 Xb = rand(1,N) < bmle; %对再采样的Bootstrap样本求统计量 mleBoot(b) = estimator(Xb); %非参数化Bootstrap方法再采样,从原来的样本中再采样 ndx = unidrnd(N,1,N); Xnonparam = X(ndx); %求统计量 mleBootNP(b) = estimator(Xnonparam); end %% 绘图 %参数化Bootstrap绘图 figure; hist(mleBoot) set(gca,'xlim',[0 1]); %标准误 se=std(mleBoot)/sqrt(B); ttl = sprintf('Boot: true = %3.2f, n=%d, mle = %3.2f, se = %5.3f\n', ... theta, N,mean(mleBoot), se); title(ttl); %非参数化Bootstrap绘图 figure; hist(mleBootNP) set(gca,'xlim',[0 1]) nonParaSe=std(mleBootNP)/sqrt(B); ttl = sprintf('NP boot: true = %3.2f, n=%d, mle = %3.2f, se = %5.3f\n', theta, N, mean(mleBootNP),nonParaSe); title(ttl); end
to be continued....
Bootstrap 自助法