机器学习系列 15:集成学习

目录


1.1 集成学习
1.2 提升(Boosting)方法
  1.2.1 AdaBoost
    1.2.1.1 AdaBoost 的算法描述
    1.2.1.2 AdaBoost 算法解释
  1.2.2 其他提升(Boosting)方法
1.3 Bagging 与随机森林
  1.3.1 Bagging
    1.3.1.1 Bagging 的算法描述
  1.3.2 随机森林
1.4 结合策略
  1.4.1 平均法
  1.4.2 投票法
  1.4.3 学习法



  本内容将介绍 集成学习,主要介绍集成学习中的 提升(Boosting)方法Bagging随机森林 算法,以及集成学习中的结合策略

1.1 集成学习

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

  图 1.1 显示出集成学习的一般结构:先产生一组“个体学习器”(Individual Learner),再用某种策略将它们结合起来。个体学习器通常由现有的学习算法从训练数据产生,例如 CART 决策树算法、BP 神经网络算法等。集成学习通过将多个学习器结合,常可获得比单一学习器显著优越的泛化性能。

机器学习系列 15:集成学习_第1张图片
图 1.1 集成学习示意图

  根据个体学习器是否相同,可将集成学习分为:

  • 同质集成:在集成中,所有个体学习器是相同类型的,称为同质集成。例如,决策树集成,神经网络集成。同质集成中的个体学习器亦称“基学习器”(base learner),相应的学习算法称为“基学习算法”(base learning algorithm)。
  • 异质集成:在集成中,所有个体学习器不是同一种类型的,称为异质集成。例如集成中同时包含决策树和神经网络。异质集成中的个体学习器一般不称为基学习器,常称为“组件学习器”(component learner)或直接称为个体学习器。

目前来说,同质个体学习器的应用最广泛。而同质个体学习器使用最多的模型是 CART 决策树和神经网络。

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

  • 个体学习器间存在强依赖关系、需要串行生成的序列化方法,代表算法是 提升(Boosting)方法
  • 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表算法是 Bagging随机森林(Random Forest)。

1.2 提升(Boosting)方法

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

机器学习系列 15:集成学习_第2张图片
图 1.2 提升(Boosting)方法基本框架图

  大多数的提升方法都是改变训练数据的概率分布(即训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。因此,对提升方法来说,有两个问题需要回答:

  1. 如何改变训练数据的权值或概率分布。
  2. 如何将弱分类器组合成一个强分类器。

1.2.1 AdaBoost

  Boosting 族算法最著名的代表是 AdaBoost。针对上面提出的提升方法的两个问题,AdaBoost 的处理方法如下:

  1. 提高哪些被前一轮弱分类器错误分类样本的权值,而降低哪些被正确分类样本的权值。
  2. 采用 加权平均法。具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

1.2.1.1 AdaBoost 的算法描述

输入:训练数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } D = \{(\mathbf{x}_1,y_1), (\mathbf{x}_2,y_2), \cdots, (\mathbf{x}_m,y_m)\} D={(x1,y1),(x2,y2),,(xm,ym)},其中, x i ∈ X ⊆ R n \mathbf{x}_i \in \mathcal{X} \subseteq \mathbb{R}^n xiXRn y i ∈ Y = { − 1 , + 1 } y_i \in \mathcal{Y} = \{-1,+1\} yiY={1,+1}

过程

  1. 最开始,我们假设训练数据集具有均匀的权值分布,则得到如下权值分布

