集成学习
  集成学习是目前来说使用最广泛的算法,比赛中常见的XGBoost、LightGBM、Adaboost等,都属于集成模型,都是由一系列弱模型组合而来,常见的就是决策树,我们称弱分类器为基学习器,如果想要一个集成模型效果比较好,则基学习器就应该满足“好而不同”。好代表分类或者回归的效果较好,至少不能差,不同代表不同的基学习器之间不能非常相似。而在集成学习中最重要的内容,就是将基学习器进行组合的组合方式。目前的集成学习方法大致可以分为两类,称为Boosting和Bagging。这两类是如今使用最多的集成学习方法。

Boosting
  Boosting是一种可以将弱学习器提升为强学习器的算法,这类算法的工作机制都差不多,先从初始训练集中学习出一个基学习器,再根据基学习器的表现训练样本数据的分布进行调整,使得先前学习过程中错误的样本点在后续受到更多的关注,然后基于调整后的样本分布来训练下一个基学习器;就这样一直重复,直到学习器数目达到事先预设的数目。最终我们把这些基学习器进行加权结合。
  本文先不详细介绍Boosting的实例算法,因为属于Boosting家族的集成学习算法很多,例如XGBoost、LightGBM、Catboost、Adaboost、GBDT等等。后续看情况单独再进行学习。
  我们先了解Boosting的工作机制就可以了,如果从偏差-方差的角度看,Boosting主要关注降低偏差,因此Boosting能够基于泛化性能相当弱的学习器构建出很强的集成学习器。

Bagging
  Bagging与Boosting不同,虽然同样为集成学习,Boosting是在一个弱学习器上不断更新强化得到强学习器,而Bagging则是从采样上改变,在前面介绍基学习器时说到,一个好的集成方法的基学习器应该要满足好而不同,这里的不同就是Bagging的工作目标。我们知道任何一个学习器都是由数据学习而来,对于同一批样本数据,两个决策树学习得到的模型是一模一样的,这就不满足“不同”这个要素了。那么我们能不能将数据集划分为n组,然后学习n个基学习器呢?这样显然也是不行的,因为这样学习得到的模型是很差的,因为只用到了一小部分数据,数据量可能都不够学习。基于此,能不能找到一个好的采样方法,既能保证样本不重复,也能保证样本的数量不会太少。
  这就是Bagging的思想,bagging是一种自助采样法,给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放入初始数据集中,使得下次采样仍然能被采中,这样经过m次重复操作,我们得到含有m个样本的采样集,在这个采样集中,初始样本点中有的出现了多次,有的一次没有出现,在每次抽取中样本x xx被抽取到的概率为1 / m,则在该次抽取中样本x xx未被抽取到的概率为1−1 / m,则m次采样后,样本x未被抽到的概率如下



则初始训练集中约有63.2%的样本出现在采样集中,照这样,我们可以采集T个含m mm个样本点的采样集,然后基于这T个采样集学习T个基学习器,如果是分类任务,Bagging使用投票法对预测结果进行投票归类,如果是回归任务则使用求平均值的方法。

随机森林
  随机森林可以说是最经典也是最强的Bagging类型集成模型。在多种场合都能看见随机森林的影子。在前面我们说了Bagging模型就是采样的时候使用自助采样法,然后基于采样得到的数据集学习众多个模型,最后投票决定预测类别。而随机森林就是Bagging的进阶版本,在随机森林中,采样任然使用自助采样法,但是在决策树训练过程中又引入了一个随机选择。
  我们知道传统的决策树选择属性是在当前所有的属性中选择最优的属性,这个最优可以是基尼指数最小、可以是信息增益比最大等等。但是在随机森林选择属性时,是先随机选择k个属性,然后再在这k个属性中选择最优的属性,这种选择的思想等于是在构建每一个基学习器时都是随机的,这样等于是双重随机:采样随机性+特征选择随机性。这就是随机森林最大的特点,事实表明,随机森林在分类问题上具有很强的泛化能力。是Bagging乃至集成学习最具代表性的算法,并且简单易懂,容易实现。其实随机森林的思想主要还是用在提升基学习器的“不同”上,这样得到的结果是单个或少量的基学习器效果不佳,但是一旦基学习器的数量增多,集成的效果将会越来越好。
关于随机森林是如何使用的,其实在python中都封存了可以调用的包,我们只需要掌握随机森林的核心思想

补充:Stacking
  Stacking其实也是一种集成学习方法,但是这种学习方法和前面的学习方法又不一样,其核心思想是以初级学习器的输出为次级学习器的输入不断学习新的学习器。可以理解为整个学习过程分为两次学习,第一次学习是学习众多个初级学习器,针对每一个学习的初级学习器,使用验证集验证样本点得到新的数据样本,将所有的初级学习器在验证集上生成的样本点作为次级学习器的训练集,然后在次级学习器上学习一个新的模型,这个模型就是Stacking集成的模型。常用的训练方法就是十折交叉验证法。