初识AdaBoost
AdaBoost 即 Adaptive Boosting,通俗的讲,就是把许多“弱弱”的hypotheses(学习器)合并起来,变成很强的预测模型。
引入:bagging中原有的 Weightd Base Algorithm
首先,要说明,AdaBoost采用的是序列采样。
里面有提到自助采样和序列采样
Weightd Base 算法如下图,目的是最小化bootstrap-weighted error。
(每一个学习器的优化目标)
其中,u相当于是权重因子,当中第i个样本出现的次数越多的时候,那么对应的越大,表示在error function中对该样本的惩罚越多。
所以,从另外一个角度来看bagging,它其实就是通过bootstrap的方式,来得到这些值(u),作为犯错样本的权重因子,再用base algorithn最小化 error function,得到不同的学习器。这个error function被称为bootstrap-weighted error。
示例如下:
这里u的选取方法是一般的计数方法,而后面提到的AdaBoost中的u的选取方法有所不同。
AdaBoost中样本权重u的选取
从集成学习的目的和特点可知,我们应使不同学习器之间的差别较为明显。那么如何选取u,从而实现这一点呢?
一个广为接受的答案是:“做好自己,互不干涉”,即学习器A的u用于A表现达标,但B的u用于A(样本一一对应位置),表现则不理想。
用数学表达式,进一步实现这种差别:
如果用学习器A训练,uB的表现(即error)近似为0.5的话,表明对的预测分类没有什么作用,就像抛硬币一样,是随机选择的。这样的做法就能最大限度地保证会与有较大的差异性。
要让上式等于0.5的话,一种简单的方法就是利用放大和缩小的思想,将犯错误的和没有犯错误的做相应的乘积操作,使得二者值变成相等,或是利用犯错的比例来做。
在AdaBoost中,常构造下图的尺度因子以达到上面的目的:
(适用于本次学习中的所有样本权重)
此外,还有一个小问题,初始的u应为多少?一般来说,为了保证第一次 bootstrap-weighted error 最小,如下设置即可:
AdaBoost 如何集成
继续探讨,假设我们选用线性组合法,则需确立组合系数α。我们需要制订一种算法,在得到每一个学习器时,便能得到对应的组合系数,不必在最后集成时重新计算。
考虑到α和错误率的相关性,简单的做法可以直接利用对数函数:
好处:
Adaptive Boosted Decision Tree
顾名思义,ABDT 即以决策树为基学习器的 AdaBoost 算法。
-
sampling:
前面提到,AdaBoost算法为基学习器中每一个样本赋予权重u,但是在决策树模型中,例如C&RT算法中并没有引入u,该如何如何在决策树中引入这些权重呢?
如果照本宣科,在决策树将当前分支下犯错误的点赋予权重,每层分支都这样做,会比较复杂,不易求解。为了简化运算,保持决策树算法本身的稳定性和封闭性,我们可以把决策树算法当成一个黑盒子,而从数据来源D’上做一些处理。
由前文可知,权重u的赋值应反映对应样本出现的概率,为的是“放大错误”。那么可以根据u值,对原样本集D进行一次重新的随机sampling,也就是带权重的随机抽样。sampling之后,会得到一个新的D’,D’中每个样本出现的几率与它权重u所占的比例应该是差不多接近的。
上面的做法可以概括为,把赋予权重u这一操作,转换为目的性的随机抽样。这种对数据本身进行修改而不更改算法结构的方法很重要!
-
基学习器组合权重过大与剪枝:
如果有一棵完全长成的树,由所有的样本训练得到。若每个样本都不相同,决策树不断切割分支,直到所有的都被完全分开,且最终得到它的Ein为0,则组合权重α为无穷大,与发挥集体智慧来得到优秀的模型G这一目的相矛盾。
解决方法:
1.对树部分修剪(pruned),比如只使用一部分样本,这在sampling的操作中已经起到这类作用;
2.限制树的高度(max_depth)。
AdaBoost的奥妙之处(GDBT 前言)
继续讨论,如果联系SVM相关知识,w与的乘积再除以w的长度就是margin,即点到边界的距离。另外,乘积项再与相乘,表示点的位置是在正确的那一侧还是错误的那一侧。所以,回过头来,这里的voting score实际上可以看成是没有正规化(没有除以w的长度)的距离,即可以看成是该点到分类边界距离的一种衡量。
从效果上说,距离越大越好,也就是说voting score要尽可能大一些。
所以,我们算法的目的就是让 yn 与 voting score 的乘积为正,且越大越好。也就是说,如果 voting score 表现不错,那么相应 u(t+1) 应该是最小的。
那么在AdaBoost中,随着每轮学习的进行,每个样本的 ut 是逐渐减小的,直到u(T+1)最小。以上是从单个样本点来看的。总体来看,所有样本的之和应该也是最小的。
因此,我们的目标也可以理解为:
此外,可以说GBDT就是AdaBoost-DTree的regression版本,二者具有一定的相似性,以后会展开介绍。
小结
上面介绍的整个算法被称为Adaptive Boosting。它由三部分构成:base learning algorithm (各学习器),re-weighting factor(错误率) 和linear aggregation(α) 。
综上所述,完整的 AdaBoost 算法流程如下:
待理解之处:
参考资料: