自然语言处理算法之集成算法基础以及boosting与bagging简介

在机器学习和统计学习中,集成学习(Ensemble Learning)是一种将多种学习算法组合在一起以取得更好表现的一种方法,机器学习下的集成学习主要是指有限的模型相互组合,而且可以有很多不同的结构,在自然语言处理过程中,特别是文本分类,很多时候集成学习的表现相对于其它的学习方法要好很多。

1个体与集成

集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统、基于委员会的学习等。

自然语言处理算法之集成算法基础以及boosting与bagging简介_第1张图片

如上图所示,为集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将他们将它们结合起来,个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法,BP神经网络算法等。此时集成中只包含同种类型的个体学习器,例如“决策树集成”中全是决策树,“神经网络集成”中全是神经网络,这样的集成就是“同质”的。同质集成中的个体学习器也称为“基学习器”,相应的学习算法称为“基学习算法”,集成也可包含不同类型的个体学习器,例如同时包含决策树和神经网络,这样的集成是“异质”的。异质集成中的个体学习器由不同的学习算法生成,这时就不再有基学习算法,相应的,个体学习器一般不称为基学习器,常称为“组件学习器”或直接称为个体学习器。


集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器,但需要注意的是,虽然从理论上来说使用弱学习器集成足以获得好的性能,但实践中出于种种考虑,例如希望使用较少的个体学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。


在一般经验中,如果把好坏不等的东西掺在一起,那么通常结果会是比最坏的要好一些,比最好的要坏一些,集成学习把多个学习器结合起来,如何能获得比最好的单一学习器更好的性能呢?

自然语言处理算法之集成算法基础以及boosting与bagging简介_第2张图片

考虑一个简单的例子:在二分类任务中,假定三个分类器在三个测试样本上的表现如上图所示,其中√表示分类正确,×表示分类错误,集成学习的结果通过投票法产生,即“少数服从多数”。在图中(a),每个分类器都只有66.6%的精度,但集成学习却达到了100%,在图(b)中,三个分类器没有差别,集成之后性能没有提高,在图(c)中,每个分类器的精度都只有33.3%,集成学习的结果变的更糟。这个简单的例子显示出:要获得好的集成个体学习器应“好而不同”,即个体学习器要有一定的“准确性”,即学习器不能太坏,并且要有“多样性”,即学习器间具有差异。

我们来做一个简单的分析,考虑二分类的问题 y 属于 {-1,+1} 和真实函数f,假定基分类器的错误率为emu,即对每个基分类器h,有


假设集成通过简单投票法结合T个基分类器,若有超过半数的基分类器正确,则集成分类就正确:

自然语言处理算法之集成算法基础以及boosting与bagging简介_第3张图片

假设基分类器的错误率相互独立,则由Hoeffding不等式可知,集成的错误率为:

自然语言处理算法之集成算法基础以及boosting与bagging简介_第4张图片

上式显示出,随着集成中个体分类器数目T的增大,集成的错误率将指数极下降,最后趋于零。

然而我们必须注意到,上面的分析有一个关键假设:基学习器的误差相互独立,在现实任务中,个体学习器是为解决同一个问题训练出来的,它们显然不可能相互独立,事实上,个体学习器的“准确性”和“多样性”本身就存在冲突,一般准确性很高之后,要增加多样性就需牺牲准确性,事实上,如何产生并结合“好而不同”的个体学习器,恰是集成学习研究的核心。

根据个体学习的生成方式,目前的集成学习方法大致可以分为两类,即个体学习器间存在强依赖关系,必须串行生成的序列化方法,以及个体学习器间不存在强依赖性关系,可同时生成的并行化方法,前者代表的是Boosting,后者代表的是Bagging和“随机森林”。

2Bagging 和 Boosting 算法

Bagging和Boosting都是将已有的分类或回归算法通过一定方式组合起来,形成一个性能更加强大的分类器,更准确的说这是一种分类算法的组装方法。即将弱分类器组装成强分类器的方法。

首先介绍Bootstraping,即自助法:它是一种有放回的抽样方法(可能抽到重复的样本)。

1、Bagging (bootstrap aggregating)

Bagging即套袋法,其算法过程如下:

自然语言处理算法之集成算法基础以及boosting与bagging简介_第5张图片

A)从原始样本集中抽取训练集。每轮从原始样本集中使用Bootstraping的方法抽取n个训练样本(在训练集中,有些样本可能被多次抽取到,而有些样本可能一次都没有被抽中)。共进行k轮抽取,得到k个训练集。(k个训练集之间是相互独立的)

B)每次使用一个训练集得到一个模型,k个训练集共得到k个模型。(注:这里并没有具体的分类算法或回归方法,我们可以根据具体问题采用不同的分类或回归方法,如决策树、感知器等)

C)对分类问题:将上步得到的k个模型采用投票的方式得到分类结果;对回归问题,计算上述模型的均值作为最后的结果。(所有模型的重要性相同)

2、Boosting

其主要思想是将弱分类器组装成一个强分类器。在PAC(概率近似正确)学习框架下,则一定可以将弱分类器组装成一个强分类器。

自然语言处理算法之集成算法基础以及boosting与bagging简介_第6张图片

关于Boosting的两个核心问题:

1)在每一轮如何改变训练数据的权值或概率分布?

通过提高那些在前一轮被弱分类器分错样例的权值,减小前一轮分对样例的权值,来使得分类器对误分的数据有较好的效果。

2)通过什么方式来组合弱分类器?

通过加法模型将弱分类器进行线性组合,比如AdaBoost通过加权多数表决的方式,即增大错误率小的分类器的权值,同时减小错误率较大的分类器的权值。

而提升树通过拟合残差的方式逐步减小残差,将每一步生成的模型叠加得到最终模型。

3、Bagging,Boosting二者之间的区别

Bagging和Boosting的区别:

1)样本选择上:

Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。

Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。

2)样例权重:

Bagging:使用均匀取样,每个样例的权重相等

Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。

3)预测函数:

Bagging:所有预测函数的权重相等。

Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。

4)并行计算:

Bagging:各个预测函数可以并行生成

Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。

4、总结

这两种方法都是把若干个分类器整合为一个分类器的方法,只是整合的方式不一样,最终得到不一样的效果,将不同的分类算法套入到此类算法框架中一定程度上会提高了原单一分类器的分类效果,但是也增大了计算量。

下面是将决策树与这些算法框架进行结合所得到的新的算法:

1)Bagging + 决策树 = 随机森林

2)AdaBoost + 决策树 = 提升树

3)Gradient Boosting + 决策树 = GBDT

参考内容:

[1] 周志华: 机器学习

[1] https://www.cnblogs.com/dudumiaomiao/p/6361777.html


本文转自微信公众号:自然语言处理技术,欢迎大家关注交流

欢迎关注公众号学习自然语言处理技术

自然语言处理算法之集成算法基础以及boosting与bagging简介_第7张图片



你可能感兴趣的:(机器学习,自然语言处理,自然语言处理技术)