一、集成学习概述

集成学习(ensemble learning)通过构建并结合多个个体学习器来完成学习任务,核心思想是 “集众家之长”—— 就像多个专家共同判断往往比单个专家更可靠。其关键在于如何生成多样化的个体学习器并设计有效的结合策略。

结合策略

  1. 简单平均法:对多个学习器的输出取平均值(适用于回归任务)。
  2. 加权平均法:为不同学习器分配不同权重,权重之和为 1,更信任性能好的学习器。
  3. 投票法:“少数服从多数”,适用于分类任务,多个学习器投票决定最终类别。

二、集成算法分类

根据个体学习器的生成方式,集成算法可分为三类:

算法类型特点代表算法
Bagging个体学习器并行生成,无强依赖关系随机森林
Boosting个体学习器串行生成,后一个依赖前一个AdaBoost
Stacking分阶段集成,第一阶段用多种学习器生成结果,第二阶段用这些结果训练新模型多模型堆叠

三、典型集成算法详解

1. Bagging 与随机森林

  • Bagging 原理:通过 bootstrap 抽样(有放回采样)生成多个不同的训练集,并行训练多个分类器,最终用投票法(分类)或平均法(回归)结合结果。

  • 随机森林:在 Bagging 基础上增加 “双重随机性”:

    • 数据采样随机(bootstrap);
    • 特征选择随机(每个决策树仅用部分特征训练)。
  • 随机森林优势

    • 处理高维数据无需特征选择;
    • 可评估特征重要性;
    • 并行化训练,速度快;
    • 结果易可视化分析。
  • 核心参数RandomForestClassifier):

    • n_estimators:树的数量(默认 100);
    • oob_score:是否用袋外数据评估(默认 False,True 时等效交叉验证);
    • bootstrap:是否有放回采样(默认 True)。

2. Boosting 与 AdaBoost

  • Boosting 原理:串行生成学习器,后一个学习器会针对前一个的错误进行优化,通过加权调整样本和学习器的重要性。
  • AdaBoost 流程
    1. 初始化样本权重(所有样本权重相同);
    2. 训练弱分类器,分错的样本权重提高,分对的降低;
    3. 重复训练新分类器,聚焦前一轮的错误样本;
    4. 最终结合所有弱分类器,性能好的分类器权重更高。

3. Stacking

  • 原理:分阶段集成多种学习器(如 KNN、SVM、随机森林等):
    • 第一阶段:用不同学习器对数据训练,得到各自的预测结果;
    • 第二阶段:将第一阶段的结果作为新特征,训练一个元模型(如逻辑回归),输出最终结果。

四、代码实现:随机森林实现葡萄酒分类

以葡萄酒数据集为例,用随机森林完成分类任务:

python

运行

# 导入必要的库
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report# 1. 加载数据集
wine = load_wine()
X = wine.data  # 特征数据(13个特征,如酒精含量、苹果酸等)
y = wine.target  # 标签(3种葡萄酒类别)
print("特征名称:", wine.feature_names)
print("样本数量:", X.shape[0], ",类别数量:", len(set(y)))# 2. 划分训练集和测试集(7:3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42  # 固定随机种子,保证结果可复现
)# 3. 初始化随机森林模型
rf = RandomForestClassifier(n_estimators=100,  # 100棵决策树oob_score=True,    # 用袋外数据评估模型bootstrap=True,    # 启用有放回采样random_state=42
)# 4. 训练模型
rf.fit(X_train, y_train)# 5. 模型评估
# 预测测试集
y_pred = rf.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n测试集准确率:{accuracy:.4f}")# 详细分类报告(精确率、召回率、F1值)
print("\n分类报告:")
print(classification_report(y_test, y_pred, target_names=[f"类别{i}" for i in range(3)]))# 查看特征重要性
feature_importance = dict(zip(wine.feature_names, rf.feature_importances_))
print("\n特征重要性:")
for feature, importance in sorted(feature_importance.items(), key=lambda x: x[1], reverse=True):print(f"{feature}: {importance:.4f}")

代码说明

  1. 数据集load_wine()包含 178 个样本,13 个特征(如酒精含量、苹果酸等),分为 3 类葡萄酒。
  2. 模型参数:使用 100 棵决策树,启用袋外数据评估,确保结果可靠。
  3. 评估指标:通过准确率和分类报告判断模型性能,随机森林在该数据集上通常能达到 95% 以上的准确率。
  4. 特征重要性:随机森林可输出各特征对分类的贡献度,例如 “proline(脯氨酸)” 通常是区分葡萄酒类别的重要特征。

我还自己尝试了以下乳腺癌案例

# 导入必要的库
from sklearn.datasets import load_breast_cancer
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix, accuracy_score, classification_report

# 加载并查看数据集信息
cancer = load_breast_cancer()
X = cancer.data  # 特征数据(30个特征,如肿瘤半径、纹理等)
y = cancer.target  # 标签(0=恶性,1=良性)

# 打印数据集基本信息
print("数据集信息:")
print(f"特征数量:{X.shape[1]}(特征名称:{', '.join(cancer.feature_names[:5])}...)")
print(f"样本数量:{X.shape[0]}(其中良性样本:{sum(y)},恶性样本:{len(y)-sum(y)})")