D 1 = ( w 11 , ⋯   , w 1 i , ⋯   , w 1 m ) , w 1 i = 1 m , i = 1 , 2 , ⋯   , m \mathcal{D}_1 = (w_{11}, \cdots, w_{1i}, \cdots, w_{1m}), \quad w_{1i} = \frac{1}{m}, \quad i=1,2,\cdots,m D1=(w11,,w1i,,w1m),w1i=m1,i=1,2,,m

  1. t = 1 , 2 , ⋯   , T ​ t = 1,2,\cdots,T​ t=1,2,,T,反复学习基本分类器

    (a)使用具有权值分布 D t ​ \mathcal{D}_t​ Dt 的训练数据集学习,得到基本分类器

    G t ( x ) : X → { − 1 , + 1 } G_t(\mathbf{x}):\mathcal{X} \rightarrow \{-1,+1\} Gt(x):X{1,+1}

    (b)计算 G t ( x ) ​ G_t(\mathbf{x})​ Gt(x) 在训练数据集上的分类误差率

    (1.1) e t = P ( G t ( x i ) ≠ y i ) = ∑ i = 1 m w t i I ( G t ( x i ) ≠ y i ) e_t = P(G_t({\mathbf{x}_i}) \neq y_i) =\sum_{i=1}^{m} w_{ti} I(G_t(\mathbf{x}_i) \neq y_i) \tag{1.1} et=P(Gt(xi)̸=yi)=i=1mwtiI(Gt(xi)̸=yi)(1.1)

    其中, w t i ​ w_{ti}​ wti 表示第 t ​ t​ t 轮中第 i ​ i​ i 个实例的权值, ∑ i = 1 m w t i = 1 ​ \sum_{i=1}^{m} w_{ti} = 1​ i=1mwti=1。这表明, G t ( x ) ​ G_{t}(\mathbf{x})​ Gt(x) 在加权的训练数据集上的分类误差率是被 G t ( x ) ​ G_{t}(\mathbf{x})​ Gt(x) 误分类样本的权值之和。

    (c)计算 G t ( x ) ​ G_t(\mathbf{x})​ Gt(x) 的系数

    (1.2) α t = 1 2 ln ⁡ 1 − e t e t \alpha_t = \frac{1}{2} \ln \frac{1-e_t}{e_t} \tag{1.2} αt=21lnet1et(1.2)

    α t ​ \alpha_{t}​ αt 表示 G t ( x ) ​ G_{t}(\mathbf{x})​ Gt(x) 在最终分类器中的重要性。由式(1.2)可知,当 e t ≤ 1 2 ​ e_t \leq \frac{1}{2}​ et21 时, α t ≥ 0 ​ \alpha_t \geq 0​ αt0,并且 α t ​ \alpha_t​ αt 随着 e t ​ e_t​ et 的减小而增大,所以分类误差率越小的基本分类器在最终分类器中的作用越大。

    (d)更新训练数据集的权值分布

    (1.3) D t + 1 = { w t + 1 , 1 , ⋯   , w t + 1 , i , ⋯   , w t + 1 , m } \mathcal{D}_{t+1} = \{w_{t+1,1}, \cdots, w_{t+1,i}, \cdots, w_{t+1,m}\} \tag{1.3} Dt+1={wt+1,1,,wt+1,i,,wt+1,m}(1.3)

    (1.4) w t + 1 , i = w t , i Z t exp ⁡ ( − α t y i G t ( x i ) ) w_{t+1, i} = \frac{w_{t,i}}{Z_t} \exp (-\alpha_{t} y_i G_t(\mathbf{x}_i)) \tag{1.4} wt+1,i=Ztwt,iexp(αtyiGt(xi))(1.4)

    其中, Z t ​ Z_t​ Zt 是规范化因子
    (1.5) Z t = ∑ i = 1 m w t , i exp ⁡ ( − α t y i G t ( x i ) ) Z_t = \sum_{i=1}^{m} w_{t,i} \exp (-\alpha_t y_i G_t(\mathbf{x}_i)) \tag{1.5} Zt=i=1mwt,iexp(αtyiGt(xi))(1.5)

    它使 D t + 1 ​ \mathcal{D}_{t+1}​ Dt+1 成为一个概率分布。

      我们来看一下式(1.4),当 G t ( x i ) = y i G_t(\mathbf{x}_i) = y_i Gt(xi)=yi 时, w t + 1 , i = w t , i Z t exp ⁡ ( − α t ) w_{t+1,i} = \frac{w_{t,i}}{Z_t} \exp (-\alpha_t) wt+1,i=Ztwt,iexp(αt),可以看出 w t + 1 , i w_{t+1,i} wt+1,i 相比 w t , i w_{t,i} wt,i 变小了,即被正确分类的样本在下一轮中权值变小了;当 G t ( x i ) ≠ y i G_t(\mathbf{x}_i) \neq y_i Gt(xi)̸=yi 时, w t + 1 , i = w t , i Z t exp ⁡ ( α t ) ​ w_{t+1,i} = \frac{w_{t,i}}{Z_t} \exp (\alpha_t)​ wt+1,i=Ztwt,iexp(αt),可以看出被错误分类的样本在下一轮中权值变大了

      不改变所给的训练数据,而不断地改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用,这是 AdaBoost 的一个特点。

  2. 构建基本分类器的线性组合

    (1.6) f ( x ) = ∑ t = 1 T α t G t ( x ) f(\mathbf{x}) = \sum_{t=1}^{T} \alpha_t G_t(\mathbf{x}) \tag{1.6} f(x)=t=1TαtGt(x)(1.6)

    通过加权平均法组合 T ​ T​ T 个基本分类器得到 f ( x ) ​ f(\mathbf{x})​ f(x)。系数 α t ​ \alpha_t​ αt 表示了基本分类器 G t ( x ) ​ G_t(\mathbf{x})​ Gt(x) 的重要性,这里,所有 α t ​ \alpha_t​ αt 之和并不为 1 ​ 1​ 1 f ( x ) ​ f(\mathbf{x})​ f(x) 的符号决定实例 x ​ \mathbf{x}​ x 的类, f ( x ) ​ f(\mathbf{x})​ f(x) 的绝对值表示分类的置信度。

