集成学习(ensemble learning)本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。也就是我们常说的“博采众长”。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等,可以说所有的机器学习领域都可以看到集成学习的身影
集成学习有两个主要的问题需要解决,第一是如何得到若干个个体学习器,第二是如何选择一种结合策略,将这些个体学习器集合成一个强学习器
个体学习器
上面说到, 集成学习第一是要得到若干个 个体学习器, 那么通常的做法, 有2种选择:
- 所有的个体学习器都是同类的,或者说是同质的, 比如都是某种决策树
- 异质的个体学习器. 比如采用多种不同的学习器, 对他们进行组合
目前, 同质学习器是最广泛的, 这里面同质学习器使用最多的就是CART, 比如: Random Forest,GBDT, LightGBM等
对于第二个问题: 如何结合这些个体学习器
- 串行生成. 这类集成方法适应于个体学习器之间存在较强的关联, 代表的就是boosting系列的算法, 如:GBDT
- 并行生成, 这类集成方法适应于个体学习器之间存在较弱的依赖, 代表的就是bagging系列算法, 如: Random Forest
Boosting系列
Boosting算法的工作机制是从训练集用初始权重学习出一个弱分类器1, 根据弱分类器的学习误差, 更新对应样本的权重, 学习得到第二个弱分类器2,样本权重随着上一个弱分类器的情况而定, 分类错误的, 对应样本权重就高. 最终, 通过最后的集成策略, 对样本进行整合
Bagging系列
bagging方式可以并行计算, 他的弱学习器之间没有依赖关系, 下一个学习器不需要通过上一个学习器的表现来制定相应的策略
从上图可以看出,bagging的个体弱学习器的训练集是通过随机采样得到的。通过T次的随机采样,我们就可以得到T个采样集,对于这T个采样集,我们可以分别独立的训练出T个弱学习器,再对这T个弱学习器通过集合策略来得到最终的强学习器,对于这里的随机采样有必要做进一步的介绍,这里一般采用的是自助采样法(Bootstap sampling),即对于m个样本的原始训练集,我们每次先随机采集一个样本放入采样集,接着把该样本放回,也就是说下次采样时该样本仍有可能被采集到,这样采集m次,最终可以得到m个样本的采样集,由于是随机采样,这样每次的采样集是和原始训练集不同的,和其他采样集也是不同的,这样得到多个不同的弱学习器
学习器的结合策略
回归问题
对于回归问题, 结合的策略通常有以下几种
- 平均法: 每个弱学习器得到的结果求平均
- 加权平均
分类问题
- 投票法
- 加权投票法
Stacking
最后一种是 学习法: 代表的类型是stacking, 当使用stacking的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果