# 划分训练集和测试集(7:3)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42  # 固定随机种子,保证结果可复现
)

# 初始化随机森林模型并设置参数
rf_cancer = RandomForestClassifier(
n_estimators=150,  # 决策树数量(增加树数量可提升稳定性)
max_depth=8,       # 限制树深度,防止过拟合
oob_score=True,    # 使用袋外数据评估模型性能
bootstrap=True,    # 启用有放回抽样(Bagging核心机制)
random_state=42    # 固定随机种子,确保结果一致
)

# 训练模型
rf_cancer.fit(X_train, y_train)
print(f"\n袋外数据评估准确率:{rf_cancer.oob_score_:.4f}")  # 输出袋外得分

# 模型评估
# 预测测试集结果
y_pred = rf_cancer.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"\n测试集准确率:{accuracy:.4f}")

# 打印混淆矩阵(直观展示分类错误情况)
print("\n混淆矩阵(行=真实标签,列=预测标签):")
print("(0=恶性,1=良性)")
print(confusion_matrix(y_test, y_pred))

# 详细分类报告(包含精确率、召回率、F1值)
print("\n分类报告:")
print(classification_report(
y_test, y_pred,
target_names=["恶性肿瘤", "良性肿瘤"]  # 为标签添加中文说明
))

# 特征重要性分析(前10名)
print("\nTop 10 重要特征(对肿瘤分类的贡献度):")
# 按重要性排序并取前10
top_features = sorted(
zip(cancer.feature_names, rf_cancer.feature_importances_),
key=lambda x: x[1], reverse=True
)[:10]

# 格式化输出
for i, (name, imp) in enumerate(top_features, 1):
print(f"{i}. {name}: {imp:.4f}({imp*100:.2f}%)")

五、学习总结

集成学习通过组合多个学习器有效提升了模型性能,其中:

  • 随机森林适合处理高维数据,训练高效且结果稳定,是工业界常用的 “万能模型”;
  • AdaBoost 专注于修正错误样本,适合处理非线性问题,但对噪声较敏感;
  • Stacking 灵活性高,可融合多种模型的优势,但实现较复杂。

在实际应用中,需根据数据特点选择合适的集成策略,并通过调参(如随机森林的树数量、AdaBoost 的迭代次数)进一步优化性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94034.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94034.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94034.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unreal Engine UE_LOG

Unreal🎮 Unreal Engine - UE_LOG📝 定义🏛 类/宏关联⚡ 关键特性🛠️ 常见配置📚 使用方法🔧 基础语法🔍 示例🪂 典型应用场景🔗 与其他组件对比⚠️ 常见问题与注意事项…

Halcon那些事:什么是动态阈值,如何用dyn_threshold分割图片

Halcon那些事:什么是动态阈值,如何用dyn_threshold分割图片 一、什么是动态阈值?为什么需要它? 1. 传统全局阈值的局限性 2. 动态阈值的核心思想 二、Halcon 中的核心算子:`dyn_threshold` 1. 算子原型 2. 参数详解 三、工作原理(数学模型) 四、详细使用步骤与实例 五、关…

Go初级二

Go初级入门(二):变量、常量与数据类型 大家好,欢迎来到《Go初级入门》系列的第二篇!在上一篇文章中,我们介绍了如何安装Go环境并运行第一个“Hello, World”程序。今天,我们将深入Go语言的基础语…

《战神:诸神黄昏》v1.0.668中文版,索尼大作,PC平台体验诸神黄昏

[游戏名称]: 《战神:诸神黄昏》v1.0.668中文版 [软件大小]: 175 GB [软件大小]: 夸克网盘 游戏介绍 《战神:诸神黄昏》是由索尼制作并发行的动作冒险游戏,作为《战神4》的正统续作,它继续了奎托斯与阿特柔斯的神话之旅。在诸神…

AI赋能环保精准治理:AI水质监测溯源快、空气质量预测施策准,守护生态新效能

传统环境保护工作长期受限于 “污染监测滞后”“溯源难度大”“治理方案针对性弱” 的问题,而 AI 技术的深度应用,正让环保工作从 “被动应对” 转向 “主动预判”,既能实时捕捉污染踪迹,还能精准制定治理方案,让生态保…

yolo训练实例(一)

yolo官网 https://github.com/ultralytics/ultralytics?tabreadme-ov-file 下载python和解除限制 https://www.python.org/downloads/windows/ Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"…

STM32-BKP备份寄存器与RTC实时时钟

引言本文主要从BKP备份寄存器和RTC实时时钟的原理,特性及应用三个方面展开讨论,解析它们在STM32中的独特价值,助力开发者更好的掌握和运用它们。BKP备份寄存器的定义STM32的BKP备份寄存器是一种特殊的存储单元,它位于备份区域&…

Linux网络服务(五)——FTP服务详解与实践操作手册

