- Stacking第一层中模型Mi的运行示意图
- 2层Stacking运行示意图
Stacking是个多层的多模型集合方法。每一层都可包括多个模型,下一层利用上一层模型的结果进行学习。下面以2层的为例介绍此方法:
- 数据集说明
训练数据集设为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折数据集全部学习完毕后:
-
测试数据集得到的结果为TE_M1_k1,TE_M1_k2,……,TE_M1_k10,其实将他们结合起来恰好是原始训练数据集的条数10*300=3000,也就是说每个训练样本都对应有一个结果。将这个结果序列定义为训练数据集的特征F_M1。
-
预测数据集得到的结果为DP_M1,DP_M2,……,DP_M10,也就是对于预测数据集中的样本而言,每个样本都有10个结果,现在对这10个结果计算平均值,得到的序列定义为预测数据集的特征F_M1。
M个模型均按照上面的说明,完成后。就可以得到训练数据集的新的M个特征:F_M1,F_M2,……,F_MM。同样的,预测数据集得到了同样的10个特征。
- 第二层
如果多层的话,这一层的设置可以类似于第一层进行设计。因为本例是2层的,因此在这一层,就利用一个模型M0,然后将上一层得到的新的特征作为训练数据集的输入,此处注意不再利用原始的特征,为了避免过拟合。当然输出还是原始训练数据集的输出,进行学习。学习完毕后,对由新特征形成的预测数据集进行预测,从而得到最终的结果。