一、集成学习的概述
集成学习 (ensemble learning) 本身不是一个单独的机器学习算法,而是通过构建并结合多个机器学习器来完成学习任务。集成学习可以用于分类问题集成,回归问题集成,特征选取集成,异常点检测集成等等。本文就对集成学习的原理做一个总结。
集成学习解决的两个问题:一是如何选择若干个弱学习器,二是如何将这些弱学习器通过结合策略结合起来。
二、怎么得到个体弱学习器呢?
第一种就是所有的个体学习器都是一个种类的,或者说是同质的。比如都是决策树个体学习器,或者都是神经网络个体学习器。
第二种是所有的个体学习器不全是一个种类的,或者说是异质的。比如我们有一个分类问题,对训练集采用支持向量机个体学习器,逻辑回归个体学习器和朴素贝叶斯个体学习器来学习,再通过某种结合策略来确定最终的分类强学习器。
对于集成算法一般会使用同质的学习器。最常用的是 CART 决策树和神经网络。同时我们按照各个学习器之间是否存在相互依赖关系来确定两种集成算法:第一个是个体学习器之间存在强依赖关系,一系列个体学习器基本都需要串行生成,代表算法是 boosting 系列算法,第二个是个体学习器之间不存在强依赖关系,一系列个体学习器可以并行生成,代表算法是 bagging 和随机森林(Random Forest)系列算法。
二、集成学习的两类算法
1.boosting 的算法原理图示:
boosting 的工作原理:基于初始带权重的训练集训练出弱学习器 1,基于学习误差率来更新样本的权重,即增大误分类样本的权重,使得在后面更加关注误分类点高的数据。基于更新后训练集训练弱学习器 2,如此循环训练。如果设置的迭代次数为 T,那么当 n=T 时结束训练。最后通过一定的结合策略形成强学习器。
boosting 算法里最著名的两个算法是 Adaboost 和提升树(boost tree), 提升树中最常用的是梯度提升树(Gradient Boosting Tree)。
注:此时训练集就是一个,但是在不断迭代的过程中不断更新。
2.bagging 算法原理图:
bagging 算法的原理:不同于 boosting,各个学习器之间没有相互依赖关系。如果设置的迭代次数 n_estimators=T, 那么需要从训练集样本中随机取样 T 次且并行地训练 T 个学习器。最后将训练好的学习器按照相应策略结合得到强学习器。这里采用的随机取样的方式自助采样法(Bootstap sampling),有放回的取样,所以有的数据被采样 m 次但是有的数据一次都没有取到,对于这样的数据我们称之为 OOB。之后会介绍 OOB 可以用来估计模型的泛化能力,相当于交叉验证。
随机森林 时 bagging 算法的特化进阶。特化是指随机森林的弱学习器都是决策树 CART ;进阶 是指不仅进行训练集的随机采样而且进行特征的随机选择(这样可以达到降维的目的并且能给特征进行重要性 importance 的评分)
三、集成学习的结合策略
平均法
投票法
学习法
两节的方法都是对弱学习器的结果做平均或者投票,相对比较简单,但是可能学习误差较大,于是就有了学习法这种方法,对于学习法,代表方法是 stacking,当使用 stacking 的结合策略时, 我们不是对弱学习器的结果做简单的逻辑处理,而是再加上一层学习器,也就是 说,我们将训练集弱学习器的学习结果作为输入,将训练集的输出作为输出,重新训练一个学习器来得到最终结果。
在这种情况下,我们将弱学习器称为初级学习器,将用于结合的学习器称为次级学习器。对于测试集,我们首先用初级学习器预测一次,得到次级学习器的输入样本,再用次级学习器预测一次,得到最终的预测结果。