文章目录前言一、FTP服务概述1.1 FTP基本定义1.2 VSFTP模式分类1.3 FTP端口作用二、FTP作用与工作原理(重点)2.1 FTP的作用、模式及通信方式2.1.1 FTP核心作用2.1.2 VSFTP模式与通信协议2.2 FTP工作原理与流程2.2.1 主动模式工作原理2.2.2 被动模式工作原…

5.3 包管理工具 npm yarn pnpm 对比

基本介绍 工具发布时间开发者定位npm2010 年npm Inc / OpenJS FoundationNode.js 官方包管理器Yarn2016 年Facebook(现 Meta)更快、更可靠的替代方案pnpm2016 年Zoltan Kochan高性能、节省磁盘空间 一、核心机制与设计差异 1. npm(Node Pa…

爬虫基础学习-授权认证,cookie认证,异常处理

验证: HTTPBasicAuthHandler(用户基本的身份验证处理) HTTPPasswordMgrWithDefaultRealm(经常和authhandler一起出现)#创建一个密码管理器 password_mgr urllib.request.HTTPPasswordMgrWithDefaultRealm() #添加进目…

开发避坑指南(34):mysql深度分页查询优化方案

问题语句 SELECT* FROMt_order_log l WHERE1 1 AND l.create_time > 2024-08-28 AND l.create_time < 2024-09-04 23:59:59 LIMIT 10000,10上述查询sql&#xff0c;即使create_time字段已建立索引&#xff0c;但偏移量达到几十万时候&#xff0c;查询耗时将近1分钟&…

Unreal Engine UFloatingPawnMovement

Unreal⚡ Unreal Engine - UFloatingPawnMovement&#x1f3f7; 定义&#x1f9e9; 类继承关系⚙️ 关键特性&#x1f6e0;️ 常见配置&#xff08;Details 面板/代码&#xff09;&#x1f4dd; 使用方法1) 在 Pawn 中添加组件&#xff08;C&#xff09;2) 绑定输入与驱动移动3…

某网盘不好用?有没有类似某网盘的存储软件?阿里云国际站 OSS:云存储的全能助手,你 get 了吗?

在这个数据爆炸的时代&#xff0c;数据存储和管理成为了众多企业和个人面临的一大挑战。想象一下&#xff0c;你是一位视频博主&#xff0c;随着粉丝量的增长&#xff0c;视频素材越来越多&#xff0c;电脑硬盘根本装不下&#xff0c;每次找素材都要花费大量时间。又或者你是一…

安全运维过程文档体系规范

安全运维过程文档体系规范 1. 文档体系总览 本文档体系严格遵循“安全运维生命周期”模型设计&#xff0c;涵盖业务建立、协同、运维管理、识别防御监测、响应和效果评估六个核心阶段。体系旨在通过标准化、规范化的文档管理&#xff0c;确保所有安全运维活动有章可循、有据可查…

【计算机网络】 IPV4和IPV6区别

IPv4 和 IPv6 是两代 互联网协议&#xff08;Internet Protocol&#xff09;&#xff0c;它们的核心作用都是&#xff1a; &#x1f449; 为网络设备分配唯一地址&#xff0c;让它们能在网络中互相通信。1️⃣ 地址长度IPv4&#xff1a;32 位&#xff08;4 字节&#xff09;&am…

哈希:最长连续序列

题目描述&#xff1a;无序的整型数组&#xff0c;求连续最长序列。 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 &#xff08;因为&#xff1a;最长数字连续序列是 [1, 2, 3, 4]&#xff0c;长度为 4。&#xff09; 说明&#xff1a;连续指的是数字的连续…

python中的生成器

概要python中的生成器是一种特殊的迭代器&#xff0c;如果按照c语言的说法&#xff0c;就是一种特殊的指针&#xff0c;但是python语言的一个语言特性是兼容了函数化编程&#xff0c;类似lambda匿名函数机制。本文重点介绍生成器表达式的使用&#xff0c;是一种很快捷&#xff…

【Coze】Windows 环境下使用 Docker 部署 Coze Studio 的详细指南

一、前言&#xff1a; Coze Studio 是一站式 AI Agent 开发工具。提供各类最新大模型和工具、多种开发模式和框架&#xff0c;从开发到部署&#xff0c;为你提供最便捷的 AI Agent 开发环境。 提供 AI Agent 开发所需的全部核心技术&#xff1a;Prompt、RAG、Plugin、Workflo…

票务系统小程序源码

1. 系统概述 github地址 本系统是一个历经多年迭代和市场检验的综合性智慧票务解决方案。它以小程序和后台管理系统为核心&#xff0c;深度整合了线上OTA渠道、线下多种支付方式以及各类智能硬件&#xff0c;为旅游景区、展馆、活动中心等场景提供稳定、高效、功能完备的一体化…

Python 文件操作与异常处理全解析

目录 一、文件的基本概念 1. 什么是文件 2. 文件操作的核心内容 3. 文件操作的作用 二、文件的基本操作 1. 文件操作三步走 2. 打开文件&#xff1a;open () 函数 2.1 文件路径 2.2 常用 mode 模式 3. 写入文件&#xff1a;write () 函数 4. 关闭文件&#xff1a;cl…