集成学习的不二法门bagging、boosting和三大法宝<结合策略>平均法,投票法和学习法(stacking)

单个学习器要么容易欠拟合要么容易过拟合,为了得到泛化性能优良的学习器,能够训练多个个体学习器,经过必定的结合策略,最终造成一个强学习器。这种集成多个个体学习器的方法称为集成学习(ensemble learning)。算法

集成学习经过组合多种模型来改善机器学习的结果,与单一的模型相比,这种方法容许产生更好的预测性能。网络

集成学习属于元算法,即结合数个“好而不一样”的机器学习技术,造成一个预测模型,以此来降方差(bagging),减误差(boosting),提高预测准确性(stacking)。机器学习

1. 集成学习之个体学习器

个体学习器(又称为“基学习器”)的选择有两种方式:性能

  • 集成中只包含同种类型的个体学习器,称为同质集成 。
  • 集成中包含不一样类型的个体学习器,为异质集成 。

目前同质集成 的应用最普遍,而基学习器使用最多的模型是CART决策树和神经网络。学习

按照个体学习器之间是否存在依赖关系能够分为两类:测试

  • 个体学习器之间存在强依赖关系,一系列个体学习器基本必须串行生成,表明是boosting系列算法。
  • 个体学习器之间不存在强依赖关系 ,一系列个体学习器能够并行生成,表明是bagging系列算法。

1.1 boosting算法原理

boosting的算法原理以下所示:spa

 

 

Boosting算法的工做机制是:3d

(1)先从初始训练集训练出一个基学习器;blog

(2)再根据基学习器的表现对样本权重进行调整,增长基学习器误分类样本的权重(又称重采样);博客

(3)基于调整后的样本分布来训练下一个基学习器;

(4)如此重复进行,直至基学习器数目达到事先指定的个数 [公式] ,将这 [公式] 个基学习器经过集合策略进行整合,获得最终的强学习器。

Boosting系列算法里最著名算法主要有AdaBoost算法和提高树(boosting tree)系列算法。提高树系列算法里面应用最普遍的是梯度提高树(Gradient Boosting Tree)<GDBT>。

1.1.1以adaboost算法为例

“强学习”和“弱学习”的概念:一个分类,若是存在一个多项式算法可以学习他,并获得很高的正确率,那么这个算法称为强学习器,反之若是正确率只是稍大于随机猜想(50%),则称为弱学习器。

在实际状况中,咱们每每会发现弱学习器比强学习器更容易得到,因此就有了可否把弱学习器提高(boosting)为强学习器的疑问。

因而提高类方法应运而生,它表明了一类从弱学习器出发,反复训练,获得一系列弱学习器,而后组合这些弱学习器,构成一个强学习器的算法。

大多数boost方法会改变数据的几率分布(改变数据权值),具体而言就是提升前一轮训练中被错分类的数据的权值,下降正确分类数据的权值,使得被错误分类的数据在下轮的训练中更受关注;

而后根据不一样分布调用弱学习算法获得一系列弱学习器实现的,再将这些学习器线性组合,具体组合方法是偏差率小的学习器会被增大权值,偏差率大的学习器会被减少权值,典型表明adaboost算法。

1.2. 集成学习之Bagging 算法原理

Bagging的算法原理以下:

 

 

bagging算法的工做机制为:

(1)对训练集利用自助采样法进行[公式]次随机采样,每次采样获得 [公式] 个样本的采样集;

(2)对于这 [公式] 个采样集,咱们能够分别独立的训练出 [公式] 个基学习器;

(3)再对这 [公式] 个基学习器经过集合策略来获得最终的强学习器。

值得注意的是这里的随机采样采用的是自助采样法(Bootstrap sampling),自助采样法是一种有放回的采样。

即对于 [公式] 个样本的原始训练集,咱们每次先随机采集一个样本放入采样集,接着把该样本放回,这样采集 [公式] 次,最终能够获得 [公式] 个样本的采样集,因为是随机采样,这样每次的采样集是和原始训练集不一样的,和其余采样集也是不一样的。

对于一个样本,它每次被采集到的几率是 [公式] 。不被采集到的几率为 [公式] 。若是[公式]次采样都没有被采集中的几率是 [公式] 。则 [公式] ,

即当抽样的样本量足够大时,在bagging的每轮随机采样中,训练集中大约有36.8%的数据没有被采集中。对于这部分大约36.8%的没有被采样到的数据,

咱们经常称之为袋外数据(Out Of Bag, 简称OOB)。这些数据未参与训练集模型的拟合,能够用来检测模型的泛化能力。

bagging对于弱学习器最经常使用的通常也是决策树和神经网络。bagging的集合策略也比较简单,对于分类问题,一般使用相对多数投票法。对于回归问题,一般使用算术平均法。

2. 集成学习之结合策略

上面几节主要关注于学习器,下面就对集成学习之结合策略作一个总结。咱们假定我获得的T个弱学习器是 [公式]

2.1 平均法

平均法一般用于回归问题。

最简单的平均是算术平均,即:
[公式] 
也能够是每一个个体学习器的加权平均,即 :
[公式] 
其中 [公式] 是个体学习器 [公式] 的权重, [公式] 。

