Bootstrap的概念有点类似于随机重复取样。常用来计算评估的精准度。其实和评估模型精准度的cross-validation有异曲同工之处,cross-validation以后会花篇幅写。这次就先从理解bootstrap开始。
bootstrap一般用于评价一个统计方法的精确度。其中心思想在于
- 从原始数据中随机取样n次
- 对每一个取样出的小集团进行统计分析,计算想要计算的指标,比方说平均,偏差
- 这样就可以计算出n个指标
- 根据这些指标来拟合出偏差分布进行评价
由于概念比较抽象,我们举个一般教科书里都会用到的例子来说明。
我们在一个mean等于2,sd等于1的Gamma分布里取100个样
rgamma(x, shape, rate)
set.seed(1970)
sample.original<-rgamma(1000,4,2)
hist(sample.original)

计算出mean和sd
> mean(sampe.original)
[1] 1.895551
> sd(sampe.original)
[1] 0.9617571
接下来使用Bootstrap来对这个取样集进行评估。
- 单次bs,会发现和原数据集的真实情况有一点差异。
> sample.bs1<-sample(sample.original,1000,replace = TRUE)
> mean(sample.bs1)
[1] 1.986563
> sd(sample.bs1)
[1] 0.9751757
- 重复10000次
mean.bs<- NA
sd.bs<-NA
for(i in 1:10000){
sample.bs<-sample(sample.original,1000,replace=TRUE)
mean.bs[i]<-mean(sample.bs)
sd.bs[i]<-sd(sample.bs)
}

我们可以观察到取样的平均值分布已经非常接近正规分布了。
> mean(mean.bs)
[1] 2.02293
> mean(sd.bs)
[1] 1.020538
然后mean以及sd也非常接近真实的值。
网友评论