相关文章
【机器学习】集成学习 (Ensemble Learning) (一) —— 导引
【机器学习】集成学习 (Ensemble Learning) (二) —— Bagging 与 Random Forest
【机器学习】集成学习 (Ensemble Learning) (三) —— Boosting 与 Adaboost + GBDT
目录
2.3 堆叠法 (Stacking) 与 融合法 (Blending)
2.3 堆叠法 (Stacking) 与 融合法 (Blending)
2.3.1 Stacking
Stacking 学习几个不同的弱学习器,并通过训练一个元模型来组合这些弱模型的输出,作为最终的预测结果。
Stacking 与 Bagging、Boosting 相比,主要 差异 如下:
- Stacking 主要使用 异质弱学习器(不同模型),而 Bagging 和 Boosting 主要使用 同质弱学习器
- Stacking 训练一个 元模型 来组合基础模型,而 Bagging 和 Boosting 则 根据 确定性算法 组合弱学习器
因此,为构建 Stacking 模型,需定义至少两部分(通常是 2 层)模型
- 多个需要拟合的 弱学习器模型
- 一个用于组合各弱学习器模型的 元模型
例如,对于分类问题,可选 KNN、Logistic Regression、SVM 等作为弱分类器,并采用学习神经网络 NN 作为元模型。然后,神经网络将会把三个弱学习器的输出作为输入,并返回基于该输入的最终预测。所以,假设要拟合由 L 个弱学习器组成的 Stacking 集成模型,须遵循以下步骤:
- 将训练数据分为两组;
- 选择 L 个弱学习器,用它们拟合第一组数据;
- 使 L 个学习器中的每个学习器对第二组数据中的观测数据进行预测;
- 在第二组数据上拟合元模型,使用弱学习器做出的预测作为输入。
在前面的步骤中,将数据集一分为二,因为对用于训练弱学习器的数据的预测与元模型的训练 不相关。因此,将数据集分成两部分的一个 明显缺点 是:只有一半的数据用于训练基础模型,另一半数据用于训练元模型。
为克服这种限制,可使用某种 K 折交叉训练 方法(类似于 K 折交叉验证的做法)。这样所有的观测数据都可用来训练元模型:对于任意观测数据,弱学习器的预测都是通过在 K-1折数据(不包含已考虑的观测数据)上训练这些弱学习器的实例来完成的。换言之,它在 K-1 折数据上训练,在剩下 1 折数据上预测。迭代地重复改过程,就可得到对任 1 折观测数据的预测结果。这样一来,就可为数据集中的每个观测数据生成相关的预测,然后使用所有这些预测结果训练元模型。
Stacking 从数据集中训练出初级学习器,然后 ”生成“ 一个新的数据集用于训练次级学习器。由于深度学习模型一般需要较长的训练周期,如果硬件设备不允许建议选取留出法,如果需要追求精度可以使用交叉验证的方法。加之为防止过拟合,可采用 K 折交叉验证 求解。假设采用 5 折交叉验证,每个模型都要做满 5 次训练和预测,对于每一次:
- 从 80% 的数据训练得到一个模型 ht,然后预测训练集剩下的 20%,同时也要预测测试集。
- 每次有 20% 的训练数据被预测,5 次后正好每个训练样本都被预测过了。
- 每次都要预测测试集,因此最后测试集被预测 5 次,最终结果取 5 次的平均。
一个示例:
Stacking 算法