1.什么是集成学习
集成学习的基本思想是结合多个学习器组合成一个性能更好的学习器。这类方法会训练多个弱学习器(基学习器)并将它们输出的结果以某种策略结合起来组成一个强学习器。
2.集成学习的几种方法
根据个体学习器的生成方式,集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林。
集成学习的方式有Bagging、Boosting、Stacking等,每个方式分别有很多不同的实现。
2-1 Bagging
(1)Bagging基本介绍: Bagging的思想是基于并行策略的方式进行的。基学习器之间不存在依赖关系,可以同时训练生成。
(2) Bagging方法的训练步骤:
step 1:采用自助采样法对训练集随机采样,重复进行T次;
step 2:基于每个采样训练一个基学习器,并得到T个基学习器;
step 3:预测时,使用T个基学习器进行预测,集体进行投票表决;
(3)Bagging的注意事项:使用Bagging框架时采用的基分类器最好采用对样本数据比较敏感的学习器,保持一定的不稳定性。
(4)Bagging的优点:同时集成后分类器方差比基分类器的要小。
(5)Bagging的特点:Bagging在训练时训练每个基学习器时只使用一部分样本并且偏好不稳定(对样本分布敏感)的学习器作为基学习器;
(5)Bagging的经典代表:随机森林
随机森林的思想是使用随机的方式建立一个森林,森林里有很多决策树组成,随机森林的决策树是没有关联的,在一个新的样本进入决策树之后,就让森林中的每一颗决策树分别进行判断。如果是分类问题,那就采取投票的思想,查看被投票最多的选项作为最终的分类结果;如果是回归问题,那就将均值作为结果。
2-2 Boosting
(1)Boosting基本介绍: Boosting采用的是迭代式学习的方式进行学习,采用的是串联的思想。让基学习器之间按照顺序的方式进行。
(2)Boosting基本思想: Boosting的分类器之间存在依赖关系,基学习器之间存在依赖关系,新的学习器需要根据上一个学习器生成。
(3) Boosting方法的训练步骤:
具体的实现方法是:首先给每一个训练样例赋予相同的权重,然后训练第一个基本分类器并用它来对训练集进行测试,对于那些分类错误的测试样例提高其权重(实际算法中是降低分类正确的样例的权重),然后用调整后的带权训练集训练第二个基本分类器,然后重复这个过程直到最后得到一个足够好的学习器。
step 1: 先从初始训练集训练一个基学习器;初始训练集中各个样本的权重是相同的
step 2:根据上一个基学习器的表现,调整样本权重,使分类错误样本得到更高的权重。
step 3:基于调整后的样本分布,训练下一个基学习器;
step 4:测试时,对各基学习器加权得到最终结果;
(4)Boosting的特点:
(1)与Bagging的训练样本不同,boosting算法在每次学习都会使用全部的训练样本。
(2)由于boosting 会将注意力集中在分类错误的样本上,因此boosting会对训练数据的噪声非常敏感,如果训练数据中包含了噪音数据,那基学习器都集中在噪音数据上做训练,会影响整个模型的拟合效果。
(5)Boosting的经典代表:
Adaboost:更改训练样本权重。
GBDT:损失函数一阶泰勒展开。
XGBoost:损失函数二阶泰勒展开。
2-3 Stacking
(1)Stacking基本介绍: 该方法通常考虑的是异质弱学习器,并行地学习它们,并通过训练一个「元模型」将它们组合起来,根据不同弱模型的预测结果输出一个最终的预测结果。
(2)Stacking基本思想:通过训练学习器来结合个体学习器的方法。个体学习器被称为一级学习器,结合器被称为二级学习器,或者元学习器。Stacking是一种通用框架,可以看成是多种集成方法的泛化,它也可以看成是一种通过学习进行结合的特殊结合方法。
(3)Stacking基本步骤:
step 1:首先使用原始的训练数据集来训练一级学习器。
step 2:使用一级学习器的输出作为输入特征,并使用对应原始标记作为新标记,组成一个新数据集来训练二级学习器。一级学习器经常使用不同的学习算法,因此Stacking集成通常是异质的。
(4)Stacking的特点:
类似于bagging的升级版,bagging是多个模型结果的投票或者平均,stacking更复杂一些,是对多个小模型结果再建模,相当于两层模型。
3.Boosting的经典代表
Adaboost:【机器学习】Adaboost_DonngZH的博客-CSDN博客
GBDT:【机器学习】GBDT_DonngZH的博客-CSDN博客
XGBoost:【机器学习】XGBoost_DonngZH的博客-CSDN博客