阅读笔记:《机器学习》西瓜书(8)——集成学习


集成学习通过构建并结合多个学习器来完成机器学习任务,有时也被称为多分类器系统、基于委员会的学习等(这名字亮眼)。

个体与集成

集成学习一般包括一个或多个基本的学习器,也被称为个体学习器。通过使用多个个体学习器的方法,各个学习器间取长补短,从而获得比单一学习器显著优越的性能(包括准确性能和泛化性能)。这些个体学习器理论上可以从其他任何机器学习方法中选取。
集成学习示意图
当个体学习器均为同种类型时,称这种集成是同质的,反之是异质的。同质集成的个体学习器称为基学习器,反之称为组件学习器
如果各个个体学习器的误差相互独立,那么随着个体学习器的数量增多,集成学习的误差将无限接近于零。而事实上,所有的个体学习器都是针对同一个问题训练出来的,它们的误差很难相互独立。事实上,个体学习器的"准确性"和"多样性"本身就存在冲突,增加多样性就需牺牲准确性,反之亦然。如何产生并结合好而不同的个体学习器,恰是集成学习研究的核心。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类。一个是个体学习器问存在强依赖关系、必须串行生成的序列化方法;另一个是个体学习器间不存在强依赖关系、可同时生成的并行化方法。

Boosting

Boosting 是一族可将弱学习器提升为强学习器的算法,更专注于提升模型的准确性,降低偏差。它的个体学习器见存在强依赖关系,且这种算法只能串行运行。一般的,Boosting算法先从训练样本中得到一个个体学习器,然后根据当前个体学习器在训练样本上的表现(如果使用非训练样本是否能够使得Boosting有更好的泛化性能?又将如何调整训练样本的分布?)来调整训练样本的分布,并进一步训练下一个个体学习器;如此反复,直到个体学习器的数量达到事先指定的数量 T T T,最终将所有的个体学习器进行加权结合。

AdaBoost

Boosting族算法的著名代表是AdaBoost。这里以最简单的二分类问题为例,对于训练集,有: y i ∈ − 1 , + 1 , f : x → y y_i\in {-1,+1},f:\boldsymbol{x} \rightarrow y yi1,+1,f:xy;并且使用容易理解的加性模型加性模型不采用梯度下降的思想,而是每次更新求解一个理论上最优的α_t和h_t):
H ( x ) = ∑ t = 1 T α t h t ( x ) H(\boldsymbol{x})=\sum _{t=1}^T{\alpha _th_t(\boldsymbol{x})} H(x)=t=1Tαtht(x)
其中KaTeX parse error: Undefined control sequence: \boldsymbold at position 5: h_t(\̲b̲o̲l̲d̲s̲y̲m̲b̲o̲l̲d̲{x}是第 t t t个个体学习器, α t \alpha _t αt是其对应的权重。
构造指数损失函数:
ℓ e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] \ell _{exp}(H\mid \mathcal{D})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H(\boldsymbol{x})}] exp(HD)=ExD[ef(x)H(x)]
使得损失函数最小,对其求 H ( x ) H(\boldsymbol{x}) H(x)的偏导,容易得到:
在这里插入图片描述
这意味着使用 H ( x ) H(\boldsymbol{x}) H(x)进行二分类可以达到贝叶斯最优错误率。
然而直接求得 ℓ e x p ( H ∣ D ) \ell _{exp}(H\mid \mathcal{D}) exp(HD)最小时的 H ( x ) H(\boldsymbol{x}) H(x)较为困难,AdaBoost算法一般采用迭代的方法逐步生成个体分类器。

分类器权重更新

通过最小化第 t t t步的指数损失函数:
ℓ e x p ( α t h t ∣ D t ) = E x ∼ D t [ e − f ( x ) α t h t ( x ) ] = e − α t ( 1 − ϵ t ) + e α t ϵ t \ell _{exp}(\alpha_t h_t\mid \mathcal{D_t})=\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D_t}}[e^{-f(\boldsymbol{x})\alpha_t h_t(\boldsymbol{x})}]=e^{-\alpha_t}(1-\epsilon_t)+e^{\alpha_t}\epsilon_t exp(αthtDt)=ExDt[ef(x)αtht(x)]=eαt(1ϵt)+eαtϵt
其中 ϵ t \epsilon_t ϵt是第 t t t个个体学习器错误分类的概率。对 α t \alpha_t αt求偏导,可解得:
α t = 1 2 ln ⁡ ( 1 − ϵ t ϵ t ) \alpha_t=\frac{1}{2}\ln \bigg(\frac{1-\epsilon_t}{\epsilon_t}\bigg) αt=21ln(ϵt1ϵt)
也即分类器权重更新公式。

新个体学习器的确定

假设算法已经得到了 H t − 1 H_{t-1} Ht1,那么下一轮的个体学习器 h t h_t ht应当能纠正 H t − 1 H_{t-1} Ht1中出现的错误。理想情况下所有的错误都应被纠正,即最小化:
在这里插入图片描述
对损失函数进行泰勒展开:
在这里插入图片描述
并令:
在这里插入图片描述
最终可以得到理想的个体学习器:
在这里插入图片描述
由此可见,理想的个体学习器将在分布为 D t \mathcal{D_t} Dt的情况下最小化分类误差。

