集成学习(Ensemble Learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifier system)、基于委员会的学习(committee-based learning)等。
根据个体学习器的生成方式,目前的集成学习方法大致分成两大类:
- 个体学习器间存在强依赖关系、必须串行生成的序列化方法,代表算法为:Boosting
- 个体学习器间不存在强依赖关系、可同时生成的并行化方法,代表方法为:Bagging
集成学习一般可分为以下三个步骤:
- 找到误差互相独立的基分类器
- 训练基分类器
- 合并基分类器的结果
合并基分类器的方法有 voting 和 stacking 两种
- voting 是用投票的方式,将获得最多选票的结果作为最终的结果
- 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)=sign∣f(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。
算法的主要步骤如下:
-
确定基分类器:这里选取 ID3 决策树作为基分类器,其实,任何分类模型都可以作为基分类器,但树形模型由于结构简单且较容易产生随机性所以比较常用。
-
训练基分类器:假设数据集 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=Nt∑i=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