集成学习
- 集成学习(ensemble learning)是通过构建并结合多个学习器来完成学习任务。其一般结构为:
-
先产生一组个体学习器(individual learner) 。个体学习器通常由一种或者多种现有的学习算法从训练数据中产生。
-
如果个体学习器都是从某一种学习算法从训练数据中产生,则称这样的集成学习是同质的(homogenerous)。
此时的个体学习器也称作基学习器(base learner),相应的学习算法称作基学习算法(base learning algoruthm)。
-
如果个体学习器是从某几种学习算法从训练数据中产生,则称这样的集成学习是异质的(heterogenous)。
异质集成中的个体学习器由不同的学习算法组成,这时就不再有基学习算法;相应的,个体学习器一般不称为基学习器,常称为组件学习器(component learner)或直接称为个体学习器。
-
-
再使用某种策略将它们结合起来。集成学习通过将多个学习器进行组合,通常可以获得比单一学习器显著优越的泛化性能。
- 通常选取个体学习器的准则是:
- 个体学习器要有一定的准确性,预测能力不能太差。
- 个体学习器之间要有多样性,即学习器之间要有差异。
-
通常基于实际考虑,往往使用预测能力较强的个体学习器(即强学习器,与之对应的为弱学习器)。
强学习器的一个显著的好处就是可以使用较少数量的个体学习器来集成就可以获得很好的效果。
-
根据个体学习器的生成方式,目前的集成学习方法大概可以分作两类:
- 个体学习器之间存在强依赖关系、必须串行生成的序列化方法,每一轮迭代产生一个个体学习器。其中以Boosting为代表。
- 个体学习器之间不存在强依赖关系、可同时生成的并行化方法。其中以Bagging和随机森林Random Forest为代表。
一、集成学习误差
-
考虑一个二分类问题 y ∈ { − 1 , + 1 } y\in\left \{-1,+1 \right \} y∈{ −1,+1}和真实函数 f f f,假定基分类器的错误率为 ε \varepsilon ε,即对每个基分类器 h i h_i hi有
(1) P ( h i ( x ) ≠ f ( x ) ) = ε P(h_i(\mathbf x)\neq f(\mathbf x))=\varepsilon\tag{1} P(hi(x)̸=f(x))=ε(1)-
假设集成学习通过简单投票法结合 T T T个基分类器,若有超过半数的基分类器正确,则集成分类就正确。根据描述,给出集成学习器为:
(2) H ( x ) = s i g n ( ∑ i = 1 T h i ( x ) ) H(\mathbf x)=sign\left (\sum_{i=1}^{T}h_i(\mathbf x) \right )\tag{2} H(x)=sign(i=1∑Thi(x))(2) -
假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误率为:
(3) P ( H ( x ) ≠ f ( x ) ) = ∑ k = 0 ⌊ T / 2 ⌋ T C k ( 1 − ε ) k ε T − k ⩽ e x p ( − 1 2 T ( 1 − 2 ε ) 2 ) P(H(\mathbf x)\neq f(\mathbf x))=\sum_{k=0}^{\left \lfloor T/2 \right \rfloor} {^{T}\textrm{C}_k}(1-\varepsilon)^k\varepsilon^{T-k}\\ \leqslant exp(-\frac{1}{2}T(1-2\varepsilon)^2)\tag{3} P(H(x)̸=f(x))=k=0∑⌊T/2⌋TCk(1−ε)kεT−k⩽exp(−21T(1−2ε)2)(3)
上式显示出,随着继承中个体分类器数目T的增大,集成的错误率将指数级下降,最终趋向于零。⌊ ⌋ \left \lfloor\ \ \right \rfloor ⌊ ⌋:floor函数,向下取整。
-
-
上面的分析有一个关键假设:基学习器的误差相互独立。
-
实际上个体学习器是为了解决同一个问题训练出来的,而且可能是同一类算法从同一个训练集中产生。
这样个体学习器的错误率显然不能相互独立。
-
实际上个体学习器的准确性和多样性本身就存在冲突。
- 通常个体学习器的准确性很高之后,要增加多样性就需要牺牲准确性。
- 实际上如何产生并结合”好而不同“的个体学习器就是集成学习研究的核心。
-
-
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类。
- 个体学习器间存在强依赖关系,必须串行生成的序列化方法,代表是Boosting。
- 个体学习器间不存在强依赖关系,可同时生成的并行化方法,代表是Bagging和随机森林(Random Forest)。
假设硬币正面朝上的概率为 p p p,反面朝上的概率为 1 − p 1-p 1−p。令 H ( n ) H(n) H(n)代表抛 n n n次硬币所得正面朝上的次数,则最多 k k k次正面朝上的概率为(二项分布):
P ( H ( n ) ⩽ k ) = ∑ i = 1 k n C i p i ( 1 − p ) 1 − i P(H(n)\leqslant k)=\sum_{i=1}^{k}{^{n}\textrm{C}_i}p^i(1-p)^{1-i} P(H(n)⩽k)=i=1∑knCipi(1−p)1−i
对 δ > 0 \delta>0 δ>0, k = ( p − δ ) n k=(p-\delta)n k=(p−δ)n有Hoeffding不等式:
P ( H ( n ) ⩽ ( p − δ ) n ) ⩽ e − 2 δ 2 n P(H(n)\leqslant (p-\delta)n)\leqslant e^{-2\delta^2n} P(H(n)⩽(p−δ)n)⩽e−2δ2n
式(3)推导过程:由基分类器相互独立,设 X X X为 T T T个基分类器分类正确的次数,则该实验服从二项分布 X ∼ B ( T , 1 − ϵ ) → ( n , p ) X\sim B(T,1-\epsilon)→(n,p) X∼B(T,1−ϵ)→(n,p)
P ( H ( x ) ≠ f ( x ) ) = P ( X ⩽ ⌊ T / 2 ⌋ ) ⩽ P ( X ⩽ 1 2 ) P(H(\mathbf x)\neq f(\mathbf x))=P(X\leqslant\left \lfloor T/2 \right \rfloor) \leqslant P(X\leqslant \frac{1}{2}) P(H(x)̸=f(x))=P(X⩽⌊T/2⌋)⩽P(X⩽21)
此处与Hoeffding不等时中对应关系为: X → H ( n ) X→H(n) X→H(n), T 2 → k \frac{T}{2}→k 2T→k, 1 − ϵ → p 1-\epsilon→p 1−ϵ→p, T → n T→n T→n带入 k = ( p − δ ) n ) k=(p-\delta)n) k=(p−δ)n),有 T 2 = ( 1 − ϵ − δ ) T \frac{T}{2}=(1-\epsilon-\delta)T 2T=(1−ϵ−δ)T,得到 δ = 1 − 2 ϵ 2 \delta=\frac{1-2\epsilon}{2} δ=21−2ϵ,由此得到式(8.3)。
二、Boosting
-
提升方法(boosting) 是一种常用的统计学习方法。在分类问题中,它通过改变训练样本的权重学习多个分类器,并将这些分类器们进行线性组合来提高分类的能力。
-
提升方法的基本思想是:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断,要比其中任何一个专家单独的判断要好。类似于”三个臭皮匠顶一个诸葛亮“。
-
提升方法的理论基础是:强可学习与弱可学习是等价的。
在概率近似正确(probably approximately correct,PAC)学习的框架下:
- 强可学习:一个概念(或一个类别),若存在一个多项式的学习算法能够学习它并且正确率很高,那么称这个概念是强可学习的。
- 弱可学习:一个概念(或一个类别),若存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么称这个概念是弱可学习的。
可以证明:强可学习与弱可学习是等价的。
即:若在学习中发现了 ”弱学习算法“ ,则可以通过某些办法将它提升为 ”强学习算法“。
-
对于分类问题而言,求一个比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)要容易得多。
-
Boosting就是一族可以将弱学习器提升为强学习器的算法。
这族算法的工作原理类似:
- 先从初始训练集训练出一个基学习器。
- 再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注。
- 然后基于调整后的样本分布来训练下一个基学习器。
- 如此重复,直到基学习器数量达到事先指定的值T。
- 最终将这T个基学习器进行加权组合。
2.1 AdaBoost算法
-
Boosting族算法最著名的代表是AdaBoost算法。
-
AdaBoot算法两个核心步骤:
-
每一轮中如何改变训练数据的权值?
AdaBoost算法提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
于是那些没有得到正确分类的数据由于权值的加大而受到后一轮的弱分类器的更大关注。
-
最后如何将一系列弱分类器组合成一个强分类器?
AdaBoost采用加权多数表决的方法:
- 加大分类误差率较小的弱分类器的权值,使得它在表决中起较大作用。
- 减小分类误差率较大的弱分类器的权值,使得它在表决中起较小的作用。
-
-
AdaBoost算法有两个特点:
-
不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同作用。
- 因此AdaBoost要求基本学习器能够对特定的数据分布进行学习,这可通过重赋权法(re-weighting)实施,即在训练的 每一轮中,根据样本分布为每个训练样本重新赋予一个权重。
- 对于无法接受带权样本的基本学习算法,则可以通过重采样法(re-sampling)来处理:即在每一轮学习中,根据样本分布对训练集重新采样,再用重采样的样本集对基本学习器进行训练。
- 一般而言这两者没有显著的优劣差别。
-
利用基本分类器的线性组合 f ( x ) = ∑ t = 1 T α t h t ( x ) f(\mathbf x)=\sum_{t=1}^{T}\alpha_th_t(\mathbf x) f(x)=∑t=1Tαtht(x)构成最终分类器:
H ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ t = 1 T α t h t ( x ) ) H(\mathbf x)=sign(f(\mathbf x))=sign \left (\sum_{t=1}^{T}\alpha_th_t(\mathbf x)\right) H(x)=sign(f(x))=sign(t=1∑Tαtht(x))
其中:- f ( x ) f(\mathbf x) f(x)的符号决定实例 x \mathbf x x的分类。
- f ( x ) f(\mathbf x) f(x)的绝对值表示分类的确信度。
-
-
从偏差-方差角度看,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成。
-
AdaBoost算法具有自适应性,即它能够自动适应弱分类器各自的训练误差率,这也是它的名字(适应的提升)的由来。
-
AdaBoost算法的描述如图,其中 y i ∈ { − 1 , + 1 } y_i\in\left \{-1,+1 \right \} yi∈{ −1,+1}, f f f是真实函数。
2.2 AdaBoost算法
-
AdaBoost算法有多重推导方式,比较容易理解的是基于加性模型(additive model),即基学习器的线性组合:
(4) H ( x ) = ∑ t = 1 T α t h t ( x ) H(\mathbf x)=\sum_{t=1}^{T}\alpha_th_t(\mathbf x) \tag{4} H(x)=t=1∑Tαtht(x)(4)
来最小化指数损失函数(exponential loss function):
(5) l e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] l_{exp}(H|\mathcal D)=\mathbb E_{\mathbf x\sim\mathcal D}\left [e^{-f(\mathbf x)H(\mathbf x)}\right ]\tag{5} lexp(H∣D)=Ex∼D[e−f(x)H(x)](5) -
若 H ( x ) H(\mathbf x) H(x)能令指数损失函数最小化,则考虑式(5)对 H ( x ) H(\mathbf x) H(x)的偏导:
(6) ∂ l e x p ( H ∣ D ) ∂ H ( D ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) \frac{\partial l_{exp}(H|\mathcal D)}{\partial H(\mathcal D)}=-e^{-H(\mathbf x)}P(f(\mathbf x)=1|\mathbf x)+e^{H(\mathbf x)}P(f(\mathbf x)=-1|\mathbf x)\tag{6} ∂H(D)∂lexp(H∣D)=−e−H(x)P(f(x)=1∣x)+eH(x)P(f(x)=−1∣x)(6)
令式(6)为零可解得:
(7) H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(\mathbf x)=\frac{1}{2}ln\frac{P(f(\mathbf x)=1|\mathbf x)}{P(f(\mathbf x)=-1|\mathbf x)}\tag{7} H(x)=21lnP(f(x)=−1∣x)P(f(x)=1∣x)(7)
因此,有:
(8) s i g n ( H ( x ) ) = s i g n ( 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) ) = { 1 , P ( f ( x ) = 1 ∣ x ) > P ( f ( x ) = − 1 ∣ x ) − 1 , P ( f ( x ) = 1 ∣ x ) < P ( f ( x ) = − 1 ∣ x ) = a r g m a x y ∈ { − 1 , + 1 } P ( f ( x ) = y ∣ x ) sign(H(\mathbf x))=sign(\frac{1}{2}ln\frac{P(f(\mathbf x)=1|\mathbf x)}{P(f(\mathbf x)=-1|\mathbf x)})\\ =\left\{\begin{matrix} 1,\ \ \ \ P(f(\mathbf x)=1|\mathbf x)>P(f(\mathbf x)=-1|\mathbf x)\\ -1,\ \ \ \ P(f(\mathbf x)=1|\mathbf x)<P(f(\mathbf x)=-1|\mathbf x) \end{matrix}\right.\\ =\underset{y_\in\left \{-1,+1 \right \}}{arg\ max}P(f(\mathbf x)=y|\mathbf x)\tag{8} sign(H(x))=sign(21lnP(f(x)=−1∣x)P(f(x)=1∣x))={ 1, P(f(x)=1∣x)>P(f(x)=−1∣x)−1, P(f(x)=1∣x)<P(f(x)=−1∣x)=y∈{ −1,+1}arg maxP(f(x)=