模式识别笔记4-集成学习之AdaBoost
目前集成学习(Ensemble Learning) 分为两类:
- 个体学习器间存在强依赖关系、必须串行化生成的序列化方法:Boosting
- 个体学习器间不存在强依赖关系,可同时生成的并行化方法:Bagging 和 随机森林
这里先来讲下代表Boosting家族的AdaBoost。
Boosting 是一族可以将弱学习器提升为强学习器的算法。
算法机制:
从初始训练集训练一个基学习器(Base Learner) ,根据基学习器的表现对训练样本分布进行调整,对做错的样本赋予更大的权重,基于调整后的样本分布训练下一个基学习器,直到基学习器的数目达到指定的值 TT,,同时进行学习器权重调整。
1. AdaBoost分类算法流程
假设我们有:
-
训练集 D={(x1,y1),(x2,y2),⋯,(xm,ym)}D={(x1,y1),(x2,y2),⋯,(xm,ym)}
-
训练轮数(学习器数目): TT
-
基学习器 ht(x),t={1,2,3,⋯,T}ht(x),t={1,2,3,⋯,T} ,对应于学习算法
-
基学习器权重 αtαt
-
样本分布 DD, 训练集在第 tt 个分类器上的样本权重为:
Dt=(wt1,wt2,⋯,wtm)Dt=(wt1,wt2,⋯,wtm)
针对以上条件,AdaBoost的算法流程如下:
根据这个算法,我们一步步讲AdaBoost的流程。
(1) 初始化权重
对于每个样本,我们令其的初始化权重均为 1m1m 。
对于指定的基学习器数目 TT,我们知道Boosting 是串行化训练,每一个基学习器都是基于上一个已训练的基学习器继续训练得到的,所以接下来要做 TT 个循环
(2) 获得集合分类误差
以二分类 {+1,−1}{+1,−1}为例(多分类是二分类的推广),第 tt 个基学习器在训练集上的加权误差即如公式(2)所示。
(3) 基学习器获得权重系数
由公式(3)可以得到当前基学习器的权重系数。
由公式可以知道,误差率越高,则当前基学习器的权重系数越小。至于为什么使用这个系数公式,我们放到Adaboost的损失函数优化的时候再讲。
(4) 更新样本权重
单独把公式(4)拿出来讲:
其中 ZtZt 是归一化因子:
可以看到,如果第 ii 个样本分类错误,则 有:
则错误分类的样本会在下一个基学习器的训练中,在数据中占有更高的比重。具体为什么用这个权重更新公式,还是放到损失函数优化的时候讲。
(5) 最终的分类策略
最终的强分类器采用了加权平均:
2. AdaBoost损失函数
AdaBoost使用指数损失函数:
通过最小化这个损失函数,我们可以推导出基学习器的权重系数更新策略和样本权重更新策略。至于为什么最小化指数函数误差就可以最小化分类误差,将在最后推导。
基学习器权重更新策略推导
我们知道,tt 轮训练获得的基学习器是由上一个轮的学习器所得,即有:
最小化 tt 轮学习后得到的强分类器损失:
我们令 w′ti=exp(−yiHt−1(x)),显然,它的值不依赖于 αt 和 ht(x), 仅仅依赖于 Ht−1(x), 随着迭代改变。
带回式子(12),得
为了极小化这个损失函数,我们需要极小化第 t 个分类器误差。即:
将(14)带入损失函数:
对于(15)求偏导,令其为0,得:
在基学习器的迭代中,每轮的分类误差为:
注意到 :
则,式(16)变为:
解得:
样本权重更新策略推导
根据上一节自定义的 w′ti,我们知道它与 权重参数只差一个归一化因子 Zt。有:
最小化指数函数误差=最小化分类误差?
最后讲下为什么最小化指数函数误差=最小化分类误差。
回顾一下指数函数误差。
为了最小化误差,我们对 H(x)求偏导:
令 ∇H(x)=0, 解得:
则最终强分类器:
这意味着最终强分类器达到了贝叶斯最优错误率。换言之,若指数函数最小化,则分类错误率也最小化。
参考资料
- 集成学习之Adaboost算法原理小结
- 《机器学习》.周志华
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!