AdaBoost的设计
1️⃣
学习误差率e在加权的样本分布上计算分类误差率。
em(x)=i=1∑NwmiI(Gm(xi)=yi)=Gm(xi)=yi∑wmi 2️⃣
弱学习器权重系数α根据分类误差率e调整弱分类器的系数:增大分类误差率小的弱分类器的权值,减小分类误差率较大的弱分类器的权值。
αm=21logem1−em 3️⃣
样本权重D根据学习器的系数α和前一轮是否被正确分类来调整这一轮的样本权重:提高那些被前一轮弱分类器错误分类的样本的权值,降低那些被正确分类的样本的权值。 wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N 4️⃣
结合策略AdaBoost采取加权组合的方法,分类误差率小的弱分类器起的决定作用较大。
f(x)=m=1∑MαmGm(x)
AdaBoost二分类算法
输入:二分类的训练数据集
T={(x1,y1),(x2,y2),…,(xN,yN)},其中实例
xi∈X⊆Rn,标记
yi∈Y={−1,+1};弱学习算法;
- 初始化训练数据的权值分布
D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,⋯,N第一步训练数据集具有均匀的权值分布,保证第一步能够在原始数据上学习基本分类器G1(x)。
- 对m=1,2⋯,M
- 使用具有权值分布Dm的训练数据集学习,得到基本分类器
Gm(x):X→{−1,+1}
- 计算Gm(x)在加权训练数据上的分类误差率
em(x)=i=1∑NwmiI(Gm(xi)=yi)=Gm(xi)=yi∑wmi
- 计算Gm(x)的系数
αm=21logem1−em当em≤0.5时,αm≥0,且αm随着em的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。
- 更新训练数据集的权值分布
Dm+1=(wm+1,1,wm+1,2,⋯,wm+1,N)wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,NZm=i=1∑Nwmiexp(−αmyiGm(xi))当错误分类即yi=Gm(xi)时,权值被扩大,反之,权值被缩小。因此误分类样本在下一轮学习中起更大的作用。
- 构建基本分类器的线性组合
G(x)=m=1∑MαmGm(x)得到最终分类器
f(x)=sign(G(x))=sign(m=1∑MαmGm(x))αm表示了基本分类器Gm(x)的重要性,这里αm之和并不为1。G(x)的符号决定实例x的类,G(x)的绝对值表示分类的确信度。
前向分步加法模型
加法模型
f(x)=m=1∑Mβmb(x;γm)其中
b(x;γm)为基函数,
γm为基函数的参数,
βm为基函数的系数。
给定训练数据及损失函数的条件下,学习加法模型即极小化损失函数
βm,γmmini=1∑NL(yi,m=1∑Mβmb(x;γm))通常这是一个复杂的优化过程,可采用前向分布算法求解。
前向分布算法的思想:从前往后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数。
即每一步只需优化如下损失函数
β,γmini=1∑NL(yi,βb(x;γ))前向分布算法流程
输入:训练数据集
T={(x1,y1),(x2,y2),…,(xN,yN)};损失函数
L(y,f(x));基函数集
{b(x;γ)};
- 初始化f0(x)=0;
- 对m=1,2⋯,M
- 极小化损失函数
(βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(x;γ))
- 更新
fm(x)=fm−1(xi)+βmb(x;γm)
- 得到加法模型
f(x)=fM(x)=m=1∑Mβmb(x;γm)
🌼
AdaBoost算法的另一种解释AdaBoost算法是模型为加法模型
f(x)=m=1∑MαmGm(x)、损失函数为指数损失函数
L(y,f(x))=exp[−yf(x)]、学习算法为前向分步算法时的二分类算法。
AdaBoost算法的推导
第m轮极小化指数损失函数即
(αm∗,Gm∗(x))=argα,Gmini=1∑Nexp[−yi(fm−1(xi)+αG(xi))]=argα,Gmini=1∑Nwˉmiexp[−yiαG(xi)]其中
wˉmi=exp[−yifm−1(xi)]为了使
wˉmi称为一个权重系数,我们对其归一化处理
wmi=∑iwˉmiwˉmi,不影响优化目标
(αm∗,Gm∗(x))=argα,Gmini=1∑Nwmiexp[−yiαG(xi)]按照预测正确和预测错误对样本进行划分
i=1∑Nwmiexp[−yiαG(xi)]=yi=Gm(xi)∑wmie−α+yi=Gm(xi)∑wmieα=(eα−e−α)i=1∑NwmiI(yi=Gm(xi))+e−αi=1∑Nwmi=(eα−e−α)em+e−α其中
em=i=1∑NwmiI(yi=Gm(xi)),即加权数据下的分类误差率。
- 先求解Gm∗(x):
Gm∗(x)=argGmini=1∑NwmiI(yi=G(xi))即
Gm∗(x)为在
wmi加权的数据集下分类误差率
em最小的分类器。
- 再解αm∗:
αm∗=21logem1−em
- 再观察样本权值的更新:
由
fm(x)=fm−1(x)+αmGm(x)以及
wˉmi=exp[−yifm−1(xi)]可得
wˉm+1,i=wˉmiexp[−yiαmGm(x)]对权重进行归一化处理,则得到AdaBoost算法中样本权重的更新法则
wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,NZm=i=1∑Nwmiexp(−αmyiGm(xi))
AdaBoost多分类算法SAMME
- 前向分步算法
- 初始化f(0)(x)=0
- 每一轮的优化目标
(α(m),G(m))=α,Gargmini=1∑NL(yi,f(m−1)(xi)+αG(xi))
- 迭代更新
f(m)(x)=f(m−1)(x)+α(m)G(m)(x)
- 最终集成模型
f(x)=m=1∑Mα(m)G(m)(x)
- αm更新公式
αm=K(K−1)2(logem1−em+log(K−1))其中
K(K−1)2是常数,归一化后不影响最终的优化结果。
AdaBoost多分类SAMME算法推导
第m轮极小化的损失函数即
(α(m),G(m))=α,Gargmini=1∑nexp(−K1yiT(f(m−1)(xi)+αG(xi)))=α,Gargmini=1∑nwˉi(m)exp(−KαyiTG(xi))=α,Gargmini=1∑nwi(m)exp(−KαyiTG(xi))其中
wˉi(m)=exp(−K1yiTf(m−1)(xi)),对其进行归一化得到
wi(m)按照预测正确和预测错误对样本进行划分:记样本i真实的标签为
ci,第m轮弱学习器预测的标签为
Gi(m),则有
yiTG(xi)={1+(k−1)(−K−11)2=K−1K,−K−12+(K−2)(−K−11)2=−(K−1)2K,ci=Gi(m)ci=Gi(m) 那么待优化的目标函数改写为
===α,Gargmini=1∑nwi(m)exp(−KαyiTG(xi))α,Gargmin⎣⎡ci=Gi(m)∑wi(m)e−K−1α+ci=Gi(m)∑wi(m)e(K−1)2α⎦⎤α,Gargmin[e−K−1α+(e(K−1)2α−e−K−1α)i=1∑Nwi(m)I(ci=Gi(m))]α,Gargmin[e−K−1α+(e(K−1)2α−e−K−1α)em]其中
em=i=1∑Nwi(m)I(ci=Gi(m)),为加权数据下的分类误差率。
- 先求解G(m)(x):
G(m)(x)=argmini=1∑Nwi(m)I(ci=Gi(m))即
G(m)(x)为加权数据下分类误差率最小的分类器;
- 再解αm:
αm=K(K−1)2(logem1−em+log(K−1))其中
K(K−1)2是常数,故并不影响最终的优化结果。
- 再观察样本权值的更新:
由
fm(x)=fm−1(x)+αmGm(x)以及
wˉi(m)=exp(−K1yiTf(m−1)(xi))可得
wi(m+1)=Zmwi(m)exp(−KαmyiTG(m)(xi))当
ci=Gi(m)时,
wi(m+1)=Zmwi(m)exp(−K−1αm)或
ci=Gi(m)时,
wi(m+1)=Zmwi(m)exp((K−1)2Kαm)exp(−K−1αm)故可改写为
wi(m+1)=Zmwi(m)exp((K−1)2KαmI(ci=Gi(m)))若不考虑
αm更新公式中的常数系数
K(K−1)2,则样本权重更新公式为
wi(m+1)=Zmwi(m)exp(αmI(ci=Gi(m)))
AdaBoost回归算法
AdaBoost的回归问题有很多变种,以AdaBoost R2算法为例。
- 初始化样本权重
D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,⋯,N
- 对于m=1,2,⋯,M
- 使用具有权重Dm的样本集来训练数据,得到弱学习器Gm(x)
- 计算训练集上的最大误差
Em=max∣yi−Gm(xi)∣i=1,2…N
- 计算每个样本的相对误差:
- 若损失为绝对损失,则样本的相对误差为emi=Em∣yi−Gm(xi)∣
- 若损失为平方损失,则样本的相对误差为emi=Em2(yi−Gm(xi))2
- 若损失为指数损失,则样本的相对误差为emi=1−exp(Em−∣yi−Gm(xi)∣)
- 计算弱学习器的回归误差率:
em=i=1∑Nwmiemi
- 计算弱学习器的系数
αm=1−emem
- 更新下一轮的样本权重
wm+1,i=Zmwmiαm1−emiZm=i=1∑Nwmiαm1−emi
- 构建最终强学习器
采用的是对加权的弱学习器取权重中位数对应的弱学习器作为强学习器的方法
f(x)=Gm∗(x)其中,
Gm∗(x)是所有
lnαm1,m=1,2,…M的中位数对应序号
m∗的弱学习器。
AdaBoost的训练误差和泛化性能
AdaBoost能在学习过程中不断减少训练误差,即不断减少在训练数据上的分类误差率。
定理一:AdaBoost算法最终分类器的训练误差界为
N1i=1∑NI(G(xi)=yi)≤N1i∑exp(−yif(xi))=m∏Zm 这一定理说明,
可以在每一轮选取适当的Gm使得Zm最小,从而使训练误差下降最快。定理二:二类分类问题AdaBoost的训练误差界
m=1∏MZm=m=1∏M[2em(1−em)]≤exp(−2m=1∑Mγm2),γm=21−em 推论:如果存在
γ>0,对所有m有
γm≥γ,则
N1i=1∑NI(G(xi)≤exp(−2Mγ2) 这表明在此条件下AdaBoost的训练误差是以指数速率下降的。
注意:AdaBoost算法不需要知道下界,它具有适应性,即它能适应弱分类器各自的训练误差率。
- AdaBoost算法随着弱学习器数目的增加,泛化能力增强。
AdaBoost算法的正则化
为了防止Adaboost过拟合,我们通常也会加入正则化项,这个正则化项我们通常称为步长
ν。
没有正则化的弱学习器的迭代
fm(x)=fm−1(x)+αmGm(x)加入正则化(学习率)的弱学习器的迭代
fm(x)=fm−1(x)+ναmGm(x)学习率的取值范围为
0<ν≤1。
较小的
ν意味着需要更多的弱学习器的迭代次数,而迭代次数增加可以提高模型的泛化能力。
常用步长和迭代最大次数一起来决定算法的拟合效果。
AdaBoost的学习器类型
理论上任何学习器都可以用于AdaBoost。
但使用最广泛的AdaBoost弱学习器是单层决策树,也称为决策树桩,当然这个层数也是参数,最好通过交叉验证得到。AdaBoost分类用了CART分类树,而AdaBoost回归用了CART回归树。
其它如SVM、逻辑回归、神经网络等也可以作为弱学习器。
AdaBoost算法的优缺点
优点:
- Adaboost作为分类器时,分类精度很高;
- 在Adaboost的框架下,可以使用各种回归分类模型来构建弱学习器,非常灵活;
- 作为简单的二分类器时,构造简单,结果可理解;
- 不容易发生过拟合。
缺点:
- 对异常样本敏感,异常样本在迭代中可能会获得较高的权重,影响最终的强学习器的预测准确性。
AdaBoost算法不容易出现过拟合问题,但不是绝对的,模型可能会处于过拟合的情况:
- 弱学习器的复杂度很大,因此选择较小复杂度模型可以避免过拟合问题,如选择决策树桩。adaboost + 决策树 = 提升树模型。
- 训练数据含有较大的噪声,随着迭代次数的增加,可能出现过拟合情况。
参考链接: