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

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....





  • 20
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Bootstrap是一个广泛应用的前端框架,它提供了一系列的CSS样式和JavaScript插件,可以帮助开发者快速构建响应式、美观的网页。 使用Bootstrap可以按照以下自助法进行开发: 1. 引入Bootstrap:在HTML文件的`<head>`标签中添加以下代码,Bootstrap的CSS样式表和JavaScript文件引入到你的项目中: ```html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/js/bootstrap.min.js"></script> ``` 2. 使用Bootstrap的CSS类:Bootstrap提供了一系列的CSS类,可以应用于HTML元素上,以实现常见的排版和样式效果。例如,使用`container`类创建一个容器,使用`btn`类创建一个按钮。 3. 使用Bootstrap的组件:Bootstrap还提供了各种组件,如导航栏、表单、卡片等,可以直接在HTML中使用。你可以根据Bootstrap文档中提供的示例代码,将这些组件嵌入到你的网页中。 4. 自定义样式:Bootstrap提供了丰富的CSS类和工具,你可以根据自己的需求进行自定义。通过修改CSS类、添加自定义样式或覆盖默认样式,你可以使你的网页与众不同。 5. 响应式设计:Bootstrap支持响应式布局,可以自适应不同屏幕大小的设备。通过使用Bootstrap提供的栅格系统,你可以轻松地创建响应式的网页布局。 总之,通过学习Bootstrap的文档和示例,你可以快速掌握Bootstrap的使用方法,并利用其提供的样式和组件来构建漂亮且兼容不同设备的网页。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值