机器学习之Stacking原理与实战

学习过机器学习相关基础的童鞋应该知道,从基学习器的类型可将集成学习分为两大类:

  • 同质集成(homogeneous)
    • Boosting:Adaboost、GBDT、XGboost、lightGBM等
    • Bagging:RandomForest
  • 异质集成(heterogenous)
    • Stacked Generalization(SG),也叫堆栈泛化

1、堆栈泛化(Stacked Generalization)的概念

以下图为例,简单介绍一下SG:

  • 将训练集分为3部分,分别用于让3个基学习器(base—learner)进行学习和拟合
  • 将3个基学习器预测得到的结果作为下一层学习器(meta-learner)的输入
  • 将下一层学习器得到的结果作为最终的预测结果

在这里插入图片描述

2、标准的Stacking

Stacking是一种通过元分类器组合多个分类模型的集成学习技术,如下图所示:

在这里插入图片描述

解释如下:

  1. 假设我们有10000个训练集,分类器模型为3个(XGB,RF,LightGBM)
  2. 首先用10000个数据训练XGB模型,并生成预测为p1(10000行1列)
  3. 同理用10000个数据分别训练RF、LightGBM模型,并生成预测为p2、p3(分别为10000行1列)
  4. 将p1、p2、p3合并称一起(p1、p2、p3)(10000行4列,其中第4列为初始样本的标签)作为第二层分类器(Meta-Classifier)的训练集
  5. 训练最后的Meta-Classifier,并预测最后的结果

Stacking先从初始数据集训练出初级学习器,然后"生成"一个新数据集用于训练次学习器,在这个新数据集中,初级学习器的输出被当做样例输入特征,而初始样本的标记仍被当做样例标记。Stacking的算法描述如下图所示,这里我们假定初级学习器使用不同的学习算法产生,即初级集成是异质的

在这里插入图片描述

但是这种方法因为信息泄露非常易于过拟合,因此我们采用k折交叉验证的方法生成的数据作为次学习器的训练集。

3、交叉验证Stacking

使用交叉验证的概念:数据集被拆分为k个折叠,在k个连续的循环中,k-1个折叠用于训练初级学习器;在每个循环中,初级学习器随后应用于其余的1个子集,而这些子集在每次迭代中都不用于模型拟合。然后将得到的预测进行叠加,并作为输入数据来训练次级分类器。如下图所示:

在这里插入图片描述

上图解释如下:

  1. 假设我们有12500个数据集,将其划分为Training Data(10000个数据)与Test Data(2500个数据)
  2. 我们采用5折交叉验证
    • 第一折:Training Data划分为train-set(8000个)与test-set(2000个),使用train-set训练model1(如XGB),然后用model1预测test-set(2000个)得到预测集t1(2000行1列),接着用model1预测Test Data(2500个)得到预测集p1(2500行1列)
    • 第二折:Training Data划分为train-set(8000个)与test-set(2000个),使用train-set训练model1(如XGB),然后用model1预测test-set(2000个)得到预测集t2(2000行1列),接着用model1预测Test Data(2500个)得到预测集p2(2500行1列)
    • ……
    • 第五折:Training Data划分为train-set(8000个)与test-set(2000个),使用train-set训练model1(如XGB),然后用model1预测test-set(2000个)得到预测集t5(2000行1列),接着用model1预测Test Data(2500个)得到预测集p5(2500行1列)
  3. 将t1、t2……t5纵向叠起来变成T1(10000行1列),将p1、p2……p5平均求和P1(2500行1列),T1与P1将在以后作为次级学习器的训练集与测试集
  4. 对model2(如RF)同样进行上述步骤,得到T2、P2
  5. 将T1与T2横向叠加变成T(10000行2列)作为次级学习器的输入样例;将P1与P2横向叠加变成P(2500行3列,其中一列为测试集样本的真实标签)作为次级学习器的测试集
  6. 一般采用LR作为次级学习器训练模型,从而得到最终结果。

在这里插入图片描述

在这里插入图片描述


实战网站:

  1. StackingCVClassifier
  2. StackingClassifier
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值