← 返回题目列表

什么是 Stacking 和 Blending?和 Bagging/Boosting 有什么不同?

高频 困难 第 9 / 25 题 更新于 2026/08/02
集成学习StackingBlending元模型

简化版

Stacking(堆叠) 是一种「用模型来组合模型」的集成:先训练多个不同类型的基学习器(如逻辑回归、随机森林、XGBoost),把它们的预测输出当作新特征,再训练一个元模型(meta-learner) 学习「如何最好地组合这些基学习器」。为避免元模型学到基模型的过拟合信息,Stacking 用K 折交叉验证的方式生成基模型对训练集的「out-of-fold」预测当元特征。Blending 是 Stacking 的简化版——用一个留出的验证集(holdout) 生成元特征,而不用 K 折,简单但更浪费数据。和 Bagging/Boosting 的区别:后两者组合同质弱学习器、用简单投票/加权;Stacking 组合异质强学习器、用可学习的元模型融合。

详细版

三种集成流派对比:

BaggingBoostingStacking
基学习器同质(同类树)同质(同类弱树)异质(不同算法)
训练并行独立串行纠错基模型并行 + 元模型
组合方式平权投票/平均加权累加元模型学习组合
代表随机森林GBDT竞赛冲榜常用

Stacking 流程(两层):

① 训练多个基学习器(Level-0):LR、RF、XGB、SVM...
② 用 K 折交叉验证生成每个基模型对训练集的 out-of-fold 预测 → 组成元特征
③ 用元特征训练元模型(Level-1,常用简单模型如 LR)
④ 预测:新样本 → 各基模型预测 → 元模型给最终结果

Blending: 用 holdout 验证集(而非 K 折)生成元特征,简单、无泄露风险低但数据利用率低。

完整版教学

一、Stacking 的核心思想:让模型来学「怎么组合」

Bagging 和 Boosting 组合基学习器的方式是固定的、简单的——平权投票、或按固定规则加权。Stacking 则更进一步:既然「怎么组合多个模型」本身是个学习问题,为什么不用一个模型来学它?

于是 Stacking 分两层:

  • 第一层(Level-0,基学习器):训练多个不同类型的模型(逻辑回归、随机森林、XGBoost、SVM、神经网络……),它们各有所长、各自给出预测。
  • 第二层(Level-1,元学习器 meta-learner):把第一层各模型的预测输出当作新特征,训练一个元模型,学习「在什么情况下该更相信哪个基模型」,输出最终结果。

这样能融合异质模型的优势——线性模型抓线性、树抓非线性、SVM 抓边界,元模型把它们的长处综合起来,往往比任何单个模型都好。这是 Kaggle 竞赛冲榜的常用大杀器。

二、关键难点:怎么生成元特征而不泄露

Stacking 最容易出错、也是面试重点的地方是:怎么用基模型的预测生成元模型的训练特征?

错误做法:用全部训练数据训练基模型,再用同一批训练数据让基模型预测、拿这些预测当元特征。这样严重数据泄露——基模型在训练集上「见过答案」,预测过于乐观,元模型学到的是基模型的过拟合,泛化崩溃。

正确做法:用 K 折交叉验证生成 out-of-fold(OOF)预测

把训练集分成 K 折:
for 每一折 k:
   用「其余 K-1 折」训练基模型
   对「第 k 折」预测 → 得到第 k 折的元特征(这一折是基模型没见过的)
拼起来 → 整个训练集的 out-of-fold 预测,作为元模型的训练特征

关键在于:每个样本的元特征,都来自「没有用它训练过」的基模型——这样元特征就模拟了「基模型对未知数据的预测」,元模型学到的才是真本事,不泄露。对测试集,则用全量训练数据训练的基模型(或 K 个基模型平均)来预测生成测试集元特征。

三、Blending:Stacking 的简化版

Blending 用更简单的方式生成元特征——留出一个验证集(holdout)

① 把训练集切成两部分:训练部分 + 留出验证部分(如 80% / 20%)
② 基模型只在「训练部分」训练
③ 让基模型对「留出验证部分」预测 → 作为元特征训练元模型
④ 测试集同样由基模型预测生成元特征

Blending vs Stacking:

Stacking(K 折)Blending(holdout)
元特征来源K 折 out-of-fold 预测单个留出验证集
数据利用充分(每个样本都用上)浪费(留出部分不参与基模型训练)
实现复杂简单
泄露风险需小心处理折简单、不易泄露
稳定性更稳依赖那一次划分、方差大

Blending 简单、不易出泄露 bug,但浪费了留出集的数据、结果依赖单次划分;Stacking 用满数据、更稳,但实现复杂、要小心 OOF 流程。

