学习笔记——集成学习总结,包含: Bagging、Boosting、Stacking、Blending

一.基本思想

在机器学习的问题中,我们目标是构建模型来作出准确的预测。但实际上,单个的模型往往难以有比较好的预测效果。所以我们通过学习多个弱学习器,并最终进行组合的方法,来构造强学习器,从而达到更好的预测效果。
集成学习常见的种类:

  1. bagging
  2. boosting
  3. stacking
  4. blending

下图是集成学习的常见的结构图。
在这里插入图片描述

二.Bagging

Bagging是一种并行的算法,它的弱学习器之间没有依赖关系。的一个关键点在于它的Bootstrap Sample(自助采样),实际上是一种有放回的随机抽样(这里的有放回的意思是抽一个放回一个)。
Bagging算法的流程如下:

  1. 给定训练集样本S,给定K个弱学习器。从S中利用Bootstrap方法抽取M的样本,作为一个训练样本集,重复K次,得到K个独立的训练样本集。
  2. 用采用得到的K个训练样本集来分别作为K个弱学习器的训练集来训练这K个弱学习器。
  3. 用K个弱学习器预测测试集,并融合结果(分类可以采用投票机制,回归可以采用平均的方法)

当学习算法不稳定时,可以用Bagging方法,因为Bagging方法可以有效的减少方差。
优点:减少了方差
缺点:由于又放回的随机抽样得到的训练集改变了原来的样本分布,一定程度上会引入偏差

另外,与Random Forest不同的是,RF(一般用Cart树)训练时虽然采样方法也是Boostrap,但是RF没有用到所有特征,而是抽样出一部分特征来进行训练。

三.Boosting

Boosting是一种串行的算法,它的弱学习器之间存在着强依赖关系。
它与bagging的不同:
1)样本选择:
Bagging:训练集是在原始集中有放回选取的,从原始集中选出的各轮训练集之间是独立的。
Boosting:每一轮的训练集不变,只是训练集中每个样例在分类器中的权重发生变化。而权值是根据上一轮的分类结果进行调整。
2)样例权重
Bagging:使用均匀取样,每个样例的权重相等
Boosting:根据错误率不断调整样例的权值,错误率越大则权重越大。
3)预测函数
Bagging:所有预测函数的权重相等。
Boosting:每个弱分类器都有相应的权重,对于分类误差小的分类器会有更大的权重。
4)并行计算
Bagging:各个预测函数可以并行生成
Boosting:各个预测函数只能顺序生成,因为后一个模型参数需要前一轮模型的结果。
5)计算效果
Bagging主要减小了variance,而Boosting主要减小了bias,而这种差异直接推动结合Bagging和Boosting的MultiBoosting的诞生

为什么bagging减少方差而boosting减少偏差?

boosting的基模型一般为弱模型(否则会导致方差过大),而bagging一般为强模型(否则偏差会偏大)

1.bagging中每个弱分类器都是近似的,但是其相关性不高,所以一般不能降低偏差,但可以一定程度上减低方差.单个弱分类器的方差: V a r ( f ( x ) ) = σ 2 Var(f(x))=\sigma^2 Var(f(x))=σ2
对于独立同分布的变量X1,X2…Xn来说有:

  1. V a r ( c X ) = E [ ( c X − E ( c X ) ) 2 ] = E [ ( c X − c E ( X ) ) 2 ] = c 2 E [ ( X − E ( X ) ) 2 ] = c 2 V a r ( X ) Var(cX)=E[(cX-E(cX))^2]=E[(cX-cE(X))^2]=c^2E[(X-E(X))^2]=c^2Var(X) Var(cX)=E[(cXE(cX))2]=E[(cXcE(X))2]=c2E[(XE(X))2]=c2Var(X)
  2. V a r ( X 1 , X 2.. X n ) = V a r ( X 1 ) + V a r ( X 2 ) + . . . + V a r ( X n ) Var(X1,X2..Xn)=Var(X1)+Var(X2)+...+Var(Xn) Var(X1,X2..Xn)=Var(X1)+Var(X2)+...+Var(Xn)

基于上面的条件,对独立和近似的n个弱分类器进行组合时: V a r ( ∑ f ( x ) n ) = 1 n 2 V a r ( ∑ f ( x ) ) = 1 n V a r ( f ( x ) ) = 1 n σ 2 Var(\frac{\sum f(x)}{n})=\frac{1}{n^2}Var(\sum f(x))=\frac{1}{n}Var(f(x))=\frac{1}{n}\sigma^2 Var(nf(x))=n21Var(f(x))=n1Var(f(x))=n1σ2

所以,bagging能减少方差。

