树模型
1、决策树 ID3,C4.5,CART
2、随机森林RF
3、Adaboost
4、GBDT
5、XGboost
6、孤立森林(异常检测)
三、Adaboost
一、Adaboost的Boosting理解
Adaboost是集成学习中Boosting方式的代表。多个基学习器其串行执行,下一个学习器基于上一个学习器的经验,通过调整样本的权重,使得上一个错分的样本在下一个分类器更受重视而达到不断提升的效果。Adaboost集成多个学习器的关键在两点:
1)设置基学习器的权重 am=12log1−ememam=12log1−emem
2)调整样本的权重wm+1,i=wm,iZmexp(−amyiGm(xi))wm+1,i=wm,iZmexp(−amyiGm(xi))
相对随机森林的Bootstrap Sampling重采样技术,可以看出Adaboost的权重调整是有目的性,是基于上一个学习器的经验,这也导致Adaboost在基学习器层是串行的。另外值得探讨的是权重为何如此设置?
Adaboost算法采用的基学习器是二值函数(二叉树)模型(当然Adaboost的核心是采用Boosting的思想),下面先来看Adaboost算法的整个流程,后面分析Adaboost在设计上巧妙之处
输入: 训练集 D={(x1y1),(x2,y2),…,(xN,yN)}D={(x1y1),(x2,y2),…,(xN,yN)},其中xi∈Rnxi∈Rn,yi∈{+1,−1}yi∈{+1,−1}
输出:强学习器G(x)G(x)
1)初始化权值 : D1=w11,w12,…,w1ND1=w11,w12,…,w1N,w1i=1N,i=1,2,…,Nw1i=1N,i=1,2,…,N
2)训练M个基学习器,对m=1,2...Mm=1,2...M
a)使用权值分布DmDm与相应的基学习器算法得到第mm个基学习器
b)计算基学习器Gm(x)Gm(x)的训练误差:
em=P(Gm(xi)≠yi)=∑NiwmiI(Gm(xi)≠yi)/∑Niwmiem=P(Gm(xi)≠yi)=∑iNwmiI(Gm(xi)≠yi)/∑iNwmi
c)计算基学习器的权重
如果em>12em>12:am=0am=0,舍弃基学习器,样本权重更新与不更新一致
否则:am=12log1−ememam=12log1−emem
d)更新样本的权重:
Dm+1=(wm+1,1,....,wm+1,i,…,wm+1,N)Dm+1=(wm+1,1,....,wm+1,i,…,wm+1,N)
其中,wm+1,i=wmiZmexp(−amyiGm(xi))wm+1,i=wmiZmexp(−amyiGm(xi))
这里ZmZm是归一化因子:Zm=∑iwmiexp(−amyiGm(xi))Zm=∑iwmiexp(−amyiGm(xi)),使得Dm+1Dm+1满足一个概率分布
3)得到MM个基学习器之后,将基学习器线性组合:
4)得到最终的分类器:
G(x)=sign(f(x))=sign(∑mamGm(x))G(x)=sign(f(x))=sign(∑mamGm(x))
Adaboost算法流程基本与Boosting思想一致,特别之处在于权重的设计,下面分析一下:
1)基学习器的权重am=12log1−ememam=12log1−emem,当0≤em≤120≤em≤12,am≥0am≥0,且amam随emem的减小而增大,也就是说当基学习器的误差越小,权重越大。
2)样本权重更新公式可以表示如下:
也就是说正确分类yi=Gm(xi)yi=Gm(xi),那么−am<0−am<0,正确分类的样本权重在上一次的基础上乘上一个小于1的因子而减小,反之,错分的样本的权重增大。
3)MM个基学习器在线性组合时,需要注意的是,最终的f(x)=∑mamGm(x)f(x)=∑mamGm(x)是一个[−∑mam,∑mam][−∑mam,∑mam]区间的值,符号决定分类,绝对值表示分类一个确信度。
二、Adaboost的指数损失理解
Adaboost算法是前向分步加法算法的特例,以模型为加法模型,损失函数为指数函数的二类分类学习方法。考虑加法模型(additive model)
其中,b(x;γm)b(x;γm)为基函数,γmγm为基函数的参数,βmβm为基函数的权重,显然这是一个加法模型。
在给定训练集和损失函数L(y,f(x))L(y,f(x))的条件下,学习加法模型f(x)f(x)就是最小化损失函数的问题:
当然,我们可以将加法模型看作一个复合函数(加法),直接优化各个系数和基函数参数,但这样问题就变复杂了。考虑前向分步算法,逐个优化每一个基函数和系数来逼近复合函数,那么问题就简化了。具体的,每一步需要优化如下目标函数:
按照这种分步策略,每步优化一个基函数和系数,我们有前向分步算法如下:
输入:训练集D={(x1y1),(x2,y2),…,(xN,yN)}D={(x1y1),(x2,y2),…,(xN,yN)},损失函数:L(y,f(x))L(y,f(x)),基函数{b(x;γ)}{b(x;γ)}
输出:加法模型f(x)f(x)
1)初始化f0(x)=0f0(x)=0
2)学习MM基函数和系数,从
a)极小化损失函数 βm,γm=argminβ,γ∑iL(yi,fm−1(xi)+βb(xi;γ))βm,γm=argminβ,γ∑iL(yi,fm−1(xi)+βb(xi;γ))
b)更新fm(x)=fm−1(x)+βmb(ai;γm)fm(x)=fm−1(x)+βmb(ai;γm)
3)得到最终的加法模型f(x)=fM(x)=∑mβmb(x,γm)f(x)=fM(x)=∑mβmb(x,γm)
前向分步算法通过逐个优化基函数,逐渐弥补残差的思想完成MM个基函数的学习。
回到Adaboost算法,Adaboost是前向分步加法模型的特例。特例在于Adaboost是二分类,且损失函数定义为指数损失和基函数定义为二分类函数。
1)指数损失函数
2)基函数 Gm(x):xi→yi,yi∈{−1,1}Gm(x):xi→yi,yi∈{−1,1}
在Adaboost算法中,我们最终的强学习器为:
以第mm步前向分步算法为例,第个基函数为:
其中fm−1(x)fm−1(x)为:
根据前向分步算法得到amam和Gm(x)Gm(x)使得fm(x)fm(x)在训练集DD上的指数损失最小,即:
其中wm,i=exp[−yifm−1(xi)]wm,i=exp[−yifm−1(xi)],可以看出wm,iwm,i只与fm−1(x)fm−1(x)有关,与当前的学习器无关。由fm(x)=fm−1(x)+amGm(x)fm(x)=fm−1(x)+amGm(x),我们可以得出wm,iwm,i的另外一种表示:
这也就是样本权重更新的表达式(未归一化)。
现在分析目标函数,首先看G∗m(x)Gm∗(x),因为am>0am>0,Gm(x)={−1,1}Gm(x)={−1,1},要使目标函数取到最小值,那么必然有:
也就是说G∗m(x)Gm∗(x)是第mm步使得样本加权训练误差最小的基分类器。将带入目标函数有:
上式对amam求导即可,使得倒数为00,即可得到 .
其中emem是第mm个基分类器的分类错误率:
最后来看Adaboost的权重调整,都是前向分步算法基于一个目标:
可见一切设计都不是偶然,都是必然。Adaboost只是前向分步加法模型的特例,是GBDT的二分类特例,采用牛顿法求解版。