python之Boostrap自助法介绍

介绍

英语Bootstrap的意思是靴带,来自短语:“pull oneself up by one′s bootstrap”,18世纪德国文学家拉斯伯(Rudolf Erich Raspe)的小说《巴龙历险记(或译为终极天将)》(Adventures of Baron Munchausen) 记述道:“巴龙掉到湖里沉到湖底,在他绝望的时候,他用自己靴子上的带子把自己拉了上来。”现意指不借助别人的力量,凭自己的努力,终于获得成功。在这里“bootstrap”法是指用原样本自身的数据抽样得出新的样本及统计量,根据其意现在普遍将其译为“自助法”。 
它是一种有放回的抽样方法,它是非参数统计中一种重要的估计统计量方差进而进行区间估计的统计方法。其核心思想和基本步骤如下: 
  (1) 采用重抽样技术从原始样本中抽取一定数量(自己给定)的样本,此过程允许重复抽样。 
  (2) 根据抽出的样本计算给定的统计量T。 
  (3) 重复上述N次(一般大于1000),得到N个统计量T。 
  (4) 计算上述N个统计量T的样本方差,得到统计量的方差。 
  应该说Bootstrap是现代统计学较为流行的一种统计方法,在小样本时效果很好。通过方差的估计可以构造置信区间等,其运用范围得到进一步延伸。

Jackknife: 和上面要介绍的Bootstrap功能类似,只是有一点细节不一样,即每次从样本中抽样时候只是去除几个样本(而不是抽样),就像小刀一样割去一部分。

用于random forest的数据采样

  1. 从原始样本库里随机产生一个样本。
  2. 放回到库中。
  3. 继续1; 
    上述过程重复n次,产生了一个规模为n的数据集 XX

在随机森林中,我们会构建m个数据集,从而训练m个决策树,通过m个决策树来共同投票决定最终的结果。这就是重采样构建数据和投票机制来塑造的随机森林模型。

来个例子和代码

这里写图片描述 
我们举个例子:假设我们的蓝色点代表男生;黄色点代表女生,我们想知道他们的比例是否大体相当。那么我们采用bootstrap的步骤则是: 
1. 每次采样10个人,看男女比例。 
2. 重复上述过程10000次,把每次的男女比例求平均,代表最终的男女比例。

代码

import numpy as np  
from sklearn.utils import resample
def scalegirl(samples):
    count =0.0
    total = samples.size
    for sex in samples:
        if(sex==0):
            count+=1.0
    print(count)
    return count/(total-count)

boy = (np.ones(1000))
girl = (np.zeros(800))

#girl/boy=0.8

print(girl.shape)
all = np.hstack((boy, girl))
scale = 0.0
iter = 10000
for i in range(iter):
    bootstrapSamples = resample(all,n_samples=100,replace=1)
    print(bootstrapSamples)
    tempscale = scalegirl(bootstrapSamples)
    print(tempscale)
    scale+=tempscale
print(scale/iter)
print(all)

》》0.815429978263103

总结

  1. 从上个例子中,我们可以看到,通过自采样的方法,从统计角度,得到的男女比例和真实的值非常接近。这也是自采样的本质所在。
  2. 这种看似简单的方法,对后来的很多技术都产生了深远的影响。机器学习中的Bagging,AdaBoost等方法其实都蕴含了Bootstrap的思想。因为里面既有部分到全体的模拟概念,还有统计的含义,还有投票的概念。
  3. 有时候我们无法得知真相,只有通过样本来推断。
  4. 当今计算机技术的高度发展,使统计研究及其应用跃上了一个新台阶。
  5. 这不仅提高了计算的速度,而且可以把统计学家从求解数学难题中释放出来,并逐渐形成一种面向应用的、基于大量计算的统计思维——模拟抽样统计推断, Bootstrap 法就是其中的一种。
  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值