输出:最终的强学习器

(1.7) G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ t = 1 T α t G t ( x ) ) G(\mathbf{x}) = sign(f(\mathbf{x})) = sign \left(\sum_{t=1}^{T} \alpha_t G_t(\mathbf{x}) \right) \tag{1.7} G(x)=sign(f(x))=sign(t=1TαtGt(x))(1.7)



1.2.1.2 AdaBoost 算法解释

  AdaBoost 算法存在另一种解释,即认为 AdaBoost 算法是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法的二分类学习方法

(1)加法模型

  加法模型的定义如下:

(1.8) f ( x ) = ∑ t = 1 T β t b ( x ; γ t ) f(\mathbf{x}) = \sum_{t=1}^{T} \beta_t b(\mathbf{x}; \gamma_t) \tag{1.8} f(x)=t=1Tβtb(x;γt)(1.8)

其中, b ( x ; γ t ) b(\mathbf{x}; \gamma_t) b(x;γt) 为基函数, β t \beta_t βt 为基函数的系数, γ t \gamma_t γt 为基函数的参数。

  在给定训练数据及损失函数 L ( y , f ( x ) ) ​ L(y, f(\mathbf{x}))​ L(y,f(x)) 的条件下,学习加法模型 f ( x ) ​ f(\mathbf{x})​ f(x) 成为经验风险极小化,即损失函数极小化问题

(1.9) min ⁡ β t , γ t ∑ i = 1 m L ( y i , ∑ t = 1 T β t b ( x i ; γ t ) ) \min_{\beta_t,\gamma_t} \sum_{i=1}^{m} L\left(y_i, \sum_{t=1}^{T} \beta_t b(\mathbf{x}_i; \gamma_t)\right) \tag{1.9} βt,γtmini=1mL(yi,t=1Tβtb(xi;γt))(1.9)

  因为需要同时考虑所有基函数以及其权重的选取来令目标最小化,所以通常这是一个极其复杂的优化问题。

(2)前向分布算法

  前向分布算法 求解上面的优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(1.9),那么就可以简化优化的复杂度。具体地,即每步只需要优化如下损失函数

