Stacking

Table of Contents

1. Stacking 简介

Stacking 是一种集成学习(Ensemble Learning)方法,它于 1992 年由 David H. Wolpert 提出。

2. Stacking 算法

Stacking 先从初始数据集训练出“初级学习器”,然后“生成”一个新数据集用于训练“次级学习器”(也称为“元学习器,meta-learner”)。 在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。

Stacking 的算法描述如图 1 所示。Stacking 的初级学习器可以是任意分类器,次级学习器一般使用 Multi-response linear regression ,次级学习器的输出作为整个学习器的输出。

stacking.jpg

Figure 1: Stacking 算法

比如,有下面训练数据: x1;y1,x2;y2,x3;y3,x4;y4,x5;y5,x6;y6 ,其中 y1,y2,y3,y4,y5,y6 是对应数据的标签。

假设共有两个初级学习器,第 1 个初级学习器 L1 对 6 个训练数据的实际输出为 z11,z21,z31,z41,z51,z61 ;第 2 个初级学习器 L2 对 6 个训练数据的实际输出为 z12,z22,z32,z42,z52,z62 。则我们用下面数据作为次级学习器的训练数据:
(z11,z12);y1(z21,z22);y2(z31,z32);y3(z41,z42);y4(z51,z52);y5(z61,z62);y6

2.1. 防止过拟合

在训练阶段,次级学习器的训练数据由初级学习器产生,若直接用初级学习器的训练集来产生次级训练集,则过拟合的风险会比较大;因此,一般是通过使用交叉验证或留一手(Hold-Out)这样的方式, 用训练初级学习器未使用的样本产生次级学习器的训练样本。

比如,在前面介绍的例子中,第 1 个初级学习器 L1 对 6 个训练数据的实际输出为 z11,z21,z31,z41,z51,z61 。得到它们时,要注意下面事项:获得得到 x1 的输出 z11 时,不能拿数据 x1;y1 来训练,因为这太容易过拟合了。所以我们要排除 x1;y1 ,即拿数据 x2;y2,x3;y3,x4;y4,x5;y5,x6;y6 训练得到的模型来得到 x1 的输出 z11 。类似地,要排除 x2;y2 ,即拿数据 x1;y1,x3;y3,x4;y4,x5;y5,x6;y6 训练得到的模型来得到 x2 的输出 z21 ,其它依此类推,且对于第 2 个初级学习器 L2 也有类似的要求。

3. 参考

《机器学习,周志华,2016》,8.4.3,学习法

Author: cig01

Created: <2017-08-26 Sat>

Last updated: <2017-12-17 Sun>

Creator: Emacs 27.1 (Org mode 9.4)