Python3机器学习实践:集成学习之Stacking(模型堆叠)

stacking.png
image

一、Stacking流程图

Stacking是个多层的多模型集合方法。每一层都可包括多个模型,下一层利用上一层模型的结果进行学习。下面以2层为例介绍此方法:

  • 2层Stacking运行示意图

image

  • Stacking第一层中模型Mi的运行示意图

image

image

二、Stacking步骤说明

  • 数据集说明

训练数据集设为DT,假设样本数为3000;预测数据集合为DP,假设样本数为500;将训练数据集进行K-Fold(K折)处理,也就是将训练数据集均分为K份,每一份之间都是不重复的。将其中1份当做验证(测试)数据集,其中K-1份当做训练数据集;这样就行成了K对训练数据集和测试数据集的组合;在本例中如果将K定义为为10,也就是每一折的训练数据为2700条,测试数据为300条,预测数据始终为500条。将这10折数据集定义为k1,K2,……,k10,其中ki=(DTi,DAi),两者分别表示第i折数据集中的训练,验证。

  • 层说明

  • 第一层

假设第一层有M个模型,分别是M1,M2,……, MM。现在以模型M1为例,针对第1折的训练数据进行学习,学习完成后,对测试数据预测得到结果TE_M1_k1,其序列长度为300,因为每一折的测试数据为300条。接着对预测数据进行预测得到结果DP_M1,其序列长度为500,因为预测数据集为500条。 按照此步骤,待10折数据集全部学习完毕后:

  1. 测试数据集得到的结果为TE_M1_k1,TE_M1_k2,……,TE_M1_k10,其实将他们结合起来恰好是原始训练数据集的条数10*300=3000,也就是说每个训练样本都对应有一个结果。将这个结果序列定义为训练数据集的特征F_M1。

  2. 预测数据集得到的结果为DP_M1,DP_M2,……,DP_M10,也就是对于预测数据集中的样本而言,每个样本都有10个结果,现在对这10个结果计算平均值,得到的序列定义为预测数据集的特征F_M1。

M个模型均按照上面的说明,完成后。就可以得到训练数据集的新的M个特征:F_M1,,F_M2,……,F_MM。同样的,预测数据集得到了同样的10个特征。

  • 第二层

如果多层的话,这一层的设置可以类似于第一层进行设计。因为本例是2层的,因此在这一层,就利用一个模型M0,然后将上一层得到的新的特征作为训练数据集的输入,此处注意不再利用原始的特征,为了避免过拟合。当然输出还是原始训练数据集的输出,进行学习。学习完毕后,对由新特征形成的预测数据集进行预测,从而得到最终的结果**。**

image

三、Stacking实例

  • 北京Pm2.5预测(回归)

  • Stacking第一层模型的各自结果

image

  • Stacking第二层BPNN的训练误差曲线

image

  • Stacking最终的结果

image

  • 成年人收入(分类)

  • Stacking第一层模型结果

image

  • 第二层为XGBoost最终结果

image

实例代码Stacking,扫描下方二维码或者微信公众号直接搜索”Python范儿“,关注微信公众号pythonfan, 获取更多实例和代码。pythonfan.jpg

猜你喜欢

转载自blog.csdn.net/qq_32882309/article/details/85597138