快速理解bagging与boosting及其分支

  首先,集成学习是指综合多个模型的结果,以提升机器学习的性能。相比单个模型,往往能取得更好的结果。而Bagging和Boosting是集成学习中的两个方法(还有一个stacking,暂不做阐释),刚开始接触时稍有混乱,在此稍浅地记录下学习历程,以便快速理解
  1. Bagging
  Bagging是Bootstrap Aggregating的简称,这是一种并行的方法,其首先生成多种基分类器,在最后预测时通过投票法,从多个基分类器中得到预测结果,有效降低样本方差,每个基分类器之间具有弱关联性相对独立
  其中最常用的Bagging法为随机森林(Random Forest):
  Random Forest的分类器一般是决策树,且通常为CART决策树,步骤如下:

  • 假设原样本集有M个样本,每个样本包含N个属性,则首先有放回地抽取M个样本(每次抽1个,抽完后放回,重新在M个样本中抽1个,因此子集中将包含重复样本)
  • 如此,这个子集包含MxN个元素,再随机从N个属性中,选择n<<N个属性作为决策树每个节点的分裂属性(一般n=logN),若为CART树,则根据GINI指数来确定每个节点选择哪种属性来分裂(原始Bagging使用了所有属性,而不是随机选择n个)
  • 重复上述步骤,生成大量决策树
  • 对于每个测试数据,根据每棵决策树的预测结果,投票表决得到最后结果(可以是少数服从多数,也可以是加权,或者一票否决等)
    RF的优点
  • 随机性的引入,使得RF不易陷入过拟合
  • 随机性的引入,使得RF具有较强的抗干扰性,在很多数据集上都体现出优势
  • 能够处理高维数据(N很多)
  • 并行,训练速度快,实现简单
  • 训练过程中,能够检测到各属性间的相互影响
      2. Boosting
      Boosting是一种串行的方法,每个基分类器之间强关联,必须训练得到前一个基分类器,才能够根据偏差来获得下一个分类器,直至误差小于阈值
      Boosting的分支有很多,其中之一为Adaboost,即自适应Boosting,这里直接引用李航《统计学习方法》中的例子辅助理解:
    Adaboost1
    Adaboost2
  1. 对所有样本赋予权重,第一次时没有先验知识可赋予相同权重 w i = 1 N w_i=\frac{1}{N} wi=N1
  2. 根据训练集与权重分布,选择使误差最低的阈值v, 误差 e i = ∑ G i ( x j ) ! = y j w j e_i=\sum_{G_i(x_j)!=y_j}{w_j} ei=Gi(xj)!=yjwj
  3. 计算系数 α i = 1 2 l o g 1 − e i e i α_i=\frac{1}{2}log\frac{1-e_i}{e_i} αi=21logei1ei
  4. 计算规范化因子 Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^{N}{w_{mi}exp(-\alpha_my_iG_m(x_i))} Zm=i=1Nwmiexp(αmyiGm(xi)),第一轮的Z已在图片中标注
  5. 计算新的权重 w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1, i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(αmyiGm(xi))

  于是可以得到新的权重 { w m + 1 , 1 , w m + 1 , 2 , . . . , w m + 1 , N } \{w_{m+1, 1}, w_{m+1, 2},..., w_{m+1, N}\} {wm+1,1,wm+1,2,...,wm+1,N},可以看到,对于上一轮分错的样本,将被赋予更高的权重,因此下一轮的分割阈值也将随之改变
最后的G由前面G1 G2 G3累加而成,由此也可以看出“累加”的特性,必须串行进行
  此外还有GBDT,传统Boosting包括Adaboost更关注正确错误样本的加权,而GBDT的目的则是为了使之前的模型误差往梯度下降的方向进行
  在GBDT中,将损失函数的负梯度作为当前模型残差的近似值,进而拟合一棵CART树
  如若选择均方根误差作为损失函数,即
L = ∑ i N ( y i − f ( x i ) ) 2 L=\sum_{i}^{N}{(y_i-f(x_i))}^2 L=iN(yif(xi))2
  则在对第i个样本的负梯度为 − ∂ L ∂ f ( x i ) = y i − f ( x i ) -\frac{\partial{L}}{\partial f(x_i)}=y_i-f(x_i) f(xi)L=yif(xi)
  选择其它损失函数时,只要能求一阶导,皆可算出对应偏差,作为下一轮迭代的初始样本
  XGBoost则是在GBDT的基础上的优化,两者的区别主要如下:

  1. GBDT通常以CART树作为基学习器,而XGBoost则还可以使用线性学习器
  2. GBDT的梯度仅使用了一阶导信息,而XGBoost对代价函数进行二阶泰勒展开,同时使用了一阶导和二阶导
  3. 类似RF,支持列抽样,即并不是对所有属性进行学习,而是随机选择一定的属性,既防止过拟合,也减少计算量,加快速度
  4. 引入正则项,控制模型复杂度,并降低模型方差
  5. XGBoost支持并行,这里的并行指的是在计算最佳分裂点时,对特征值的排序这一步。在进行特征分裂时,需要计算各特征的增益等,这一步可通过多线程并行,但是对于下一轮迭代的计算,也依旧是串行的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值