2.2 投票法

对于分类问题一般使用投票法。

假设咱们的预测类别是 [公式] ,对于任意一个预测样本 [公式] ,咱们的 [公式] 个弱学习器的预测结果分别是 [公式] 。主要有如下三种:

  • 相对多数投票法:也就是少数服从多数,即预测结果中票数最高的分类类别。若是不止一个类别得到最高票,则随机选择一个做为最终类别。
  • 绝对多数投票法:即不光要求得到最高票,还要求票过半数。
  • 加权投票法:每一个弱学习器的分类票数要乘以一个权重,最终将各个类别的加权票数求和,最大的值对应的类别为最终类别。

2.3 Stacking

平均法和投票法仅是对弱学习器的结果作简单的逻辑处理,而stacking是再加上一层权重学习器(Meta Learner),基学习器(Base learner)的结果做为该权重学习器的输入,获得最终结果。

以两层为例,第一层由多个基学习器组成,其输入为原始训练集,第二层的模型则是以第一层基学习器的输出做为训练集进行再训练,从而获得完整的stacking模型。

以下图所示为Stacking的工做原理:

其中基学习器(Base learner)称为初级学习器,用于结合的学习器(Meta Learner)称为次级学习器。对于测试集,咱们首先用初级学习器预测一次,将其输入次级学习器预测,获得最终的预测结果。

以5折划分为例,咱们将原始训练集分为5折,分别记为fold一、fold二、fold三、fold4和fold5。此时咱们使用fold2-fold5的数据来训练基模型1,并对fold1进行预测,该预测值即做为基模型1对fold1生成的元特征;

一样地,使用fold一、fold3-fold5的数据来训练基模型1,并对fold2进行预测,该预测值即做为基模型1对fold2生成的元特征;以此类推,获得基模型1对整个原始训练集生成的元特征。

一样地,对其余基模型也采用相同的方法生成元特征,从而构成用于第二层模型(下记为元模型,meta model)训练的完整元特征集。对于测试集,咱们能够在每次基模型训练好时预测,再将预测值作均值处理;

也能够将基模型拟合所有的训练集以后再对测试集进行预测。

须要注意的是,在生成第二层特征的时候,各个基模型要采用相同的Kfold,这样获得的元特征的每一折(对应于以前的K折划分)都将不会泄露进该折数据的目标值信息 ,

从而尽量的下降过拟合的风险。虽然如此,实际上咱们获得的元特征仍是存在必定程度上的信息泄露,好比咱们在预测第二折的时候,是利用了第一折的目标值信息用于训练基模型的,

也就是说第一折的目标值信息杂糅在对第二折进行预测的基模型里。可是,实践中,这种程度的信息泄露所形成的过拟合程度很小。

可能仍是比较抽象,那咱们用案例描述一下:

上半部分是用一个基础模型进行5折交叉验证,如:用XGBoost做为基础模型Model1,5折交叉验证就是先拿出四折做为training data,另一折做为testing data。

注意:在stacking中此部分数据会用到整个traing set。如:假设咱们整个training set包含10000行数据,testing set包含2500行数据,那么每一次交叉验证其实就是对training set进行划分,在每一次的交叉验证中training data将会是8000行,testing data是2000行。

每一次的交叉验证包含两个过程,1. 基于training data训练模型;2. 基于training data训练生成的模型对testing data进行预测。

在整个第一次的交叉验证完成以后咱们将会获得关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。

注意!在这部分操做完成后,咱们还要对数据集原来的整个testing set进行预测,这个过程会生成2500个预测值,

这部分预测值将会做为下一层模型testing data的一部分,记为b1。

由于咱们进行的是5折交叉验证,因此以上说起的过程将会进行五次,最终会生成针对trainning set数据预测的5列2000行的数据a1,a2,a3,a4,a5,对testing set的预测会是5列2500行数据b1,b2,b3,b4,b5。

在完成对Model1的整个步骤以后,咱们能够发现a1,a2,a3,a4,a5其实就是对原来整个training set的预测值,将他们拼凑起来,会造成一个10000行一列的矩阵,记为A1。

而对于b1,b2,b3,b4,b5这部分数据,咱们将各部分相加取平均值,获得一个2500行一列的矩阵,记为B1。

以上就是stacking中一个模型的完整流程,stacking中同一层一般包含多个模型,假设还有Model2: LR,Model3:RF,Model4: GBDT,Model5:SVM,

对于这四个模型,咱们能够重复以上的步骤,在整个流程结束以后,咱们能够获得新的A2,A3,A4,A5,B2,B3,B4,B5矩阵。

在此以后,咱们把A1,A2,A3,A4,A5并列合并获得一个10000行五列的矩阵做为training data,B1,B2,B3,B4,B5并列合并获得一个2500行五列的矩阵做为testing data。让下一层的模型,基于他们进一步训练。

 

 

 

 

其实西瓜书里讲的比较粗,我也不清楚究竟是上面的博客讲错了,仍是西瓜没有讲细节,吐血三升。

西瓜书内容以下:

相关文章
相关标签/搜索