前面介绍了决策树的相关原理和实现,其实集成学习并非是由决策树演变而来,之所以从决策树引申至集成学习是因为常见的一些集成学习算法与决策树有关比如随机森林、GBDT以及GBDT的升华版Xgboost都是以决策树为基础的集成学习方法,故将二者放在一起进行讨论。本节主要介绍关于集成学习的基本原理,后面会介绍一些典型的集成学习算法及应用。
集成学习从字面上就是集成很多分类器进行学习的过程,通过将一系列弱分类器的模型做一些简单的线性组合,最终形成了一个较强的分类器。因此集成学习的一般思路有以下三种:
通过组合不同类型的分类器进行提升的方法
将相同类型不同参数的弱分类器进行组合
将相同类型但不同训练集的弱分类器进行组合提升
一般第一种不是很常见,第二种和第三种较为常见,二者的主要区别是生成弱分类器的方式不同,第二种是期望生成的相互独立的分类器,分类器之间相互依赖性不强,相当于并行生成的方法,比较有代表性的Bagging算法就属于这一类,而Bagging中比较有名的是RF随机森林算法;第三种是一种顺序生成的模型,其在原来弱分类器的基础上,不断调整样本,从而得到提升,分类器之间具有较强的依赖性,相当于串行的方法,其著名的代表为Boosting,而Boosting中最具有代表性的为AdaBoost。下面分别对这两类进行介绍。
Bagging和随机森林Bagging的全称为Bootstrap aggregating,其思想就是源于Bootstrap,Bootstrap主要用于发现样本的概率分布,通过“自举”的方法,不断自采样模拟随机变量真实分布生成样本集,其主要做法为:
从样本集X中随机抽取一个样本,然后将样本放回;
重复抽取N次,生成一个样本数为N的样本集;
重复上述步骤,完成M次,生成M个样本大小为N个样本集。
因此参考Bootstrap的方法,Bagging的做法就是不断抽取数据集,并用抽取的数据集训练弱分类器的过程,具体来说:
利用Bootstrap的方法抽取M个样本大小为N的数据集;
通过抽取的数据集训练M个弱分类器;
将M个弱分类器进行集成,一般为为简单的线性组合。
所谓的简单线性组合通常做法是:
对弱分类器的分类结果进行简单投票
对于回归则是简单的线性加权
为什么利用集成学习能够将弱分类器组合一起就能成为一个较强的分类器呢?
我们假设有M个弱分类器G1、G2、...、GM,所计算得到的映射结果分别为g1、g2、...、gM,则这些分类器通过线性组合得到的结果为:
假设弱分类器的错误率为ε,则有:
根据霍夫丁不等式https://www.cnblogs.com/nolonely/p/6155145.html:
从此式中可以看出错误率随着M的增大呈指数减小,理论上M→∞,ε→0。
因此多个弱分类器组合在一起,就成为了一个强分类器。然而,在Bagging中我们前面提到,每个弱分类器的错误率是相互独立的,但显然这并不现实,因为数据来源于同一个数据集生成,存在一定的相关性,因此,Bagging比较适用于“不稳定”的分类器,即对数据比较敏感的分类器,若训练样本稍微改变,所得的结果就会有较大的变化,效果就越好,Bagging能够显著提升。
随机森林Bagging中有一个著名的算法为随机森林(RF,Random Forest),随机森林就是利用Bagging的思想,利用决策树模型,生成很多个决策树的弱分类器,不同于普通的Bagging算法,随机森林在建模过程中,不但随机抽取M个样本量为N的样本集,在每个弱分类器即决策树建立的过程中,在生成节点时还从可选的特征中随机挑选出一部分特征进行节点的分裂。那么总结下来随机森林的生成流程如下: