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

机器学习_10、集成学习-Bagging(自举汇聚法)

Bagging(自举汇聚法)

Bagging(Bootstrap Aggregating,自举汇聚法)是一种集成学习方法,由Leo Breiman于1996年提出。它旨在通过结合多个模型来提高单个预测模型的稳定性和准确性。Bagging方法特别适用于减少高方差模型(如决策树)的过拟合问题,从而提高模型的泛化能力。

工作原理

Bagging的核心思想是通过并行地训练多个独立的预测模型,并将它们的预测结果进行汇总(对于分类任务通常采用投票机制,对于回归任务则采用平均),以此来提高整体模型的预测性能。具体步骤如下:

  1. 自助采样(Bootstrap sampling):从原始训练数据集中使用有放回的抽样方法随机选取N个样本,形成一个新的训练集。这个过程重复K次,生成K个不同的训练集。这些训练集之间可能有重叠的样本。

  2. 独立训练:对每个生成的训练集,独立地训练一个基预测模型。这些基模型可以是任何类型的模型,但在实践中常用决策树。每个模型只看到数据的一部分子集,这有助于模型学习到数据的不同方面。

  3. 汇总预测

    • 对于分类问题,最终的预测结果通常是通过投票机制得到的,即选择出现次数最多的类别标签作为最终预测。
    • 对于回归问题,最终的预测结果是通过计算所有单个模型预测值的平均值得到的。

优点

  • 减少方差:Bagging通过构建多个模型并汇总它们的预测结果,可以有效减少模型的方差,降低过拟合风险。
  • 提高鲁棒性:即使基模型的性能不是很好,通过Bagging也能提高整体模型的稳定性和准确性。
  • 易于实现并行化:由于各个基模型的训练是相互独立的,因此Bagging方法很容易进行并行化处理,提高计算效率。
  • 灵活性:Bagging方法可以与各种类型的预测模型结合使用,增加了方法的通用性。

应用场景

Bagging方法广泛应用于各种机器学习任务中,尤其是那些模型容易受到过拟合影响的场景。随机森林(Random Forest)就是一种基于决策树和Bagging原理的集成学习算法,它在多个领域内都表现出了优异的性能,如金融风险评估、医学诊断、图像识别等。此外,Bagging技术也适用于提升那些本身就表现不错但希望进一步提高准确度的模型性能。

#coding=utf-8
#BaggingClassifier.py
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.ensemble import BaggingClassifier# 加载葡萄酒数据集
wine = load_wine()
X, y = wine.data, wine.target# 划分训练集与测试集
X_train, X_test, y_train, y_test = \train_test_split(X, y, stratify=y, random_state=0)# 创建基本分类模型对象
gnb_clf = GaussianNB()# 创建集成学习器
bc = BaggingClassifier(gnb_clf, n_estimators=20,max_samples=0.5, bootstrap=True,random_state=0)
# 训练模型
bc.fit(X_train, y_train)
print("训练集准确率:",bc.score(X_train,y_train),sep="")
print("测试集准确率:",bc.score(X_test,y_test),sep="")
print("测试集前三个样本的预测标签:",bc.predict(X_test[:3]))
print("测试集前三个样本的真实标签:",y_test[:3])
print("测试集前三个样本的标签预测概率:\n",bc.predict_proba(X_test[:3]),sep="")

http://www.lryc.cn/news/309720.html

相关文章:

  • 【力扣hot100】刷题笔记Day20
  • Redis 之八:Jdeis API 的使用(Java 操作 Redis)
  • Docker 应用入门
  • 朱维群将出席用碳不排碳碳中和顶层科技路线设计开发
  • linux如何查看磁盘占用情况
  • 【C++庖丁解牛】类与对象
  • 在什么时候企业档案才会发生调整
  • Linux或Windows下判断socket连接状态
  • 编译链接实战(25)gcc ASAN、MSAN检测内存越界、泄露、使用未初始化内存等内存相关错误
  • [HackMyVM]靶场 VivifyTech
  • 软考高级系统分析师:关联关系、依赖关系、实现关系和泛化关系概念和例题
  • 设计模式学习笔记 - 面向对象 - 9.实践:如何进行面向对象分析、设计与编码
  • 【iOS ARKit】RealityKit 同步机制
  • 【数据结构与算法】整数二分
  • java项目打包运行报异常:xxxxx-1.0-SNAPSHOT.jar中没有主清单属性
  • MAC-键盘command快捷键、设置windows快捷键
  • C++ 补充之常用遍历算法
  • 【Linux杂货铺】调试工具gdb的使用
  • FL Studio Producer Edition2024中文进阶版Win/Mac
  • 无需邀请码,Xinstall实现精准分享归因
  • 机器人与AGI会撞出什么火花?
  • Linux yum安装pgsql出现Bad GPG signature错误
  • 第18章-DHCP
  • [物联网] OneNet 多协议TCP透传
  • 如何让网页APP化 渐进式Web应用(PWA)
  • 50 vmalloc 的实现
  • 程序员的金三银四求职宝典!
  • day04_拦截器Apifox角色管理(登录校验,API接口文档,权限管理说明,角色管理,添加角色,修改角色,删除角色)
  • 在线上传解压PHP文件代码,压缩/压缩(网站一键打包)支持密码登录
  • 【刷题】模拟