集成学习(ensemble learning)可以说是现在非常火爆的机器学习方法了。它本身不是一个单独的机器学习算法,而是通过构建多个学习器并结合,来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选择集成,异常点检测集成等。
1、集成学习概述
从下图中,我们对集成学习的思想做一个概括。对于训练数据,我们通过若干个个体学习器,通过一定的结合策略,就可以形成一个强学习器。集成学习有两个主要问题需要解决:
1)、如何得到若干个个体学习器
2)、如何选择一种结合策略,将多个学习器结合成一个强学习器
2、集成学习之个体学习器
如何得到若干个个体学习器???
有以下两种选择:
1)所有的个体学习器都是一个种类的
2)所有的学习器不是一个种类的
一般我们常说的集成学习的方法都是指的同质个体学习器。而同质个体学习器使用最多的模型是CART决策树和神经网络。同质个体学习器按照个体学习器之间是否存在依赖关系可以分为两类,第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是boosting系列算法第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是bagging和随机森林(Random Forest)系列算法。
3、集成学习boosting
下面用一张图对boosting算法的原理做一个简单的概括1)、首先用带权重D(1)的训练集训练处第一个弱学习器1,
2)、根据弱学习器的学习误差率来更新训练样本的权重D(2),使得之前的弱学习器1学习误差率高的训练样本点的权重变高,目的使这些误差率高的点在后面的弱学习器2中得到更高的重视,然后基于调整权重后的训练集来训练弱学习器2.
3)如此重复进行,直到弱学习器数达到事先指定的数目T,最终将这T个弱学习器通过集合策略进行整合,得到最终的强学习器
Boosting系列算法里最著名算法主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树系列算法里面应用最广泛的是梯度提升树(Gradient Boosting Tree)。AdaBoost和提升树算法的原理在后面的文章中会专门来讲。
4、 集成学习之bagging
下面用一张图对bagging算法的原理做一个简单的概括从上图可以看出,bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器。
对于这里的随机采样有必要做进一步的介绍,这里一般采用的是自助采样法(Bootstrap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器。
随机森林是bagging的一个特化进阶版,所谓的特化是因为随机森林的弱学习器都是决策树。所谓的进阶是随机森林在bagging的样本随机采样基础上,又加上了特征的随机选择,其基本思想没有脱离bagging的范畴。bagging和随机森林算法的原理在后面的文章中会专门来讲。
5、集成学习之结合策略
5.1 平均法
对于数值类型的回归预测问题,通常使用的结合策略是平均法,就是说,对于若干个弱学习器的输出进行取平均得到最终的预测输出
最简单的平均是算术平均,最终预测是:如果每个个体学习器有一个权重,则最终预测是:
其中wi是个体学习器hi权重,通常有:
5.2投票法
对于分类问题的预测,我们通常使用的是投票法。假设我们的预测类别是{c1,c2,...cK},对于任意一个预测样本x,我们的T个弱学习器的预测结果分别是(h1(x),h2(x)...hT(x)) 。
最简单的投票法是相对多数投票法,也就是我们通常所说的少数服从多数,
稍微复杂的投票法是绝对多数投票法,就是我们常说的票过半数。在相对多数投票法的基础上,不光要求获得最高票,还要求票过半数。否则会拒绝预测。
更加复杂的是加权投票法,和加权平均法一样,每个弱学习器的分类票数乘上一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别
5.3 学习法
上两节的方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是stacking,当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。
网友评论