(1.10) min ⁡ β , γ ∑ i = 1 m L ( y i , β b ( x i ; γ ) ) \min_{\beta,\gamma} \sum_{i=1}^{m} L(y_i, \beta b(\mathbf{x}_i; \gamma)) \tag{1.10} β,γmini=1mL(yi,βb(xi;γ))(1.10)

  这样,前向分布算法将同时求解从 t = 1 t=1 t=1 T T T 所有参数 β t \beta_t βt γ t \gamma_t γt 的优化问题简化为逐次求解各个 β t \beta_t βt γ t ​ \gamma_t​ γt 的优化问题。

(3)AdaBoost 算法推导

  假设经过 t − 1 t-1 t1 轮迭代前向分布算法已经得到 f t − 1 ( x ) f_{t-1}(\mathbf{x}) ft1(x),在第 t t t 轮得到 α t \alpha_t αt G t ( x ) G_t(\mathbf{x}) Gt(x) f t ( x ) f_t(\mathbf{x}) ft(x)
(1.11) f t ( x ) = f t − 1 ( x ) + α t G t ( x ) f_t(\mathbf{x}) = f_{t-1}(\mathbf{x}) + \alpha_t G_t(\mathbf{x}) \tag{1.11} ft(x)=ft1(x)+αtGt(x)(1.11)
  目标是使前向分布算法得到的 α t \alpha_t αt G t ( x ) G_t(\mathbf{x}) Gt(x) 使 f t ( x ) f_t(\mathbf{x}) ft(x) 在训练数据集 D D D 上的指数损失最小,即

(1.12) arg ⁡ min ⁡ α t , G t ∑ i = 1 m exp ⁡ ( − y i ( f t − 1 ( x i ) + α t G t ( x i ) ) ) \arg \min_{\alpha_t,G_t} \sum_{i=1}^{m} \exp \Big(-y_i \big(f_{t-1}(\mathbf{x}_i) + \alpha_t G_t(\mathbf{x}_i)\big)\Big) \tag{1.12} argαt,Gtmini=1mexp(yi(ft1(xi)+αtGt(xi)))(1.12)
式(1.12)可表示为
(1.13) arg ⁡ min ⁡ α t , G t ∑ i = 1 m w ˉ t i exp ⁡ ( − y i α t G t ( x i ) ) \arg \min_{\alpha_t,G_t} \sum_{i=1}^{m} \bar{w}_{ti} \exp \big(-y_i \alpha_t G_t(\mathbf{x}_i)\big) \tag{1.13} argαt,Gtmini=1mwˉtiexp(yiαtGt(xi))(1.13)
其中, w ˉ t i = e x p ( − y i f t − 1 ( x i ) ) \bar{w}_{ti} = exp\big(-y_i f_{t-1}(\mathbf{x}_i)\big) wˉti=exp(yift1(xi))。因为 w ˉ t i \bar{w}_{ti} wˉti 即不依赖 α t \alpha_t αt 也不依赖于 G t G_t Gt,所以与最小化无关。但是 w ˉ t i \bar{w}_{ti} wˉti 依赖于 f t − 1 ( x i ) ​ f_{t-1}(\mathbf{x}_i)​ ft1(xi),随着每一轮迭代而发生改变。

(a)求 α ^ t ​ \hat{\alpha}_t​ α^t

  由

(1.14) ∑ i = 1 m w ˉ t i = ∑ i = 1 m ( w ˉ t i I ( y i = G t ( x i ) ) + w ˉ t i I ( y i ≠ G t ( x i ) ) ) = 1 \sum_{i=1}^{m} \bar{w}_{ti} =\sum_{i=1}^{m} \Big(\bar{w}_{ti} I\big(y_i = G_t(\mathbf{x}_i)\big) +\bar{w}_{ti} I\big(y_i \neq G_t(\mathbf{x}_i)\big)\Big) =1 \tag{1.14} i=1mwˉti=i=1m(wˉtiI(yi=Gt(xi))+wˉtiI(yi̸=Gt(xi)))=1(1.14)

得到

