集成学习中的boosting主要有两类思想,Adaboost和gradient boosting,而GBDT和XGboost都是gradient boosting的具体应用。
首先简单介绍一下boosting的一些要点,
-
和bagging相比,boosting的主要区别是基学习器之间不是相互独立的,而是相互联系的,当前的学习器的训练是依赖于上一个学习器的学习结果,对上一轮学习错误的数据给与更多的关注,这是boosting的一个重点。
-
boosting本身是一个加法模型,即boosting模型的输出,等于各个学习器的输出之和(或者加权和)
-
boosting乃至集成学习,集成的都是弱学习器,所谓弱学习器就是不论你怎么训练它,它的准确率都一般,这是一定要记住的地方,因为我一开始就想不懂,为什么要训练多个学习器,而不是集中训练一个学习器,就是因为集中训练它效果也不好。
Adaboost
Adaboost和gradient boosting的区别主要在于从不同的角度实现对上一轮训练错误的数据更多关注,Adaboost主要对数据引入权重,训练后调整学习错误的数据的权重,从而使得下一轮学习中给予学习错误的数据更多的关注。
首先我要强调一点,如果我们设定了Adaboost包含M个学习器(M是超参数),那么整个Adaboost就只学习M轮,或者说只进行M次梯度下降,这是重点,一定要记住。
接下来我们看看完整的训练流程,在训练前,我们会初始化权重,此时一般会让每条数据的权重都相等
D1=(w11,……,w1i,……,w1N), w1i=1N, i=1,2,……,N D_1 = (w_{11}, ……, w_{1i},……, w_{1N} ) ,\ \ \ \ w_{1i}=\frac{1}{N}, \ \ \ \ i=1, 2, ……, ND1=(w11,……,w1i,……,w1N), w1i=N1, i=1,2,……,N
比如说,现在有100条数据,那么每条数据的初始化权重就是0.01。
确定好权重后,我们就可以训练第一个学习器,同时定义错误率,作为该学习器性能的指标,
em=∑i=1NwmiI(Gm(xi)≠yi)e_m = \sum _{i=1} ^N w_{mi} I(G_m (x_i) \neq y_i)em=i=1∑NwmiI(Gm(xi)=yi)
其中m表示第m个学习器,N表示训练数据数量,w表示第m个学习器对应的第i个训练数据的权重,I是一个指示函数,判断分类是否正确,在这里正确为0,错误为1,G则是学习器。
一般来说,我们会用准确率之类的指标去衡量一个学习器的性能,之所以这里使用错误率,主要是为了引入权重。
利用错误率,我们可以计算出该学习器的权重,
am=12log(1−emem)a_m = \frac{1}{2} log(\frac{1-e_m}{e_m})am=21log(em1−em)
结合学习器的权重以及错误率,我们就可以根据学习的结果,更新数据的权重分布,
wm+1,i=wmizmexp(−amyiGm(xi))w_{m+1,i} = \frac{w_{mi}}{z_m} exp(-a_my_iG_m(x_i))wm+1,i=zmwm

本文深入介绍了Boosting算法,包括Adaboost和GradientBoosting。Adaboost通过调整数据权重使错误样本得到更多关注,而GradientBoosting通过拟合残差逐步优化模型。二者都是集成学习中的弱学习器组合,常用于决策树。文中详细阐述了两种方法的训练流程和核心思想,并以梯度下降法解释了GradientBoosting的负梯度拟合过程。
最低0.47元/天 解锁文章
1237

被折叠的 条评论
为什么被折叠?



