首先介绍提升算法的思路和代表性的提升算法AdaBoost,然后分析AdaBoost为什么可以提高学习精度,从前向分步加法模型的角度解释AdaBoost,最后介绍提升方法更具体的实力,提升树boosting tree
提升方法AdaBoost算法
提升方法的基本思路
三个臭皮匠顶个诸葛亮,在概率近似正确PAC框架中
- 强可学习:一个类如果存在一个多项式的学习算法能够学习它,并且正确率很高;
- 弱可学习:一个类如果存在一个多项式的学习算法能够学习它,正确率仅比随机猜测要好,这个类就是弱可学习的
弱可学习算法更容易发现,也就是求弱分类器比求强分类器容易,提升算法就是从弱分类器算法出发,反复学习求得一系列弱分类器,然后组合这些弱分类器,构成一个强分类器,这些弱分类器是通过改变训练数据的概率分布来学习到的,提升算法主要关注:每一轮如何改变训练数据的概率分布或权值,如何将弱分类器组合成为强分类器
AdaBoost算法
输入:训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},其中xi∈X⊆Rn,yi∈Y={−1,+1},弱分类器算法
输出:最终分类器G(x)
D1=(w11,⋯,w1i,⋯,w1N),w1i=1N,i=1,2,⋯,N
- 使用具有权值分布Dm的训练数据集学习,得到基本分类器
Gm(x):X→{−1,+1}
- 计算Gm(x)在训练数据集上的分类误差率
em=N∑i=1P(Gm(xi)≠yi)=N∑i=1wmiI(Gm(xi)≠yi)
αm=12log1−emem
这里的对数是自然对数
Dm+1=(wm+1,1,⋯,wm+1,i,⋯,wm+1,N)wm+1,i=wmiZmexp(−αmyiGm(xi)),i=1,2,⋯,N
Zm是规范化因子
Zm=N∑i=1wmiexp(−αmyiGm(xi)),i=1,2,⋯,N
f(x)=M∑m=1αmGm(x)
得到最终的分类器:
G(x)=sign(f(x))=sign(M∑m=1αmGm(x))
AdaBoost算法的训练误差分析
1NN∑i=1I(G(xi)≠yi)≤1N∑iexp(−yif(xi))=∏mZm
可以在每一轮选择适当的Gm使得Zm最小,从而使得训练误差下降得最快
- 对于二类分类问题:二类分类问题AdaBoost的训练误差界
M∏m=1Zm≤exp(−2M∑m=1γ2m)
其中γm=12−em
- 如果存在γ>0对所有m有γm≥γ则有:
1NN∑i=1I(G(xi)≠yi)≤exp(−2Mγ2)
AdaBoost的训练误差是以指数速率下降的
AdaBoost算法的解释
可以认为AdaBoost算法是加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类分类学习算法
前向分步算法
加法模型如下:
f(x)=M∑m=1βmb(x;γm)
其中b(x;γm)是基函数,γm是基函数的参数,βm是基函数的系数,在给定训练数据及损失函数L(y,f(x))的条件下,学习加法模型f(x)称为经验风险最小化即损失函数极小化的问题:
minβm,γmN∑i=1(yi,M∑m=1βmb(x;γm))
前向分步算法求解这一个问题的思路是每次只学习一个基函数及其系数,逐步逼近优化目标函数式,就可以简化优化的复杂度,也就是每次可以只优化如下损失函数:
minβ,γN∑i=1(yi,βb(x;γ))
前向分步算法总结如下:
输入:训练数据集T={(x1,y1),(x2,y2),⋯,(xN,yN)},损失函数L(y,f(x)),基函数集{b(x;γ)}
输出:加法模型f(x)
- 初始化f0(x)=0
- 对m=1,2,⋯,M
极小化损失函数:
(βm,γm)=argminβ.γN∑i=1L(yi,fm−1(xi)+βb(xi;γ))
得到参数βm,γm
更新:
fm(x)=fm−1(x)+βmb(x;γm)
f(x)=fM(x)=M∑m=1βmb(x;γm)
前向分步算法将同时求解从m=1到M的所有参数βm,γm的优化问题简化为逐次求解各个βm,γm的优化问题
前向分步算法与AdaBoost
- AdaBoost算法是前向分步算法的特例,这时,模型是由基本分类器组成的加法模型,损失函数是指数函数
提升树
提升树是以分类树或回归树为基本分类器的提升方法
提升树模型
提升树boosting tree:采用加法模型即基函数的线性组合与前向分步算法,以决策树为基函数的提升方法,对分类问题是二叉分类树,对回归问题是二叉回归树
提升树模型可以表示为决策树的加法模型:
fM(x)=M∑m=1T(x;θm)
其中,T(x,θm)表示决策树,θm为决策树的参数,M为决策树的个数
回归问题的提升树算法
对于二类分类问题,提升树算法只需要将上面的基本分类器的种类限制为二类分类树即可,下面叙述回归问题的提升树:
输入:训练数据集T{(x1,y1),(x2,y2),⋯,(xN,yN)},xi∈X⊆Rn,yi∈Y⊆R
输出:提升树fM(x)
- 初始化f0(x)=0
- 对m=1,2,⋯,M
因为采用平方误差损失函数:
L(y,fm−1(x)+T(x;θm))=[y−fm−1(x)−T(x;θm)]2=[r−T(x;θm)]2r=y−fm−1(x)
所以计算残差:
rmi=yi−fm−1(xi),i=1,2,⋯,N
拟合残差rmi学习一个回归树。得到T(x;θm)
更新fm(x)=fm−1(x)+T(x;θm)
fM(x)=M∑m=1T(x;θm)
梯度提升
目的:当损失函数是平方损失和指数损失的时候,每一步优化是简单的,但是对于一般损失函数,每一步优化没有那么简单,梯度提升gradient boosting算法是利用损失函数的负梯度在当前模型的值
−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)
作为回归问题提升树算法中的残差的近似值
输入:训练数据集T{(x1,y1),(x2,y2),⋯,(xN,yN)},xi∈X⊆Rn,yi∈Y⊆R,损失函数L(y,f(x))
输出:回归树^f(x)
f0(x)=argmincN∑i=1L(yi,c)
- 对m=1,2,⋯,M
对i=1,2,⋯,N计算
rmi=−[∂L(y,f(xi))∂f(xi)]f(x)=fm−1(x)
对rmi拟合一个回归树,得到第m棵树的叶结点区域Rmj,j=1,2,⋯,J
对j=1,2,⋯,J计算
cmj=argminc∑xi∈RmjL(yi,fm−1(xi)+c)
更新fm(x)=fm−1(x)+∑Jj=1cmjI(x∈Rmj)
^f(x)=fM(x)=M∑m=1J∑j=1cmjI(x∈Rmj)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)