【ML】boosting、stacking、bagging、blending是什么?怎么用?

感觉算法面试必不可少的一个问题:boosting、stacking、bagging、blending是什么?有什么区别?

下面整理一下相关知识,巩固熟悉一下。最上面的为内容简练后的汇总,最下面说的太复杂(如果想多了解,可往后看):

【占位:内容简练】

1.bagging和boosting的区别:

二者的主要区别是取样本方式不同。bagging采用均匀取样,而boosting根据错误率来采样,因此boosting的分类精度要由于bagging。

2.

 

详细的原理解说:

一.一句话总结这些模型融合方法:

1. 简单加权融合:

  • 回归(分类概率):算术平均融合(Arithmetic mean),几何平均融合(Geometric mean);

  • 分类:投票(Voting);

  • 综合:排序融合(Rank averaging),log融合。

2. stacking/blending:

  • 构建多层模型,并利用预测结果再拟合预测。

3. boosting/bagging:

  • 多树的提升方法,在xgboost,Adaboost,GBDT中已经用到。

二.常用融合方法:

常用融合方法:

平均法(Averaging):

基本思想对于回归问题,一个简单直接的思路是取平均。稍稍改进的方法是进行加权平均。权值可以用排序的方法确定,举个例子,比如A、B、C三种基本模型,模型效果进行排名,假设排名分别是1,2,3,那么给这三个模型赋予的权值分别是3/6、2/6、1/6。

平均法或加权平均法看似简单,其实后面的高级算法也可以说是基于此而产生的,Bagging或者Boosting都是一种把许多弱分类器这样融合成强分类器的思想。

投票法(voting):

基本思想假设对于一个二分类问题,有3个基础模型,现在我们可以在这些基学习器的基础上得到一个投票的分类器,把票数最多的类作为我们要预测的类别。

三.具体讲解

1.boosting

代表模型:gbdt、adaboost、

基础思想:Boosting是一种串行的工作机制,即个体学习器的训练存在依赖关系,必须一步一步序列化进行。Boosting是一个序列化的过程,后续模型会矫正之前模型的预测结果。也就是说,之后的模型依赖于之前的模型。

其基本思想是:增加前一个基学习器在训练训练过程中预测错误样本的权重,使得后续基学习器更加关注这些打标错误的训练样本,尽可能纠正这些错误,一直向下串行直至产生需要的T个基学习器,Boosting最终对这T个学习器进行加权结合,产生学习器委员会。

Boosting训练过程:

  • 基于原始数据集构造子集

  • 初始的时候,所有的数据点都给相同的权重

  • 基于这个子集创建一个基模型

  • 使用这个模型在整个数据集上进行预测

  • 基于真实值和预测值计算误差

  • 被预测错的观测值会赋予更大的权重

  • 再构造一个模型基于之前预测的误差进行预测,这个模型会尝试矫正之前的模型

  • 类似地,构造多个模型,每一个都会矫正之前的误差

  • 最终的模型(strong learner)是所有弱学习器的加权融合

2.bagging

代表模型:RF、

基本思想:Bagging基于bootstrap(自采样),也就是有放回的采样。训练子集的大小和原始数据集的大小相同。Bagging的技术使用子集来了解整个样本集的分布,通过bagging采样的子集的大小要小于原始集合。 

  • 采用bootstrap的方法基于原始数据集产生大量的子集

  • 基于这些子集训练弱模型base model

  • 模型是并行训练并且相互独立的

  • 最终的预测结果取决于多个模型的预测结果

Bagging是一种并行式的集成学习方法,即基学习器的训练之间没有前后顺序可以同时进行,Bagging使用“有放回”采样的方式选取训练集,对于包含m个样本的训练集,进行m次有放回的随机采样操作,从而得到m个样本的采样集,这样训练集中有接近36.8%的样本没有被采到。按照相同的方式重复进行,我们就可以采集到T个包含m个样本的数据集,从而训练出T个基学习器,最终对这T个基学习器的输出进行结合。

3.stacking:

在不同模型预测的结果基础上再加一层模型,进行再训练,从而得到模型最终的预测。

代表模型:

基本思想:stacking 就是当用初始训练数据学习出若干个基学习器后,将这几个学习器的预测结果作为新的训练集,来学习一个新的学习器。对不同模型预测的结果再进行建模。

将个体学习器结合在一起的时候使用的方法叫做结合策略。对于分类问题,我们可以使用投票法来选择输出最多的类。对于回归问题,我们可以将分类器输出的结果求平均值。

上面说的投票法和平均法都是很有效的结合策略,还有一种结合策略是使用另外一个机器学习算法来将个体机器学习器的结果结合在一起,这个方法就是Stacking。

在stacking方法中,我们把个体学习器叫做初级学习器用于结合的学习器叫做次级学习器或元学习器(metalearner),次级学习器用于训练的数据叫做次级训练集。次级训练集是在训练集上用初级学习器得到的。

Stacking本质上就是这么直接的思路,但是直接这样有时对于如果训练集和测试集分布不那么一致的情况下是有一点问题的,其问题在于用初始模型训练的标签再利用真实标签进行再训练,毫无疑问会导致一定的模型过拟合训练集,这样或许模型在测试集上的泛化能力或者说效果会有一定的下降,因此现在的问题变成了如何降低再训练的过拟合性,这里我们一般有两种方法:

  1. 次级模型尽量选择简单的线性模型

  2. 利用K折交叉验证

4.blending

代表模型:

基本思想:Blending采用了和stacking同样的方法,不过只从训练集中选择一个fold的结果,再和原始特征进行concat作为元学习器meta learner的特征,测试集上进行同样的操作。

把原始的训练集先分成两部分,比如70%的数据作为新的训练集,剩下30%的数据作为测试集。

  • 第一层,我们在这70%的数据上训练多个模型,然后去预测那30%数据的label,同时也预测test集的label。

  • 在第二层,我们就直接用这30%数据在第一层预测的结果做为新特征继续训练,然后用test集第一层预测的label做特征,用第二层训练的模型做进一步预测。

Blending训练过程:

  1. 整个训练集划分成训练集training sets和验证集validation sets两个部分;

  2. 在training sets上训练模型;

  3. 在validation sets和test sets上得到预测结果;

  4. 将validation sets的原始特征和不同基模型base model预测得到的结果作为新的元学习器meta learner的输入,进行训练 ;

  5. 使用训练好的模型meta learner在test sets以及在base model上的预测结果上进行预测,得到最终结果。

Stacking与Blending的对比:

优点在于:

  • blending比stacking简单,因为不用进行k次的交叉验证来获得stacker feature

  • blending避开了一个信息泄露问题:generlizers和stacker使用了不一样的数据集

缺点在于:

  • blending使用了很少的数据(第二阶段的blender只使用training set10%的量)

  • blender可能会过拟合

  • stacking使用多次的交叉验证会比较稳健

 

参考链接:

1.staking boosting baggin讲解https://mp.weixin.qq.com/s/fsT6rzpL5cuzh2usNjzzbA

2.

你可能感兴趣的:(ML,机器学习)