(1.15) ∑ i = 1 m w ˉ t i exp ⁡ ( − y i α t G t ( x i ) ) = ∑ i = 1 m ( w ˉ t i exp ⁡ ( − α t ) I ( y i = G t ( x i ) ) + w ˉ t i exp ⁡ ( α t ) I ( y i ≠ G t ( x i ) ) ) = ∑ i = 1 m ( exp ⁡ ( − α t ) ( 1 − w ˉ t i I ( y i ≠ G t ( x i ) ) ) + w ˉ t i exp ⁡ ( α t ) I ( y i ≠ G t ( x i ) ) ) = ( exp ⁡ ( α t ) − exp ⁡ ( − α t ) ) ∑ i = 1 m w ˉ t i I ( y i ≠ G t ( x i ) ) + exp ⁡ ( − α t ) \begin{aligned} &\sum_{i=1}^{m} \bar{w}_{ti} \exp\big(-y_i \alpha_t G_t(\mathbf{x}_i)\big) \\ &\qquad=\sum_{i=1}^{m} \Big(\bar{w}_{ti} \exp(-\alpha_t) I\big(y_i = G_t(\mathbf{x}_i)\big) + \bar{w}_{ti} \exp(\alpha_t) I\big(y_i \neq G_t(\mathbf{x}_i)\big)\Big) \\ &\qquad=\sum_{i=1}^{m} \Bigg(\exp(-\alpha_t) \Big(1-\bar{w}_{ti} I\big(y_i \neq G_t(\mathbf{x}_i)\big)\Big) + \bar{w}_{ti} \exp(\alpha_t) I\big(y_i \neq G_t(\mathbf{x}_i)\big)\Bigg) \\ &\qquad=\big(\exp(\alpha_t) - \exp(-\alpha_t) \big) \sum_{i=1}^{m} \bar{w}_{ti} I\big(y_i \neq G_t(\mathbf{x}_i)\big) + \exp(-\alpha_t) \end{aligned} \tag{1.15} i=1mwˉtiexp(yiαtGt(xi))=i=1m(wˉtiexp(αt)I(yi=Gt(xi))+wˉtiexp(αt)I(yi̸=Gt(xi)))=i=1m(exp(αt)(1wˉtiI(yi̸=Gt(xi)))+wˉtiexp(αt)I(yi̸=Gt(xi)))=(exp(αt)exp(αt))i=1mwˉtiI(yi̸=Gt(xi))+exp(αt)(1.15)

将式(1.15)对 α t ​ \alpha_t​ αt 求导并令其为 0 ​ 0​ 0

(1.16) ( exp ⁡ ( α t ) + exp ⁡ ( − α t ) ) ∑ i = 1 m w ˉ t i I ( y i ≠ G t ( x i ) ) − exp ⁡ ( − α t ) = 0 \big(\exp(\alpha_t) + \exp(-\alpha_t)\big) \sum_{i=1}^{m} \bar{w}_{ti} I\big(y_i \neq G_t(\mathbf{x}_i)\big) - \exp(-\alpha_t) =0 \tag{1.16} (exp(αt)+exp(αt))i=1mwˉtiI(yi̸=Gt(xi))exp(αt)=0(1.16)

可求得

(1.17) α ^ t = 1 2 ln ⁡ 1 − e t e t \hat{\alpha}_{t} = \frac{1}{2} \ln \frac{1-e_t}{e_t} \tag{1.17} α^t=21lnet1et(1.17)

其中, e t ​ e_t​ et 是分类误差率

(1.18) e t = ∑ i = 1 m w ˉ t i I ( y i ≠ G t ( x i ) ) e_t = \sum_{i=1}^{m} \bar{w}_{ti} I(y_i \neq G_t(\mathbf{x}_i)) \tag{1.18} et=i=1mwˉtiI(yi̸=Gt(xi))(1.18)

  这里的 α ^ t ​ \hat{\alpha}_t​ α^t 与式(1.2)的 α t ​ \alpha_t​ αt 完全一致。

