• 决策树只是生成了一颗树,可能会有较高的错分率
  • 那么生成多棵树,就变成了森林,这就是bagging(随机森林的前身)

  • bagging = Bootstrap + aggregating

  • 要生成多课树(如B棵树),那么每棵树都需要样本,然而我们只有一个数据集$(Y_i,X_{i1},\cdots,X_{ip})\quad i=1,\dots,n$

  • 这里就需要用到重抽样Bootstrap

Bootstrap

  • 对于统计量总体分布未知的情况,通过对原始样本重复抽样得到统计量的经验分布,从而近似总体分布

  • 从数据集中随机抽取样本,有放回,抽取的数量与原始样本大小一致,即随机有放回的抽出n份样本

  • 抽出n份样本算作一次Bootstrap抽样

  • 重复Bootstrap抽样B次,也就生成了B份数据集

  • out-of-bag(OOB)概念:在一次Bootstrap抽样中,原始数据集中没有被抽到的样本。当样本$n$很大的时候,某个样本没有被抽到的概率为:

Bagging

  • Bootstrap抽样完,总共B份数据集
  • 每个数据集,构建一棵分类树,这里并没有修建树,生成了B棵树

  • 分类树:当有一个新的$X$时,每一棵树都有一个结果,出现次数最多的结果作为最终结果

  • 回归树:B棵回归树的平均值作为最终结果

Bagging的误差

  • 优点:不需要交叉验证集,因为每棵树的数据集,在Bootstrap抽样中有一部分原始样本(大约$\frac{1}{3}$)没有被抽到
  • 没有被抽到的样本叫OOB样本,可以用OOB样本来估计误差
  • 比如样本$(X_1,Y_1)$

    • 它不在Bootstap数据集$B_{1_1},\cdots,B_{1_k}$里面,所以它是这些数据集的OOB样本。
    • $B_{1_1},\cdots,B_{1_k}$生成了分类树$T_{1_{1}},\ldots, T_{1_{k}}$,$Y_i$的估计值就从这些树中得到
    • 计算$I\left(\widehat{Y}_{1} \neq Y_{1}\right)$
  • 对每个样本,按照上面的步骤,计算整个OOB错分率:$P E_{b a g}=\frac{1}{n} \sum_{i=1}^{n} I\left(\widehat{Y}_{i} \neq Y_{i}\right)$
  • 回归树改成$P E_{b a g}=\frac{1}{n} \sum_{i=1}^{n}\left(Y_{i}-\widehat{Y}_{i}\right)^{2}$
1
2
library(ipred)
fit = bagging(class~., data = ,nbagg = ,coob = T) #coob为OOB估计,nbagg为bootstrap数量