Bootstrap 自助法 | bootstrap自助抽样插件

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 Bernoulliclose all;clear all;%统计量或估计量,这里是均值estimator = @mean;%Bernoulli分布的参数thetatheta = 0.7;%样本数目分别为10和100Ns = [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', ...        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', theta, N, mean(mleBootNP),nonParaSe);    title(ttl);   end

function [out] = bootstrap(data,B)%%   Bootstrap method -produce B dataSet%%   Inputs:%       data:origianl data set whose size is [M,N],which means feature Dimens is M and the original dataset contains N samples  %       B:number of dataSet %    Outputs:%       out:B bootstrap resamples of the input data  whose size is [M,N,B][M,N]=size(data);% by default B=N;if (exist('B')~=1), B=N;  end;out=zeros(M,N,B);index=unidrnd(N,N,B);out=reshape(data(:,index),M,N,B);end


对于参数化Bootstrap方法,假设我们已知总体是Bernouli分布,先从样本中做MLE估计,得出参数theta,这样我们就可以从分布函数中直接抽样,而不是像非参数Bootstrap一样从样本中再采样。


to be continued....

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部