(b)求 w ˉ t + 1 , i \bar{w}_{t+1,i} wˉt+1,i

  最后来看每一轮样本权值的更新

(1.19) ∵ f t ( x ) = f t − 1 ( x ) + α t G t ( x ) ∴ − y i f t ( x ) = − y i f t − 1 ( x ) − y i α t G t ( x ) ∴ exp ⁡ ( − y i f t ( x ) ) = exp ⁡ ( − y i f t − 1 ( x ) ) exp ⁡ ( − y i α t G t ( x ) ) ∴ w ˉ t + 1 , i = w ˉ t i exp ⁡ ( − y i α t G t ( x ) ) \begin{aligned} \because f_t(\mathbf{x}) &= f_{t-1}(\mathbf{x}) + \alpha_t G_t(\mathbf{x}) \\\\ \therefore -y_i f_t(\mathbf{x}) &= -y_i f_{t-1}(\mathbf{x}) -y_i \alpha_t G_t(\mathbf{x}) \\\\ \therefore \exp \big(-y_i f_t(\mathbf{x}) \big) &=\exp \big(-y_i f_{t-1}(\mathbf{x}) \big) \exp \big(-y_i \alpha_t G_t(\mathbf{x}) \big) \\\\ \therefore \bar{w}_{t+1,i} &= \bar{w}_{ti} \exp \big(-y_i \alpha_t G_t(\mathbf{x})\big) \end{aligned} \tag{1.19} ft(x)yift(x)exp(yift(x))wˉt+1,i=ft1(x)+αtGt(x)=yift1(x)yiαtGt(x)=exp(yift1(x))exp(yiαtGt(x))=wˉtiexp(yiαtGt(x))(1.19)

  这与 AdaBoost 算法的样本权值更新式(1.4),只相差规范化因子,因而等价。

  注意:标准的 AdaBoost 算法仅适用于二分类任务,但是其变种可适用于多分类和回归任务。在这里,不再进行详细介绍;后续进行详细了解后,再进行补充。

1.2.2 其他提升(Boosting)方法

  提升(Boosting)算法族中还有其他算法,例如 GBDT(Gradient Boosting Decision Tree,梯度提升树)、XGBoost(eXtreme Gradient Boosting)和 LightGBM 等。在这里,不再进行详细介绍;后续进行详细了解后,再进行补充。

  从偏差-方差分解的角度看,Boosting 主要关注降低偏差,因此 Boosting 能基于泛化性能相当弱的学习器构建出很强的集成。

1.3 Bagging 与随机森林

1.3.1 Bagging

  Bagging 是并行式集成学习方法最著名的代表。它采用 自助采样法(Bootstrap Sampling),给定包含 m m m 个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过 m m m 次随机采样操作,我们得到含 m m m 个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现。可以做一个简单的估计,样本在 m m m 次采样中始终不被采样到的概率是 ( 1 − 1 m ) m ​ \left(1-\frac{1}{m}\right)^m​ (1m1)m,取极限得到

lim ⁡ m → ∞ ( 1 − 1 m ) m → 1 e ≈ 36.8 % \lim_{m \rightarrow \infty} \left(1-\frac{1}{m}\right)^m \rightarrow \frac{1}{e} \approx 36.8\% mlim(1m1)me136.8%

即通过自助采样,初始数据集 D D D 中约有 63.2 % 63.2\% 63.2% 的样本出现在采样数据集中。

  照这样,我们可采样出 T T T 个含 m ​ m​ m 个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合,这就是 Bagging 的基本流程。在对预测输出进行结合时,Bagging 通常对分类任务使用 简单投票法,对回归任务使用 简单平均法。若分类预测时出现两个类收到同样的票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。Bagging 的基本框架图如图 1-3 所示:

