1. 集成学习概述
集成学习:对于训练集数据,我们通过训练若干个个体学习器,通过一定的结合策略,就可以最终形成一个强学习器,以达到博采众长的目的。
集成学习需要解决的两个问题:
- 如何得到若干个个体学习器
- 如何选择一种结合策略,将这些个体学习器集合成一个强学习器
2. 集成学习的个体学习器
集成学习的第一个问题就是如何得到若干个个体学习器。这里我们有两种选择:
第一种就是所有的个体学习器都是一个种类的,或者说是同质的;比如都是决策树个体学习器,或者都是神经网络个体学习器。
第二种是所有的个体学习器不全是一个种类的,比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
目前来说,同质个体学习器的应用是最广泛的,一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类:
(1)第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法。
(2)第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。
3. boosting
如下图所示,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学习器1,根据弱学习的学习误差率的表现来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视。然后基于调整权重后的训练集来训练弱学习器2.,如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器。
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。
4. bagging
Bagging的算法原理和 boosting不同,它的弱学习器之间没有依赖关系,可以并行生成,如下图所示:
bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
bagging随机采样采用的是自助采样法(Bootstrap sampling);即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。
5. 结合策略
假定得到的T个弱学习器是 h 1 , h 2 , . . . h T {h_1,h_2,...h_T} h1,h2,...hT
5.1 平均法
对于数值类的回归预测问题,通常使用的结合策略是平均法,也就是说,对于若干个弱学习器的输出进行平均得到最终的预测输出。
最简单的平均是算术平均,也就是说最终预测是
H
(
x
)
=
1
T
∑
1
T
h
i
(
x
)
H(x)=\frac{1}{T}\sum_{1}^{T}h_i(x)
H(x)=T11∑Thi(x)
如果每个个体学习器有一个权重w,则最终预测是
H
(
x
)
=
1
T
∑
i
=
1
T
w
i
h
i
(
x
)
H(x)=\frac{1}{T}\sum_{i=1}^{T}w_ih_i(x)
H(x)=T1i=1∑Twihi(x)
其中
w
i
w_i
wi是个体学习器
h
i
h_i
hi的权重,通常各个权重之和为1
5.2 投票法
对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是 c 1 , c 2 , . . . c K {c_1,c_2,...c_K} c1,c2,...cK,对于任意一个预测样本 x x x,我们的T个弱学习器的预测结果分别是 ( h 1 ( x ) , h 2 ( x ) . . . h T ( x ) ) (h_1(x),h_2(x)...h_T(x)) (h1(x),h2(x)...hT(x))。
最简单的投票法是相对多数投票法,也就是T个弱学习器的对样本x的预测结果中,数量最多的类别ci为最终的分类类别。如果不止一个类别获得最高票,则随机选择一个做最终类别。
另一种就是绝对多数投票法,也就是我们常说的要票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
还有就是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
5.3学习法
对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
6. bagging和boosting的区别
1)样本选择上
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
(2)样例权重
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大
(3)预测函数
Bagging:所有预测函数的权重相等
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重
(4)并行计算
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果
总结
集成学习就是将多个弱学习器集成一个强学习器的过程,弱学习器可以是同质的也可以是异质的,建模可以分为串行生成(boosting)和并行生成(bagging),最后集成策略可以是进行平均(回归任务)和投票(分类),更好一点的是将弱学习器的结果再次进行学习训练的出结果。
集成学习大致可分为两大类:Bagging和Boosting;
Bagging其个体学习器之间不存在强依赖关系,容易并行。Boosting则使用弱分类器,其个体学习器之间存在强依赖关系,是一种序列化方法。Bagging主要关注降低方差,而Boosting主要关注降低偏差。Boosting是一族算法,其主要目标为将弱学习器“提升”为强学习器,大部分Boosting算法都是根据前一个学习器的训练效果对样本分布进行调整,再根据新的样本分布训练下一个学习器,如此迭代M次,最后将一系列弱学习器组合成一个强学习器。而这些Boosting算法的不同点则主要体现在每轮样本分布的调整方式上
- Bagging + 决策树 = 随机森林
- AdaBoost + 决策树 = 提升树
- Gradient Boosting + 决策树 = GBDT