四、和 Bagging/Boosting 的本质区别

  • 基学习器:Bagging/Boosting 用同质的弱学习器(都是决策树);Stacking 用异质的强学习器(不同算法各展所长)。
  • 组合方式:Bagging 平权投票、Boosting 固定加权累加——都是预先定死的规则;Stacking 用可学习的元模型去拟合最优组合——组合方式是学出来的
  • 多样性来源:Bagging/Boosting 靠数据/样本权重制造多样性;Stacking 靠不同类型模型的天然差异制造多样性。

所以 Stacking 是「更高层次」的集成——它甚至可以把随机森林、GBDT 本身当作基学习器,再叠一层元模型。

五、实践要点与坑

  • 元模型宜简单:常用逻辑回归 / 线性模型作元模型,避免元层再过拟合(基模型输出已是强特征,元模型只需做简单的加权组合)。
  • 基模型要有多样性:选差异大的模型(线性 + 树 + 核方法…),太相似的基模型融合收益小。
  • 严格防泄露:OOF 流程要正确,别用「见过样本」的基模型预测生成它的元特征。
  • 可多层:理论上可以堆更多层,但收益递减、易过拟合、复杂度高,实践一般两层。
  • 收益 vs 成本:Stacking 常能再榨出一点精度(竞赛关键),但工程复杂、维护成本高、可解释性差,工业界要权衡。

六、常见追问

  • Stacking 为什么要 K 折 OOF? 防止元特征泄露——保证每个样本的元特征来自没训练过它的基模型。
  • 元模型为什么用简单模型? 基模型输出已很强,元模型只需学简单组合,复杂元模型易在元层过拟合。
  • Blending 和 Stacking 哪个好? Stacking 用满数据更稳、精度略高;Blending 简单省事、不易泄露,数据多时够用。
  • Stacking 基模型能包括 GBDT/RF 吗? 能,甚至鼓励——把不同集成模型再 stack,是竞赛常见套路。
  • 和投票法(Voting)区别? Voting 是固定平均/多数;Stacking 用元模型学习加权,更灵活。

七、用五折 OOF 说明为何不会泄露

有 1000 条训练数据做 5 折 Stacking,每轮用 800 条训练一级模型、给剩余 200 条生成预测;循环 5 次后,每条样本都得到一个“模型没见过它时”的 OOF 预测。若有 3 个一级模型,元训练集就是 1000×3 的预测矩阵。最终还要在全部 1000 条上重训 3 个一级模型,才能为测试集生成同定义的 3 列特征。

Z_train[i, model] = prediction from a fold model that did not train on i
meta_model.fit(Z_train, y_train)
Z_test = average_predictions_across_fold_models or predictions_from_refit_models
对象/方案核心机制选择或风险
StackingK 折 OOF 生成元特征数据利用率高、训练成本高
Blending固定 holdout 生成元特征简单快、浪费部分训练数据
直接平均不训练元模型泄漏风险低但组合能力有限
训练集 K 折 → 一级模型 OOF 预测 → 拼接元特征 Z
            → 元模型拟合 Z,y → 一级模型重训/折均值 → 测试预测

记忆钩子:Stacking 最容易错的不是模型选型,而是元特征必须来自样本未参与训练的预测。

八、常见误区与追问

  • 误区:一级模型在全训练集拟合后预测训练集即可做元特征。 这会把过拟合预测泄露给元模型。
  • 误区:Stacking 的一级模型越相似越稳。 高度同质的误差难提供互补信息。
  • 追问:分类时元特征用标签还是概率? 通常用概率或决策分数保留信息,并确保列顺序一致。
  • 追问:预处理在哪一层拟合? 每个折内分别拟合,避免标准化、编码或特征选择泄漏。
  • 追问:Blending 为什么更简单? 只需一次留出集预测,但元模型只看到较少数据。

九、加强记忆

Stacking = 两层「用模型组合模型」:第一层多个异质基学习器(LR、RF、XGB…)各自预测,把预测当新特征喂给第二层元模型学习最优组合。关键防泄露——用 K 折交叉验证生成 out-of-fold 预测当元特征(每个样本的元特征来自没训练过它的基模型),元模型宜用简单模型(如 LR)Blending 是简化版——用单个留出验证集生成元特征,简单不易泄露但浪费数据、依赖单次划分。与 Bagging/Boosting 的区别:后两者组合同质弱学习器 + 固定投票/加权,Stacking 组合异质强学习器 + 可学习的元模型。实践:基模型要多样、元模型要简单、严防 OOF 泄露,是竞赛冲榜常用但工程较重的手段。