机器学习系列 15:集成学习_第3张图片
图 1.3 Bagging 基本框架图

  值得一提的是,自助采样过程还给 Bagging 带来了另一个优点:由于每个基学习器只使用了初始训练集中约 63.2% 的样本,剩下约 36.8% 的样本,我们常常称之为包外样本,可以用来作为验证集来对泛化性能进行“包外估计”。

  事实上,包外样本还有许多其他用途,例如当基学习器是决策树时,可使用包外样本来辅助剪枝,或用于估计决策树中各结点的后验概率以辅助对零训练样本结点的处理;当基学习器是神经网络时,可使用包外样本来辅助早期停止以减小过拟合风险。

1.3.1.1 Bagging 的算法描述

输入:训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } D = \{(\mathbf{x}_1,y_1), (\mathbf{x}_2,y_2), \cdots, (\mathbf{x}_m,y_m)\} D={(x1,y1),(x2,y2),,(xm,ym)}

过程

  1. 学习基学习器。对于 t = 1 , 2 , ⋯   , T t = 1,2,\cdots,T t=1,2,,T(实际上, T T T 个基学习器的训练过程可以并行执行。)

    • 对样本集进行第 t t t 次自助采样,共进行 m m m 次采样操作,得到含 m m m 个样本的采样集 D t D_t Dt
    • 用采样集 D t D_t Dt 训练第 t t t 个基学习器 G t ( x ) ​ G_t(\mathbf{x})​ Gt(x)
  2. 对基学习器进行结合。

    如果是分类任务,使用简单投票法;如果是回归任务,使用简单平均法。

输出:最终的强学习器 f ( x ) ​ f(\mathbf{x})​ f(x)


  假定基学习器的计算复杂度为 O ( m ) O(m) O(m),则 Bagging 的复杂度大致为 T ( O ( m ) + O ( s ) ) T(O(m)+O(s)) T(O(m)+O(s)),考虑到采样与投票/平均过程的复杂度 O ( s ) O(s) O(s) 很小,而 T T T 通常是一个不太大的常数,因此,训练一个 Bagging 集成与直接使用基学习算法训练一个学习器的复杂度同阶,这说明 Bagging 是一个很高效的集成学习算法。Bagging 可以用于二分类、多分类和回归等任务

  从偏差-方差分解的角度看,Bagging 主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。

1.3.2 随机森林

  随机森林(Random Forest,简称 RF)是 Bagging 的一个扩展变体。RF 在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有 d ​ d​ d 个属性)中选择一个最优属性;而在 RF 中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含 k ​ k​ k 个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数 k ​ k​ k 控制了随机性的引入程度:若令 k = d ​ k=d​ k=d,则基决策树的构建与传统决策树相同;若令 k = 1 ​ k=1​ k=1,则是随机选择一个属性用于划分;一般情况下,推荐值 k = log ⁡ 2 d ​ k=\log_2 d​ k=log2d

  随机森林简单、容易实现、计算开销小,令人惊奇的是,它在很多现实任务中展现出强大的性能,被誉为“代表继承学习技术水平的方法”。可以看出,随机森林对 Bagging 只做了小改动,但是与 Bagging 中基学习器的“多样性”仅来自样本扰动(通过对初始训练集采样)不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。

  因为随机森林引入了属性扰动,所以随机森林中个体学习器的性能往往有所降低。然而,随着个体学习器数目的增加,随机森林通常会收敛到比 Bagging 更低的泛化误差。值得一提的是,随机森林的训练效率常优于 Bagging,因为在个体决策树的构建过程中,Bagging 使用的是“确定型”决策树,在选择划分属性时要对结点的所有属性进行考察,而随机森林使用的“随机型”决策树则只考察一个属性子集。

  由于 RF 在实际应用中的良好特性,基于 RF 出现了很多变种算法。不仅可以用于分类和回归任务,还可以用于特征转换、异常点检测等。

1.4 结合策略

  假定集成包含 T ​ T​ T 个基学习器 { G 1 , G 2 , ⋯   , G T } ​ \{ G_1,G_2,\cdots,G_T \}​ {G1,G2,,GT},其中 G i ​ G_i​ Gi 在示例 x ​ \mathbf{x}​ x 上的输出为 G i ( x ) ​ G_i(\mathbf{x})​ Gi(x)。本节介绍几种对 G i ​ G_i​ Gi 进行结合的常见策略。

