本文主要介绍boosting算法得基本原理,以及的三种典型算法原理:adaboost,GBM(Gradient bossting machine),XGBoost。
Boosting方法原理
boosting算法是一类将弱学习器提升为强学习器的集成学习算法,它通过改变训练样本的权值,学习多个分类器,并将这些分类器进行线性组合,提高泛化性能。
先介绍一下“强学习”和“弱学习”的概念:一个分类,如果存在一个多项式算法能够学习他,并得到很高的正确率,那么这个算法称为强学习器,反之如果正确率只是稍大于随机猜测(50%),则称为弱学习器。在实际情况中,我们往往会发现弱学习器比强学习器更容易获得,所以就有了能否把弱学习器提升(boosting)为强学习器的疑问。于是提升类方法应运而生,它代表了一类从弱学习器出发,反复训练,得到一系列弱学习器,然后组合这些弱学习器,构成一个强学习器的算法。大多数boost方法会改变数据的概率分布(改变数据权值),具体而言就是提高前一轮训练中被错分类的数据的权值,降低正确分类数据的权值,使得被错误分类的数据在下轮的训练中更受关注;然后根据不同分布调用弱学习算法得到一系列弱学习器实现的,再将这些学习器线性组合,具体组合方法是误差率小的学习器会被增大权值,误差率大的学习器会被减小权值,典型代表adaboost算法。
1.1 Adaboost算法
Adaboost,全称adaptive boosting,前面已经大致介绍了它的基本原理,接下来会简答推导它的算法过程。
给定一个二分类的训练数据集: T=(x1,y1),(x2,y2),……,(xN,yN) T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … … , ( x N , y N ) ,标记 yi∈[−1,1] y i ∈ [ − 1 , 1 ] 。
(1) 初始化训练数据的权值分布
D1=(w11,…,w1i,…,w1N),w1i=1/N,i=1,2,…,N D 1 = ( w 11 , … , w 1 i , … , w 1 N ) , w 1 i = 1 / N , i = 1 , 2 , … , N
(2) 指定生成 T T 个学习器,即进行 t=1,2,…,T t = 1 , 2 , … , T 迭代。
(3) 对于第 t t 次迭代,根据前一次迭代得到的权值分布 Dt D t 训练数据集,得到弱分类器
Gt(x):X→{ −1,1} G t ( x ) : X → { − 1 , 1 }
(4) 计算
Gt(x) G t ( x ) 在权值分布
Dt D t 上的分类误差
et=P(Gt(xi)≠yi)=∑i=1Nw1iI(Gt(xi)≠yi) e t = P ( G t ( x i ) ≠ y i ) = ∑ i = 1 N w 1 i I ( G t ( x i ) ≠ y i )
这里很关键,我们可以发现,分类误差 et e t 是当前学习器得到的未正确分类数据项对应的权值之和,说明adaboost算法的分类误差是受权值分布 Dt D t 影响的,具体怎么影响继续往下看。
(5)
计算当前学习器 Gt(x) G t ( x ) 的权值
αt=12log1−etet α t = 1 2 l o g 1 − e t e t
这个权值是用在最后线性组合时乘在分类器前的,仔细观察这个函数式不难发现当 et≤1/2 e t ≤ 1 / 2 时, αt>0 α t > 0 ,并且随着 et e t 的减小而增大,也就是说分类误差越小分类器的权值越大,这里还可以看出可以看出权值分布 Dt D t 通过影响 et e t 来影响了 αt α t ,这是 Dt D t 的第一个影响。
(6)更新权值分布
Dt+1(x) D t + 1 ( x )
Dt+1=(wt+1,1,…,wt+1,i,…,wt+1,N) D t + 1 = ( w t + 1 , 1 , … , w t + 1 , i , … , w t + 1 , N )
wt+1,i=wt,iZmexp(−αtyiGt(xi)) w t + 1 , i = w t , i Z m e x p ( − α t y i G t ( x i ) )
ZM是规范化因子,∑i=1Nwt,iexp(−αtyiGt(xi))) Z M 是 规 范 化 因 子 , ∑ i = 1 N w t , i e x p ( − α t y i G t ( x i ) ) )
请注意这里是 Dt D t 第二个重要影响,分析第二个等式可知当 Gt(xi)≠yi G t ( x i ) ≠ y i 时, wt+1,i=wt,iZmexp(αt) w t + 1 , i = w t , i Z m e x p ( α t ) ,当 Gt(xi)=yi G t ( x i ) = y i 时 wt+1,i=wt,iZmexp(−αt) w t + 1 , i = w t , i Z m e x p ( − α t ) ,这说明当前分类器的错误分类数据对应的下一次权值被扩大了,正确分类的权值被缩小了,也就是前文说的更加关注错误分类的数据。这个过程可以看做 Gt G t 影响→ et e t 影响→ αt α t 影响→ Gt+1 G t + 1 ,结合第(5)和(6)步就可以理解前文说的提升方法通过改变数据的概率分布(改变数据权值)来训练生成不同的弱学习器。
(7)构建最终的分类器
G(x)=sign(∑t=1TαtGt(x)) G ( x ) = s i g n ( ∑ t = 1 T α t G t ( x ) )
最后总结一下Adaboost算法,理解它的关键就在于了解权值分布
Dt D t 是如何影响误差率
et e t 、权值
αt α t 以及更新权值分布
Dt+1 D t + 1 ,这个过程是见4-5步。具体的例子,很多博主都有详细的给出,感兴趣的朋友可以看看这个大佬的 https://blog.csdn.net/guyuealian/article/details/70995333
1.2 Adaboost算法优缺点
优点
(1)Adaboost提供一种框架,在框架内可以使用各种方法构建子分类器。可以使用简单的弱分类器,不用对特征进行筛选,也不存在过拟合的现象。
(2)Adaboost算法不需要弱分类器的先验知识,最后得到的强分类器的分类精度依赖于所有弱分类器。无论是应用于人造数据还是真实数据,Adaboost都能显著的提高学习精度。
(3)Adaboost算法不需要预先知道弱分类器的错误率上限,且最后得到的强分类器的分类精度依赖于所有弱分类器的分类精度,可以深挖分类器的能力。Adaboost可以根据弱分类器的反馈,自适应地调整假定的错误率,执行的效率高。
(4)Adaboost可以在不改变训练数据,只改变数据权值分布,使得数据在不同学习器中产生不同作用,类似于重采样。
缺点
在Adaboost训练过程中,Adaboost会使得难于分类样本的权值呈指数增长,训练将会过于偏向这类困难的样本,导致Adaboost算法易受噪声干扰。此外,Adaboost依赖于弱分类器,而弱分类器的训练时间往往很长。