\quad \quad 集成学习通过构建并结合多个学习器(称为基学习器)来完成学习任务,有时也被称为多学习器系统、基于委员会的学习等。集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。
\quad \quad 集成学习是一大类模型融合策略和方法的统称,其中包含多种集成学习的思想。不仅在学界的研究热度不减,在业界和众多学习竞赛中也有非常成功的应用。例如在Kaggle竞赛中所向披靡的XGBoost,就是成功应用集成学习思想的一个例子。另外,集成学习(Ensemble learning)可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。
\quad \quad 对于训练集数据,我们通过训练若干个个体学习器(基学习器),通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。因此,集成学习主要有以下两个问题
Q1:如何获得若干个个体学习器?
Q2:采用什么样的结合策略?
\quad \quad 集成学习一般可以分为以下3个步骤:
(1)找到误差互相独立的基学习器。
(2)训练基学习器。
(3)合并基学习器的结果。
这里也涉及到三个问题
(1)选择什么算法训练个体学习器?
\quad \quad 通常选择一个现有的学习算法训练产生个体学习器,例如决策树、神经网络
(2)不同的基学习器用同样的算法吗?
\quad \quad 可以用相同的算法,这样的集成是“同质”的,我们可以管“同质”的集成里的个体学习器叫基学习器;也可以用不同的算法,这样的集成是“异质”的,我们可以管“异质”的集成里的个体学习器叫组件学习器
1、同质学习器(常用)
比如都是决策树个体学习器,或者都是神经网络个体学习器。
强依赖同质学习器
个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法,Boosting主要关注降低偏差,因此Boosting能基于泛化性能相当弱的学习器构建出很强的集成;
无依赖同质学习器
个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林系列算法,Bagging主要关注降低方差,因此它在不剪枝的决策树、神经网络等学习器上效用更为明显。
2、异质学习器
比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
(3)什么样的个体学习器更好?
\quad \quad 个体学习器必须有一定的“准确性”;一定的“多样性”,简单的说就是“好而不同”。
\quad \quad 最常用的基分类器是决策树,主要有以下3方面的原因:
(1)决策树可以较为方便地将样本的权重整合到训练样本中,而不需要使用采样的方法来调整样本权重。
(2)决策树的表达能力和泛化能力,可以通过调节树的层数来做折中。
(3)数据样本的扰动对于决策树的影响较大,因此不同子样本集合生成的决策树基分类器随机性较大,这样的"不稳定学习器“更适合作为基分类器。此外,在决策树节点分裂的时候,随机地选择一个特征子集,从中找出最优分裂属性,很好地引入了随机性。
\quad \quad 除了决策树外,神经网络模型也适合作为基分类器,主要由于神经网络模型也比较”不稳定“,而且还可以通过调整神经元数量、连接方式、网络层数、初始权重等方式引入随机性。
\quad \quad 对于基分类器最终的结合策略常见的方法有如下几种:
平均法
对于数值型输出,最常见的结合策略即为平均法:
投票法:类别标记输出
对于分类任务来说,学习器将从类别集合中预测出一个标记,最常见的结合策略是投票法。
学习法
\quad \quad 当训练数据很多时,一种更为强大的结合策略是是使用学习法,即通过另一个学习器来对所有基学习器产生结果的结合方法进行学习,这时候个体学习器称为初级学习器,用于结合的学习器成为次级学习器或元学习器。
\quad \quad 对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
\quad \quad 根据个体学习器的生成方式,目前的集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林。
\quad \quad 集成学习是一个大家族,学习的方式有Boosting,Bagging等,每个家族分别有很多不同的实现,他们的不同主要在于生成学习器方式。
\quad \quad Boosting方法训练基学习器时采用串行的方式,各个基学习器之间有依赖。
学习机制:
Q1:如何计算第k个弱分类器在训练集上的学习误差率 e k e_k ek
Q2:如何由学习误差率 e k e_k ek 更新第k个弱分类器的权重系数 α k α_k αk
Q3:如何更新训练集上的样本权重D
Q4:使用何种结合策略
原理:
\quad \quad Boosting,是集成学习算法的一种,核心思想就是:1)基学习器之间存在强依赖关系,每一个基分类器是在前一个基分类器的基础之上生成;2)将所有基学习器结果进行线性加权求和,作为最终结果输出。所以boosting算法,是一个加法模型,再对加法模型进行优化。
\quad \quad 总的来说,提升方法使用加法模型和前向分步算法。
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) (1.1) f\left(x\right)=\sum_{m=1}^M\beta_m b\left(x;\gamma_m\right) \tag{1.1} f(x)=m=1∑Mβmb(x;γm)(1.1)
其中, b ( x ; γ m ) b\left(x;\gamma_m\right) b(x;γm)为基函数, γ m \gamma_m γm为基函数的参数, β m \beta_m βm为基函数的系数。
在给定训练数据 { ( x i , y i ) } i = 1 N \{\left(x_i,y_i\right)\}_{i=1}^N { (xi,yi)}i=1N及损失函数 L ( y , f ( x ) ) L\left(y,f\left(x\right)\right) L(y,f(x))的条件下,学习加法模型 f ( x ) f\left(x\right) f(x)成为经验风险极小化问题:
min β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) (1.2) \min_{\beta_m,\gamma_m}\sum_{i=1}^N L\left(y_i,\sum_{m=1}^M\beta_m b\left(x_i;\gamma_m\right)\right)\tag{1.2} βm,γmmini=1∑NL(yi,m=1∑Mβmb(xi;γm))(1.2)
前向分步算法求解这一优化问题的思路:因为学习的是加法模型,可以从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(1.2),则可以简化优化复杂度。具体地,每步只需优化如下损失函数:
min β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) (1.3) \min_{\beta,\gamma}\sum_{i=1}^N L\left(y_i,\beta b\left(x_i;\gamma\right)\right)\tag{1.3} β,γmini=1∑NL(yi,βb(xi;γ))(1.3)
是专门针对加法模型的优化方法。
算法1.1 前向分步算法
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } T=\{\left(x_1,y_1\right),\left(x_2,y_2\right),\dots,\left(x_N,y_N\right)\} T={ (x1,y1),(x2,y2),…,(xN,yN)}; 损失函数 L ( y , f ( x ) ) L\left(y,f\left(x\right)\right) L(y,f(x));基函数集合 { b ( x ; γ ) } \{b\left(x;\gamma\right)\} { b(x;γ)};
输出:加法模型 f ( x ) f\left(x\right) f(x)
(1)初始化 f 0 ( x ) = 0 f_0\left(x\right)=0 f0(x)=0
(2)对 m = 1 , 2 , … , M m=1,2,\dots,M m=1,2,…,M
(a)极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (1.4) \left(\beta_m,\gamma_m\right)=\mathop{\arg\min}_{\beta,\gamma} \sum_{i=1}^N L\left(y_i, f_{m-1}\left(x_i\right)+\beta b\left(x_i;\gamma\right)\right) \tag{1.4} (βm,γm)=argminβ,γi=1∑NL(yi,fm−1(xi)+βb(xi;γ))(1.4)
得到参数 β m \beta_m βm, γ m \gamma_m γm
(b)更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) (1.5) f_m\left(x\right)=f_{m-1}\left(x\right)+\beta_m b\left(x;\gamma_m\right) \tag{1.5} fm(x)=fm−1(x)+βmb(x;γm)(1.5)
(3)得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) (1.6) f\left(x\right)=f_M\left(x\right)=\sum_{m=1}^M\beta_m b\left(x;\gamma_m\right) \tag{1.6} f(x)=fM(x)=m=1∑Mβmb(x;γm)(1.6)
前向分步算法将同时求解从 m = 1 m=1 m=1到 M M M所有参数 β m , γ m \beta_m,\gamma_m βm,γm的优化问题简化为逐次求解各个 β m , γ m \beta_m, \gamma_m βm,γm的优化问题。
见本文
见此文
见本文
见此文
总结:
\quad \quad Boosting是一族可将弱学习器提升为强学习器的算法。Boosting算法是对特点的数据分布进行学习,可以通过“重赋值法”或者“重采样法”来处理。Boosting算法关注降低偏差,可以基于泛化能力相当弱的学习器构建出很强的集成
\quad \quad Bagging与Boosting的串行训练不同,Bagging方法在训练过程中,各基学习器之间无强依赖,可以进行并行训练。
学习机制:
\quad \quad 对原始数据自助采样,产生T个不同的子集,分别学习生成T个基学习器,再将这些基学习器结合。在对预测输出进行结合时,Bagging通常对分类任务使用简单投票法,对回归任务使用简单平均法。
算法的伪代码如下:
\quad \quad 从偏差-方差分解的角度看,降低一个估计的方差的方式是把多个估计平均起来,所以Bagging主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。同时,Bagging并不能减小模型的偏差,所以应尽量选择偏差较小的基分类器,如未剪枝的决策树。
特点:
\quad \quad 基于决策树基分类器的随机森林(Random Forest,简称RF)
参考资料:
1、《西瓜书》
2、https://www.cnblogs.com/pinard/p/6131423.html