1.4.1 平均法

  对数值型输出 G i ( x ∈ R ) ​ G_i(\mathbf{x} \in \mathbb{R})​ Gi(xR),最常见的结合策略是使用平均法(averaging)。

  • 简单平均法(simple averaging)
    f ( x ) = 1 T ∑ i = 1 T G i ( x ) f(\mathbf{x}) = \frac{1}{T} \sum_{i=1}^{T} G_i(\mathbf{x}) f(x)=T1i=1TGi(x)

  • 加权平均法(weighted averaging)
    f ( x ) = ∑ i = 1 T w i G i ( x ) f(\mathbf{x}) = \sum_{i=1}^{T} w_i G_i(\mathbf{x}) f(x)=i=1TwiGi(x)
    其中 w i ​ w_i​ wi 是个体学习器 G i ​ G_i​ Gi 的权重,通常要求 w i ≥ 0 ​ w_i \geq 0​ wi0 ∑ i = 1 T w i = 1 ​ \sum_{i=1}^{T} w_i = 1​ i=1Twi=1

  显然,简单平均法是加权平均法的特例(令 w i = 1 T ​ w_i = \frac{1}{T}​ wi=T1)。加权平均法的权重一般是从训练数据中学习而得,现实任务中的训练样本通常不充分或存在噪声,这将使得学出的权重不完全可靠。尤其对规模比较大的集成来说,要学习的权重比较多,较容易导致过拟合。因此,实验和应用均显示出,加权平均法未必一定优于简单平均法。一般而言,在个体学习器性能相差较大时宜使用加权平均法,而在个体学习器性能相近时宜使用简单平均法。

1.4.2 投票法

  对分类任务来说,个体学习器 G i ​ G_i​ Gi 将从类别标记集合 { c 1 , c 2 , ⋯   , c N } ​ \{ c_1,c_2,\cdots,c_N \}​ {c1,c2,,cN} 中预测出一个标记,最常见的结合策略是使用投票法。

  • 绝对多数投票法(majority voting)

      即若某标记得票过半数,则预测为该标记;否则拒绝预测。

  • 相对多数投票法(plurality voting)

      即预测为得票最多的标记,若同时有多个标记获得最高票,则从中随机选取一个。

  • 加权投票法(weighted voting)

      和加权平均法一样,每个个体学习器的分类结果乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

  在分类任务中,不同类型的个体学习器可能产生不同类型的值,有些输出为类标记,例如 G i ( x ) ∈ { 0 , 1 } ​ G_i(\mathbf{x}) \in \{0,1\}​ Gi(x){0,1} ;有些输出为类概率,例如 G i ( x ) ∈ [ 0 , 1 ] ​ G_i(\mathbf{x}) \in [0,1]​ Gi(x)[0,1]。不同类型的值不能混用。对一些能在预测出类别标记的同时产生分类置信度的学习器,其分类置信度可转化为类概率使用。若此类值未进行规范化,例如支持向量机的分类间隔值,则必须使用一些技术如 Platt 缩放、等分回归等进行“校准”后才能作为类概率使用。有趣的是,虽然分类器估计出的类概率值一般都不太准确,但基于类概率进行结合却往往比直接基于类标记进行结合性能更好。需注意的是,若基学习器的类型不同,则其类概率值不能直接进行比较;在此种情况下,通常可将类概率值输出转化为类别标记输出然后再投票。

1.4.3 学习法

  当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合,代表算法是 Stacking。这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)。实际上 Stacking 本身是一种著名的集成学习方法。

  Stacking 先从初始数据集训练出初级学习器,然后生成一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。

参考:

[1] 周志华《机器学习》
[2] 李航《统计学习方法》
[3] 集成学习原理小结
[4] 集成学习之Adaboost算法原理小结
[5] Bagging与随机森林算法原理小结

你可能感兴趣的:(01_机器学习,机器学习系列)