改变训练样本的分布

考虑 D t \mathcal{D_t} Dt D t + 1 \mathcal{D_{t+1}} Dt+1的关系,可以得到:
D t + 1 ( x ) = D t ( x ) e − f ( x ) H t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] = D ( x ) e − f ( x ) H t − 1 ( x ) e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t ( x ) ] = D t ( x ) ⋅ e − f ( x ) α t h t ( x ) E x ∼ D [ e − f ( x ) H t − 1 ( x ) ] E x ∼ D [ e − f ( x ) H t ( x ) ] = D t ( x ) ⋅ e − f ( x ) α t h t ( x ) ∑ x ∈ D D t ( x ) e − f ( x ) α t h t ( x ) \begin{aligned} \mathcal{D}_{t+1}(\boldsymbol{x})&=\frac{\mathcal{D_t}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\frac{\mathcal{D}(\boldsymbol{x})e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\mathcal{D_t}(\boldsymbol{x})\cdot e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}\frac{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_{t-1}(\boldsymbol{x})}]}{\mathbb{E}_{\boldsymbol{x}\sim \mathcal{D}}[e^{-f(\boldsymbol{x})H_t(\boldsymbol{x})}]} \\&=\frac{\mathcal{D_t}(\boldsymbol{x})\cdot e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}{\sum_{\boldsymbol{x}\in D}{\mathcal{D_t}(\boldsymbol{x})e^{-f(\boldsymbol{x})\alpha_th_t(\boldsymbol{x})}}} \end{aligned} Dt+1(x)=ExD[ef(x)Ht(x)]Dt(x)ef(x)Ht(x)=ExD[ef(x)Ht(x)]D(x)ef(x)Ht1(x)ef(x)αtht(x)=Dt(x)ef(x)αtht(x)ExD[ef(x)Ht(x)]ExD[ef(x)Ht1(x)]=xDDt(x)ef(x)αtht(x)Dt(x)ef(x)αtht(x)
最后一个等号建议手动简单推导一下

AdaBoost算法流程

根据上述推导,可以很容易的理解AdaBoost算法的流程:
AdaBoost算法流程
如果还不是十分清楚AdaBoost的流程,可以参考李航老师《统计学习方法》(清华大学出版社)对应章节。另外这篇文章也根据李航老师《统计学习方法》书籍中的例子做了详细的说明。
值得一提的是,上述算法流程中如果存在某一轮的个体学习器的错误概率大于0.5,算法将可能没有得到共 T T T个个体学习器就中止了。这种训练过程会过早停止的方法称之为重赋权法。此外我们还可以使用重采样法,在抛弃不满足条件的当前个体学习器之后,根据当前分布重新对训练样本进行采样,再基于新的采样结果重新训练出个体学习器,从而使得学习过程可以持续到预设的T轮完成。

Bagging与随机森林

这两种方法均是个体学习器间不存在强依赖关系、可同时生成的并行化方法。且都对训练及进行了采样得到数据子集,再利用数据子集分别对个体学习器进行训练,以得到较强的泛化性能。这两种方法均着重降低模型的方差。

Bagging

这种方法直接基于自助来样法。对原训练集进行 T T T次采样,每次采样 m m m个数据,然后基于每个采样集训练出一个个体学习器,再将这些个体学习器进行结合。这相当于随机选择训练样本。在进行预测时,Bagging针对分类问题采用简单投票法,针对回归问题采用简单平均法。这种方法的实施十分简单,是一个很高效的集成学习算法。

随机森林(RF)

RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。即对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k k k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数 k k k控制了随机性的引入程度,一般 k = log ⁡ 2 d k=\log _2{d} k=log2d
随机森林中个体学习器的多样性不仅来自样本扰动,还来自属性扰动,这使得最终集成的泛化性能进一步提升。

结合策略

常见的结合策略包括:

  1. 平均法。包括简单平均法和加权平均法。
  2. 投票法。包括绝对多数投票法,相对多数投票法,加权投票法。其中投票可以使用硬投票 h i j ( x ) ∈ 0 , 1 h_i^j(\boldsymbol{x})\in {0,1} hij(x)0,1)或软投票 h i j ( x ) ∈ [ 0 , 1 ] h_i^j(\boldsymbol{x})\in [0,1] hij(x)[0,1])。
  3. 学习法。即通过另一个学习器来进行结合。

多样性

误差-分歧分解

其核心公式为:
E = E ‾ − A ‾ E=\overline{E}-\overline{A} E=EA
其中 E E E表示集成的泛化误差, E ‾ \overline{E} E是个体学习器泛化误差的加权平均, A ‾ \overline{A} A是个体学习器与集成的分歧的加权平均。这个式子明确指出:个体学习器准确性越高、多样性越大,则集成越好

多样性度量

对于二分类来说,有联表:
在这里插入图片描述
其中 a + b + c + d = m a+b+c+d=m a+b+c+d=m,有以下几种常用的多样性度量:
在这里插入图片描述

多样性增强

为增强多样性,一般的做法是对数据样本、输入属性、输出表示、算法参数进行扰动。(增强泛化性能

本文参考

AdaBoost

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值