集成学习——概述
文章目录
一、概述
监督学习算法通常被描述为执行搜索假设空间的任务以找到合适的假设,该假设将对特定问题做出良好预测。即使假设空间包含非常适合特定问题的假设,也可能很难找到一个很好的假设。集成学习结合多个假设,形成一个(希望)更好的假设。
集成学习本身是一种监督学习算法,因为它可以被训练然后用于进行预测。因此,训练后的集成模型代表了一个假设,但这个假设不一定被包含在构建它的模型的假设空间内。因此,可以证明集成学习在它们可以表示的功能方面具有更大的灵活性。理论上,这种灵活性使他们能够比单一模型更多地过拟合训练数据,但在实践中,一些集成算法(如Bagging)倾向于减少对训练数据过拟合相关的问题。
评估集成学习的预测通常需要比评估单个模型的预测更多的计算,因此集成可以被认为是通过执行大量额外计算来补偿差的学习算法的方式。诸如决策树之类的快速算法通常用于集合方法(如随机森林),尽管较慢的算法也可以从集成方法中受益。
通过类比,集成技术也已用于无监督学习场景中,如共识聚类或异常检测。
二、发展历史
- 1979年,Dasarathy 提出集成系统(ensemble system)的思想,并使用线性分类器和最近邻居(NN)分类器组成的复合系统作为其组成部分的例子来说明这些概念。同年,Bootstrap由 Bradley Efron发表在他的论文"Bootstrap methods: another look at the jackknife"中。因其通用性和简便性,bootstrapping在各种机器学习算法中具有很强的实用性。
- 1988年Kearns和1989年Valiant分别提出的弱学习的概念,引发了关于“能否用一组弱学习器创造一个强学习器”这一问题的讨论。1990年Schapire对这一问题给出了肯定的回答,并开发出boosting。并在几年之后和Freund提出了AdaBoost,该算法被广泛使用,他们还凭借Adaboost获得了计算机领域富有盛名的哥德尔奖。
- 1990年,Hansen提出了几种提高神经网络在分类任务上的性能和训练的方法,并使用交叉验证优化网络参数和体系结构。他证明了集成系统的方差缩减(variance reduction)性质,而这可以提升神经网络的表现。
- 堆叠泛化由Wolpert在1992年首次提出,堆叠通常能获得比任何单个的训练模型更好的性能。
- 1995年,Tin Kam Ho 提出了集成学习中最广为人知的算法——随机决策森林,并在几年后由Leo Breiman将随机森林方法进行系统的阐述,随机森林方法正式成为数据挖掘分类算法的重要组成部分。
- 1996年,Breiman 开发出 Bagging 预测器,并对其原理和训练进行了详细描述。他提出回归和分类的一个关键问题是预测方法的不稳定性——如果扰乱训练集,那么可能会导致构建的预测变量发生重大变化,而Bagging 可以提高准确性。
- 2010年,Kalal等人提出P-N学习。他们证明通过处理结构化的未标记数据可以显着提高二元分类器的性能,并提出了一种新的范例,用于从标记和未标记的例子中训练一个二元分类器,称之为P-N学习。他们还在学习中用Bootstrapping提升分类器的性能。其他的近期研究有使用堆叠方式构建深度网络结构,XGBoost的提出等。
三、集成学习分类
集成学习通过构建多个分类器(弱分类器),使用多种兼容的学习算法/模型来执行单个任务,用某种策略将多个结果集成起来,作为最终结果。其中每个弱分类器具备一定的“准确性”,分类器之间具备“差异性”。
集成学习的理论依据:最简单的voting方法。假设所有的弱分类器的错误率为
e
e
e。则得出
T
T
T个分类器得到的结果的错误率类似于二项分布中正确大于
T
2
\frac{T}{2}
2T的概率的和,小于
e
e
e;且随着
T
T
T的增加,错误率指数级下降,趋近于0。
集成学习的目的是为了得到更佳的预测表现。集成学习的主要方法可归类为三大类:Stacking(用于提升预测结果)、Boosting(用于减少偏差)和Bootstrap aggregating(用于减少方差)。
集成学习方法也可以归为如下两大类:
- 串行集成方法,这种方法串行地生成基础模型(如AdaBoost)。串行集成的基本动机是利用基础模型之间的依赖。通过给错分样本一个较大的权重来提升性能。
- 并行集成方法,这种方法并行地生成基础模型(如Random Forest)。并行集成的基本动机是利用基础模型的独立性,因为通过平均能够较大地降低误差。
在这些集成技术中最流行的方法包括随机森林、梯度提升、AdaBoost、梯度提升决策树(GBDT)和 XGBoost。
3.1 Bootstrap aggregating
Bootstrap aggregating,简称为Bagging。Bagging的弱学习器之间没有依赖关系,可以并行生成。
Bagging的个体弱学习器的训练集是通过随机采样得到的。通过 T T T次的随机采样得到 T T T个采样集。对于这 T T T个采样集,分别独立的训练出 T T T个弱学习器,再通过集合策略来得到最终的强学习器。
Bagging算法的工作机制:
- For t = 1 , 2 , … , T t = 1, 2, …, T t=1,2,…,T Do
- 从数据集 S S S中取样(放回选样)
- 训练得到模型 H t H_t Ht
- 对未知样本 X X X分类时,每个模型 H t H_t Ht都得出一个分类,得票最高的即为未知样本 X X X的分类
对于随机采样,一般采用自助采样法(Bootstap sampling),即对于 m m m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集 m m m次,最终可以得到 m m m个样本的采样集。由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器
3.2 Boosting
Boosting是一种能够将弱学习器转化为强学习器,从而提升各种学习算法的方法。Boosting基于分类器之间强依赖,必须串行。
思路:从初始训练集得到基学习器,根据其表现,对训练样本进行调整,使得之前分类错误的样本后续更受关注,用改变后的样本学习下一个分类器。重复学习
T
T
T个分类器,
T
T
T个分类器的结果加权得到最终结果。
Boosting算法的工作机制:
- 首先从训练集用初始权重训练出一个弱学习器1
- 根据学习器1的学习误差率来更新训练样本的权重,使得之前弱学习器1学习误差率高的训练样本点的权重变高,使得这些误差率高的点在后面的弱学习器2中得到更多的重视
- 然后基于调整权重后的训练集来训练弱学习器2
- 如此重复进行,直到弱学习器数达到事先指定的数目 T T T
- 最终将这 T T T个弱学习器通过集合策略进行整合,得到最终的强学习器
理论上,Boosting可以显著减小弱学习器的偏差,这些弱学习器的效果只是稍微优于随机猜测,比如小决策树——数据加权模型。然后Boosting在运行时将更多的权重赋值给早期训练中错误最多的数据集,通过结合加权多数投票或加权求和以产生最终预测。Boosting的每个模型都是单独运行,每个模型决定下一个模型要关注的特征,最后在不偏向任何模型的前提下聚合输出结果。
3.3 Stacking
Stacking方法是指训练一个模型用于组合其他各个模型,通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。首先训练多个不同的模型,然后把之前训练的各个模型的输出为输入来训练一个模型,以得到一个最终的输出。也就是说,Stacking是基础模型利用整个训练集做训练,元模型将基础模型的特征作为特征进行训练。
Stacking的工作机制:
数据集为
D
D
D,样本数量为
m
m
m,分为
D
t
r
a
i
n
D_{train}
Dtrain和
D
t
e
s
t
D_{test}
Dtest。
- Stacking的初级学习器有 n n n种。
- 对每一个初级学习器:
- 首先对 D t r a i n D_{train} Dtrain进行5-fold处理。
- 用 m o d e l i model_i modeli进行5-fold训练,对验证集进行 P r e d i c t Predict Predict。
- 同时生成5个 P r e d i c t t e s t Predict_{test} Predicttest。
- 对输出进行整理。5个验证集的输出组合成次学习器的一个输入特征,5个 P r e d i c t t e s t Predict_{test} Predicttest取平均
- 这样就组成了 m × 5 m \times 5 m×5的维度的次训练集和 m × 5 m \times 5 m×5维度的测试集,用次级学习器进行再次训练。
Stacking能够最小化一个或多个泛化器的泛化误差率。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。
四、结合策略
假定得到的 T T T个弱学习器是 { h 1 , h 2 , . . . h T } \{h_1,h_2,...h_T\} {h1,h2,...hT}
4.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
w
w:
H
(
x
)
=
∑
i
=
1
T
w
i
h
i
(
x
)
H(x)=\sum_{i=1}^{T} w_{i} h_{i}(x)
H(x)=i=1∑Twihi(x)
其中
w
i
w_i
wi是个体学习器
h
i
h_i
hi的权重,通常有
w
i
≥
0
,
∑
i
=
1
T
w
i
=
1
w_{i} \geq 0, \quad \sum_{i=1}^{T} w_{i}=1
wi≥0,i=1∑Twi=1
4.2 投票法
对于分类问题的预测,通常使用投票法。假设预测类别是
{
c
1
,
c
2
,
.
.
.
c
K
}
\{c_1,c_2,...c_K\}
{c1,c2,...cK}。对于预测样本
x
x
x,设
T
T
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
T
T个弱学习器的对样本
x
x
x的预测结果中,数量最多的类别
c
i
c_i
ci为最终的分类类别。
稍微复杂的投票法是绝对多数投票法——票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。
4.3 学习法
对于学习法,代表方法是stacking,当使用stacking的结合策略时, 不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器。将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,弱学习器称为初级学习器,用于结合的学习器称为次级学习器。对于测试集,首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。