集成学习之 Stacking

Contents

一、 背景

在前面我们也讲到了Stacking的思路,可以看Stacking模型融合,在这里为了简要介绍基本集成学习的方法,重复一下。 Stacking(堆叠):集成 k 个模型,得到 k 个预测结果,将 k 个预测结果再传给一个新的算法,得到的结果为集成系统最终的预测结果;

二、Stacking介绍

image1 图形介绍

  • 第一层为训练数据
  • 第二层为3个不同的算法
  • 第三层为使用这三个算法训练出的结果
  • 第四层为使用一个新的算法
  • 最后为新的预测结果

流程介绍

  • 使用3个算法,分别求出相对我们数据而言的预测结果,但是我们不直接使用这三个预测结果进行综合来得到最终的结果
  • 而是使用这三个预测结果作为输入,再添加一层算法
  • 训练一个新的模型
  • 并把新的模型结果作为我们最终的预测结果

特点

  • 解决回归问题时,将 3 个预测值传给 最上层的一个模型,得到的值为最终的预测值;
  • 解决分类问题时,3 个预测值为样本分类结果的最大概率值,传给最上层的一个模型,得到的最大的发生概率对应的类别为最终的预测类别;
  • 分类问题和回归问题,可以以我们预测这个样本在那个类别中的概率这个数值作为桥梁,我们就非常容易将回归问题转化成分类问题

三、训练Stacking集成学习分类器

image2 **训练过程

  • 最下层为训练数据集
  • 第二层为划分的子集
  • 第三层,其中一份用来训练底部这三个模型,第二份用来子集直接扔进训练好的三个模型,相应也就有了输出的结果,新的输出结果和第二份子集中相应的真值的输出就形成了一个新的数据集

四、更加复杂的模型

image3 思路

  1. 将训练数据集分割为 3 份:X_train_1、X_train_2、X_train_3,使用 X_train_1 训练出 3 个模型(训练方式可以有多种);(得到第一层的 3 个模型
  2. 将 X_train _2 数据集传入 3 个模型,得到 3 组预测结果,将 3 组预测结果与 X_train_2 数据集中的 y 值一起组合成一个新的数据集 X_train_new_1;(得到第一个新的数据集:X_train_new_1
  3. 使用 X_train_new_1 数据集再训练出 3 个模型,为第二层的模型;(得到第二层的 3 个模型
  4. 将 X_train _3 数据集传入第二层的 3 个模型,得到 3 组预测结果,再将 3 组预测结果与 X_train_3 数据集中的 y 值一起组合成一个新的数据集 X_train_new_2;(得到第二个新的数据集:X_train_new_2) 使用 X_train_new_2 训练出一个模型,作为最高层的模型;(得到第三层的 1 个模型

特点

  • 有几层就将 X_train 分成几份
  • 对于Stacking模型,几层是一个超参数,每层我们使用多少个模型,又是一个超参数,正因为如此,Stacking模型相应会复杂很多,也正因为复杂性,很容易过拟合

其它

  • 上图的逻辑思想类似神经网络,只不过对应神经网络来说,每一个神经元不是一个全新的算法,而只是计算一个函数的值;相应的,对应神经网络来说,如果层数增多的话就达*到了深度学习的模型;
  • 神经网络因其灵活度较高,容易出现过拟合;很多深度学习的话题,其本质就是在探讨,对于这样一个复杂的模型,如何解决其过拟合的问题;其中很多的方法也使用于 Stacking 集成学习算法;

五、小结

以上只是简单介绍了 Stacking 集成学习思路,对于其背后统计学知识后续会介绍到。在 Python 中我们可以使用 mlxtend 库进行Stacking集成学习。

Further Reading

[1] StackingClassifier


转载请注明:yezuolin的博客 » 点击阅读原文