当前位置: 首页 > news >正文

集成学习之 Stacking(堆叠集成)

在前面我们已经介绍了 BaggingBoosting 两种经典的集成学习方法。今天我们来学习集成学习的另一种重要方式——Stacking(堆叠泛化,Stacked Generalization)

Stacking 的核心思想是:通过多个不同类型的基学习器(Base Learners)进行预测,并将这些预测结果作为新的特征输入到一个“元学习器”(Meta Learner),由元学习器进行最终预测。

📌 一、Stacking 的基本思想

不同于 Bagging 的“并行”训练和 Boosting 的“串行”训练,Stacking 是一种分层的模型集成方法

  • 第 1 层(基学习器层):训练多个不同的模型(如决策树、SVM、逻辑回归、神经网络等),分别得到预测结果。

  • 第 2 层(元学习器层):将第 1 层模型的预测结果作为输入特征,再训练一个新的学习器(通常是线性模型或逻辑回归)进行最终预测。

这种方法能够充分利用不同模型的优点,降低单一模型的偏差或方差,提高整体预测性能。

📌 二、数学公式表示

假设我们有一个训练数据集:

\mathcal{D} = \{(x_1, y_1), (x_2, y_2), \dots, (x_n, y_n)\}, \quad x_i \in \mathbb{R}^d, \; y_i \in \mathbb{R}

1. 基学习器(Base Learners)

我们训练 K 个不同的基学习器:

h_1(x), \; h_2(x), \; \dots, \; h_K(x)

它们分别对输入样本 x_i 给出预测:

z_{ik} = h_k(x_i), \quad k = 1, 2, \dots, K

于是,我们得到一个新的特征向量:

z_i = \big(h_1(x_i), h_2(x_i), \dots, h_K(x_i)\big)

2. 元学习器(Meta Learner)

元学习器 HHH 接收新的输入特征向量 z_i,并学习一个函数:

\hat{y}_i = H(z_i) = H(h_1(x_i), h_2(x_i), \dots, h_K(x_i))

最终的 Stacking 模型为:

\hat{y} = H\big(h_1(x), h_2(x), \dots, h_K(x)\big)

📌 三、Stacking 的训练流程

  1. 划分数据集:通常需要将训练集划分为多折(K-fold cross validation),避免基学习器的过拟合。

  2. 训练基学习器:在训练集上训练多个不同的模型,并在验证集上得到预测输出。

  3. 生成新特征:将基学习器的预测结果作为新的特征,构建一个新的训练集。

  4. 训练元学习器:用这些新特征作为输入,真实标签作为输出,训练一个元学习器。

  5. 最终预测:在测试集上,先通过基学习器得到预测,再输入元学习器,输出最终结果。

📌 四、Stacking 的优点与缺点

✅ 优点

  • 能够充分结合不同模型的优点,提高预测精度。

  • 更加灵活,基学习器和元学习器可以自由选择。

  • 在 Kaggle 等数据竞赛中表现优秀,是常用的制胜策略。

❌ 缺点

  • 训练复杂度较高,训练和验证过程需要更多计算。

  • 容易过拟合,特别是当基学习器和元学习器过于复杂时。

  • 实现比 Bagging、Boosting 更复杂。

📌 五、应用场景

  • Kaggle 数据竞赛:Stacking 是 Kaggle 上的常见获胜手段,通过融合多种模型得到更鲁棒的结果。

  • 金融风控:使用多个模型预测信用违约率,最后由元学习器给出最终判断。

  • 医疗诊断:结合逻辑回归、SVM、神经网络等多种模型,提升疾病预测的准确率。

📌 六、Stacking 结构图(描述)

  • 输入层:原始特征 x

  • 基学习器层:多个不同的模型 h_1, h_2, \dots, h_K​,输出预测结果。

  • 元学习器层:将基学习器的输出作为输入,再进行最终预测。

(图示可画成两层结构,第一层是多个并行模型,第二层是一个元学习器汇总结果。)

📌 七、总结

  • Stacking 与 Bagging、Boosting 一样,属于集成学习方法。

  • 它的特点是 分层建模:基学习器 → 元学习器。

  • 适用于对模型效果要求较高的场景,但计算复杂度较大。

一句话总结:

Stacking 就像是“模型中的元模型”,通过让多个模型“投票”,再交由一个最终裁判(元学习器)决定结果,从而提升预测性能。

http://www.dtcms.com/a/353931.html

相关文章:

  • django配置多个app使用同一个static静态文件目录
  • 使用openCV(C ++ / Python)的Alpha混合
  • 【高级机器学习】 2. Loss Functions(损失函数)
  • 一、快速掌握Python 中的文件操作知识体系
  • mysql zip包安装步骤
  • 2025(秋)中国国际健康产业(成都)博览会:探索健康未来辉煌
  • TCP 并发服务器构建
  • 场外期权能做套利吗?
  • 二叉树的工程实践与高频问题(续):从LeetCode真题到系统设计的深度剖析
  • centos7 安装指定版本的fastfds
  • 了解CDC(变更数据捕获)如何革新数据集成方式
  • Linux 系统调优工具与实践指南
  • 个人博客系统系统---测试报告
  • HarmonyOS布局实战:用声明式UI构建自适应电商卡片
  • 【源码分析】@vue/runtime-dom/src/apiCustomElement.ts 解析
  • 重磅升级,Pixso 2.0赋能HarmonyOS应用设计与开发
  • 安卓11 12系统修改定制化_____如何修改固件 实现给指定内置的应用无障碍权限
  • Sybase 安装与备份
  • 【c++】超好玩游戏
  • 一、CSS3 新增选择器(非 “属性”,但为核心基础)
  • day082-初识ElasticStack
  • 路由基础(二):路由表和FIB表
  • Ansible文件管理与Jinja2模板
  • Linux查看SFTP登录不上的问题以及解决
  • 【Simulink专题】Simulink模型:MIL单元测试
  • 宝塔发布ktg-mes
  • vue cli 没使用的图片会被打包吗
  • 2025年08月27日Github流行趋势
  • 怎么更新 cargo.exe ?(Rust 工具链)
  • etcd-基本工作原理及部署