bagging之所以不能减少偏差是因为: E ( ∑ f ( x ) n ) = E ( f ( x ) ) E(\frac{\sum f(x)}{n})=E(f(x)) E(nf(x))=E(f(x))

2.Boosting采用的是贪心算法(每次寻找局部最优),最优的目标就是减少损失函数(即减少偏差),所以能够有效减少偏差。但是由于基模型之间存在强相关性,所以不能降低方差。

四.Stacking

我们以两层的Stacking为例(实际可以多层),第一层为两个模型M1,M2,第二层为一个模型M3。对于整体的数据集划分为Traing set (800个样本)和Testing set(200个样本)。

  1. 首先对第一层的两个模型M1,M2进行训练,训练的方法是对训练集进行K折交叉,这里以5折交叉为例。对M1进行5折交叉验证(160个样本作为验证集,640个样本作为训练集),每个交叉用640个样本进行训练,对160个样本进行预测,得到这160个样本的预测值 T r a 11 Tra_{11} Tra11, 此时除了对160个验证集做预测外,还需要对Testing set的200个样本做预测得到预测值 T e s 11 Tes_{11} Tes11。对模型M1做完五折交叉后,会得到5*160个样本的预测值(这里 T r a 11 + T r a 12 + T r a 13 + T r a 14 + T r a 15 = T r a 1 Tra_{11}+Tra_{12}+Tra_{13}+Tra_{14}+Tra_{15}=Tra_1 Tra11+Tra12+Tra13+Tra14+Tra15=Tra1,就是整个800个样本Traing set的预测值),另外还得到了5个对Testing set的200个样本的预测值( T e s 11 , T e s 12 , T e s 13 , T e s 14 , T e s 15 Tes_{11} ,Tes_{12} ,Tes_{13},Tes_{14},Tes_{15} Tes11,Tes12,Tes13,Tes14,Tes15)。我们对5个样本的预测值做平均得到 T e s 1 Tes_1 Tes1。同样的,对模型M2进行训练,得到 T r a 2 Tra_2 Tra2 T e s 2 Tes_2 Tes2
  2. 然后我们将前一步模型M1得到的 T r a 1 Tra_1 Tra1和模型M2得到的 T r a 2 Tra_2 Tra2作为模型M3的训练集输入特征,对应的标签作为训练集的标签来训练模型M3。模型M1得到的 T e s 1 Tes_1 Tes1和模型M2得到的 T e s 2 Tes_2 Tes2作为测试集的输入特征,来输出得到最终的预测值。

Stacking本质是把第一层模型的预测值作为第二层的输入。而对于训练集来说,我们不能在第一层就拿训练集作为输入,来预测训练集,因为会导致过拟合,所以第一步需要K折交叉。如果不考虑过拟合,我们最简单的做法就是,用Traing set训练M1和M2,再用M1,M2来对Traing set做预测,结果输入到第二层。当然,还要一种方法是Blending,这种方法相对于Stacking来说更简便,但是也可能会导致过拟合的问题。

五.Blending

  1. 同样的,将数据集划分为Traing set (800个样本)和Testing set(200)个样本。再将Traing set划分为验证集(200个样本)和训练集(600个样本),与Stacking不同的是,这里不采用K折交叉,而是采用Hold-out.
  2. 用训练集600个样本训练第一层的模型M1,M2。再用训练好的模型对验证集200个样本做预测,和对Testing set 的200个样本做预测。
  3. 用验证集200个样本的预测结果作为训练集来训练M3。将M1和M2对Testing set的预测结果作为输入,来利用M3预测Testing set的输出。

Blending有点像是Stacking的简化版,不同点就是将第一层的K折换成了Hold-out.

六.Blending与Stacking的对比

1.时间上,Blending花费更短。Blending采用的Holdout比Stacking的KFold更省时间。比如对于5折来说,每次将4份数据输入来训练模型,再将一份数据输入来做预测,也就是5折中每次都要将所有训练数据输入。假如训练数据为N,那么5折,模型需要接收的数据为5*N个。但是对于Holdout来说,只需要将划分的训练集作为输入来训练和测试集作为输入来预测,接收的数据为N个。
2.Blending的二级模型数据量会比较少。因为对于Holdout来说,给到第二层模型的数据量只有Holdout中的测试集部分,数据量会比较少。这一点可能会导致过拟合。
3.Stacking存在数据泄露的问题,因为第一层K折用到的数据集和第二层用到的数据集存在重复,所以存在数据泄露问题,这一点也可能导致过拟合。而Blending中一级模型和二级模型用的数据集是完全分开的。
4.Blending相对于Stacking来说更简单。

参考文献
Bagging Boosting https://www.cnblogs.com/cgmcoding/p/13567288.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值