九、集成学习 Ensemble Learning

集成学习通过构建多个学习器组合来提升模型性能,主要分为Boosting和Bagging两类。Boosting中的典型代表是AdaBoost和GBDT,其中GBDT通过迭代优化损失函数的梯度方向,每次训练一个弱学习器,通过加权合并提升模型准确度。Bagging以随机森林为代表,通过随机抽样和并行训练多个基分类器降低方差。偏差和方差的概念用于解释Boosting和Bagging降低错误的方式,其中Boosting主要减少偏差,Bagging主要降低方差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集成学习(Ensemble Learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。

根据个体学习器的生成方式,目前的集成学习方法大致分成两大类:

  • 个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表算法为:Boosting
  • 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表方法为:Bagging

集成学习一般可分为以下三个步骤:

  1. 找到误差互相独立的基分类器
  2. 训练基分类器
  3. 合并基分类器的结果

合并基分类器的方法有 voting 和 stacking 两种

  1. voting 是用投票的方式,将获得最多选票的结果作为最终的结果
  2. stacking 是用串行的方式,把前一个基分类器的结果输出到下一个分类器;将所有基分类器的输出结果相加(或者用更复杂的算法融合,比如把各基分类器的输出作为特征,使用逻辑回归作为融合模型进行最后的结果预测)作为最终的输出。

1 Boosting

Boosting 是一族可将弱学习器提升为强学习器的算法,这类算法的工作机制大致为:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直到基学习器数目达到事先指定的值 T T T,最终将这 T T T 个基学习器进行加权结合。

Boosting 方法训练基分类器时采用串行的方式,各个基分类器之间有依赖。

它的基本思路是将基分类器层层叠加,每一层在训练的时候,对前一层基分类器分错的样本,给予更高的权重。测试时,根据各层分类器的结果的加权得到最终结果。

Boosting 的过程很类似于人类学习的过程,我们学习新知识的过程往往是迭代式的,第一遍学习的时候,我们会记住部分知识,但往往也会犯一些措误,对于这些错误,我们的印象会很深,第二遍学习的时候,就会针对犯过错误的知识加强学习,以减少类似的错误发生。不断循环往复,直到犯错误的次数减少到很低的程度

Boosting 族算法最著名的代表是 AdaBoost。

1.1 AdaBoost

AdaBoost,是英文”Adaptive Boosting“(自适应增强)的缩写,

集成学习器的形式:

H ( x ) = s i g n ∣ f ( x ) ∣ = s i g n ∣ α 1 H 1 ( x ) + α 2 H 2 ( x ) + ⋯ + α T H T ( x ) ∣ H(x)=sign|f(x)|=sign|\alpha_1H_1(x)+\alpha_2H_2(x)+\cdots +\alpha_TH_T(x)| H(x)=signf(x)=signα1H1(x)+α2H2(x)++αTHT(x)

其中, s i g n ( x ) sign(x) sign(x) 为符号函数, x > 0 x>0 x>0 输出 1, x < 0 x<0 x<0 输出 -1。

算法的主要步骤如下:

  1. 确定基分类器:这里选取 ID3 决策树作为基分类器,其实,任何分类模型都可以作为基分类器,但树形模型由于结构简单且较容易产生随机性所以比较常用。

  2. 训练基分类器:假设数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_m,y_m)\} D={ (x1,y1),(x2,y2),,(xm,ym)},其中
    y i ∈ { − 1 , 1 } y_i\in\{-1,1\} yi{ 1,1},训练轮数或者说基分类器的个数为 T T T。则按照如下过程来训练基分类器。
    (1) 初始化采样分布/每个样本的权重
    D 1 ( x ) = 1 / m D_1(x)=1/m D1(x)=1/m
    (2) 令 t = 1 , 2 , ⋯   , T t=1,2,\cdots,T t=1,2,,T 循环:
    (a) 从训练集中,按照 D t D_t Dt 分布,采样出子集 S t = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N t , y N t ) } S_t=\{(x_1,y_1),(x_2,y_2),\cdots,(x_{N_t},y_{N_t})\} St={ (x1,y1),(x2,y2),,(xNt,yNt)}
    (b) 用 S t S_t St 训练基分类器 H t H_t Ht
    (c) 计算 H t H_t Ht 的出错率 ε t = ∑ i = 1 N t I [ H t ( x i ) ≠ y i ] D t ( x i ) N t \varepsilon_t=\frac{\sum_{i=1}^{N_t}I[H_t(x_i)\neq y_i]D_t(x_i)}{N_t} εt=Nti=1NtI[Ht(xi)=yi]Dt(xi), 其中 I [ ] I[] I[] 为判别函数;
    (d) 计算基分类器 H t H_t Ht 的权重 α t = l o g ( 1 − ε t ) ε t \alpha_t=log\frac{(1-\varepsilon_t)}{\varepsilon_t} αt=logεt(1εt)
    (e) 设置下一次采样的分布/每个样本的权重
    D t + 1 = { D t ( i )   o r   D t ( i ) ( 1 − ε t ) ε t , h t ( x i ) ≠ y i ε t ( 1 − ε t ) , h t ( x i ) = y i D_{t+1}= \begin{cases} D_t(i) \ or\ \frac{D_t(i)(1-\varepsilon_t)}{\varepsilon_t} & , h_t(x_i)\neq y_i\\ \frac{\varepsilon_t}{(1-\varepsilon_t)} & , h_t(x_i)= y_i \end{cases} D

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值