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

开心实习之第二十九天

集成学习(ensemble learning)的核心思想源于 “群体智慧”—— 对于复杂任务,综合多个专家的判断往往比单一专家的判断更准确。在机器学习领域,它通过构建并结合多个个体学习器来完成学习任务,最终输出由 “结合策略” 决定,旨在提升模型的泛化能力与稳定性,避免单一学习器的偏见或误差。

(一)核心构成

  1. 个体学习器:构成集成模型的基础模型(如决策树、KNN、SVM 等),是集成学习的 “专家”。
  2. 结合策略:将多个个体学习器的输出整合为最终结果的规则,常见策略包括三类:
    • 简单平均法:对回归任务,直接计算所有个体学习器预测结果的平均值作为最终输出,适用于各学习器性能相近的场景。
    • 加权平均法:对回归任务,为不同个体学习器分配不同权重(权重非负且总和为 1),公式为 H(x)=∑i=1T​ωi​hi​(x)(其中ωi​为第i个学习器的权重,hi​(x)为其预测结果),性能更优的学习器权重更高,提升整体精度。
    • 投票法:对分类任务,遵循 “少数服从多数” 原则,统计所有个体学习器的预测类别,得票最多的类别即为最终输出。但投票法效果受个体学习器一致性影响:若学习器差异大且多数正确,集成性能会提升;若学习器高度一致且均错误,集成则可能起负作用。

二、集成算法的分类

根据个体学习器的生成方式,集成学习可分为三大类,核心差异在于个体学习器间的依赖关系与生成顺序:

分类核心特点代表算法
Bagging个体学习器无强依赖,可并行生成随机森林(Random Forest)
Boosting个体学习器有强依赖,需串行生成AdaBoost
Stacking分阶段聚合多类学习器,先独立训练再二次学习基于 KNN、SVM、RF 等的堆叠模型

三、Bagging 与随机森林

(一)Bagging 基础

  1. 定义与原理:全称为 “Bootstrap Aggregation”,核心是通过 “有放回采样(Bootstrap)” 生成多个不同的训练集,在每个训练集上独立训练一个个体学习器,最终通过结合策略输出结果。
  2. 关键特性
    • 并行训练:个体学习器无依赖,可同时训练,效率高。
    • 降低方差:通过多个学习器的 “平均”,减少单一学习器的过拟合风险,尤其适用于方差大的模型(如决策树)。
  3. 预测规则:分类任务用简单投票法,回归任务用简单平均法,公式为 f(x)=M1​∑m=1M​fm​(x)(其中M为学习器数量,fm​(x)为第m个学习器的预测结果)。

(二)随机森林:Bagging 的典型实现

随机森林以 “决策树” 为基础个体学习器,通过 “双重随机性” 构建 “森林”,是 Bagging 最成功的应用。

  1. 核心特性:双重随机性

    • 数据采样随机:采用有放回采样(Bootstrap),每个决策树的训练集都是从原始数据中随机抽取的子集,确保各树训练数据存在差异。
    • 特征选择随机:每个决策树在分裂节点时,仅从所有特征中随机选择部分特征(而非全部)进行评估,进一步降低树之间的相关性。
  2. 显著优势

    • 高维数据适配:无需手动进行特征选择,可直接处理特征数量多的数据集。
    • 特征重要性评估:训练完成后,能量化输出各特征对预测结果的贡献度,辅助特征分析。
    • 并行高效:各决策树独立训练,可充分利用并行计算资源,训练速度快。
    • 可解释性强:可通过可视化单棵决策树,直观理解模型的决策逻辑。
  3. 关键参数(基于 Scikit-learn)
    | 参数名 | 含义 | 默认值 |
    |----|----|----|
    |n_estimators | 森林中决策树的数量 | 100|
    |oob_score | 是否使用 “袋外样本(未被采样到的样本)” 评估模型性能 | False(设为 True 时,等同于简易交叉验证)|
    |bootstrap | 是否采用有放回采样生成训练集 | True|
    |max_samples | 每棵树训练时使用的最大样本量 | None(默认使用全部采样样本)|

  4. 实践应用:葡萄酒分类任务
    以 Scikit-learn 的load_wine数据集为例,任务是根据葡萄酒的 13 个特征(如酒精含量、苹果酸、镁含量等)将其分为 3 类,核心步骤如下:

    1. 加载数据集:from sklearn.datasets import load_wine; wine = load_wine(),其中wine.data为特征矩阵,wine.target为类别标签(0、1、2 三类)。
    2. 模型初始化:使用RandomForestClassifier()构建分类器,可根据需求调整n_estimatorsoob_score等参数。
    3. 训练与预测:划分训练集与测试集后,通过fit()训练模型,predict()输出预测结果,最终通过准确率等指标评估性能。

四、Boosting 与 AdaBoost

(一)Boosting 基础

  1. 定义与核心逻辑:Boosting 是 “串行式” 集成方法,从 “弱学习器”(性能略优于随机猜测的学习器)开始,通过动态调整样本权重与学习器权重,逐步强化模型能力,最终将多个弱学习器整合为 “强学习器”。
  2. 关键特性
    • 串行依赖:后一个学习器的训练依赖前一个学习器的结果,无法并行。
    • 聚焦误差:通过权重调整,让后续学习器更关注前一个学习器分类错误的样本,逐步修正误差。

(二)AdaBoost:Boosting 的经典算法

AdaBoost(Adaptive Boosting)是 Boosting 的代表性算法,核心是 “自适应调整权重”,具体流程分为 4 步:

  1. 初始化样本权重:假设训练集有N个样本,初始时每个样本的权重相同,即w1i​=N1​(i=1,2,...,N),确保初始训练集分布均匀。

  2. 训练弱学习器并调整样本权重

    • 基于当前样本权重分布,训练一个弱学习器(如决策 stump,即单节点决策树)。
    • 计算该弱学习器的分类误差率ϵ(错误分类样本的权重总和)。
    • 调整样本权重:若样本分类正确,权重降低;若分类错误,权重提高,使后续学习器优先学习这些 “难分样本”。
  3. 迭代训练多个弱学习器:重复步骤 2,生成T个弱学习器,每个学习器都基于前一轮调整后的样本权重训练,逐步降低整体误差。

  4. 整合弱学习器为强学习器

    • 为每个弱学习器分配权重αt​:误差率越小的学习器,权重越高(公式为αt​=21​ln(ϵt​1−ϵt​​)),体现 “优质学习器更重要” 的逻辑。
    • 最终预测时,对所有弱学习器的预测结果进行加权投票,得票最高的类别即为最终输出。

五、Stacking(堆叠集成)

(一)核心定义

Stacking 是一种 “分阶段” 的集成方法,核心思路是 “先利用多种基础模型生成预测结果,再将这些结果作为新特征,训练一个‘元学习器’(Meta-Learner)来输出最终预测”,相当于 “用模型学习如何结合其他模型的结果”。

(二)关键流程

  1. 第一阶段:基础模型训练

    • 选择多种不同类型的基础模型(如 KNN、SVM、随机森林、AdaBoost 等)。
    • 将原始训练集划分为多个子集(或使用交叉验证),分别训练每个基础模型,得到每个样本在各基础模型上的预测结果(称为 “元特征”)。
  2. 第二阶段:元学习器训练

    • 以第一阶段生成的 “元特征” 为新的训练数据,以原始任务的标签为目标,训练一个元学习器(通常选择简单模型,如逻辑回归、线性回归,避免过拟合)。
  3. 预测阶段

    • 对新测试样本,先通过所有基础模型得到元特征,再输入元学习器,得到最终预测结果。

(三)特点

  • 灵活性高:可整合任意类型的基础模型,充分利用不同模型的优势。
  • 复杂度较高:需训练多组基础模型与元学习器,计算成本高于 Bagging 和 Boosting,但通常能获得更优的泛化性能。

六、三类集成算法对比与总结

维度Bagging(随机森林)Boosting(AdaBoost)Stacking
学习器依赖无,并行生成有,串行生成无(基础模型并行,元学习器串行)
核心逻辑降低方差(减少过拟合)降低偏差(提升精度)优化结合策略(学习如何整合)
优势速度快、鲁棒性强、可解释性较好精度高、能处理弱学习器灵活性高、泛化性能优
劣势对噪声样本敏感易过拟合、对异常值敏感复杂度高、计算成本高
适用场景高维数据、大样本、需快速训练中小样本、需高精度预测复杂任务、追求最优性能

综上,集成算法通过 “组合多个学习器” 的思路,解决了单一模型的局限性:Bagging 通过并行化降低方差,Boosting 通过串行化降低偏差,Stacking 通过 “二次学习” 优化结合策略。在实际应用中,需根据数据规模、特征维度、任务需求(精度 / 速度)选择合适的集成方法,其中随机森林因 “高效、稳定、易用” 成为最常用的 baseline 模型,而 AdaBoost 和 Stacking 则在需更高精度的场景中发挥作用

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

相关文章:

  • Bartender 5 多功能菜单栏管理(Mac电脑)
  • NPM组件 @angular_devkit/core 等窃取主机敏感信息
  • 消息中间件选型分析:RabbitMQ vs RocketMQ vs Kafka
  • java生成带水印的pdf文件
  • 【从零构建企业级线程池管理系统:Python并发编程实战指南】
  • 医疗智能体高质量问诊路径开发:基于数智立体化三维评估框架(go语言)
  • [新启航]长轴深孔检测 - 激光频率梳 3D 轮廓检测
  • Go语言中的迭代器模式与安全访问实践
  • Linux应用层开发--线程池介绍
  • 【网络运维】Shell:变量数值计算
  • redis-缓存-双写一致性
  • 【Django:基础知识】
  • 掌控不平等的力量:深入解析帕雷托分布与二八法则的数学内核
  • python测试开发django-1.开始hello world!
  • 《零基础入门AI:深度学习之NLP基础学习》
  • 在Python中, list相减 要从一个列表(valid_points)中排除另一个列表(yuanjian_jiaodian)的所有元素
  • Linux CentOS 安装 .net core 3.1
  • 银河麒麟V10系统离线安装zabbix-agent教程
  • 18维度解密·架构魔方:一览无遗的平衡艺术
  • nginx-重定向-正则表达式-路由匹配优先级
  • Qt截图工具项目开发教程 - 从零开始构建系统截图工具
  • 【ARM】Keil MDK如何指定单文件的优化等级
  • 牛津大学xDeepMind 自然语言处理(5)
  • 基于 Kubernetes 的 WordPress 网站部署(使用 ConfigMap)
  • Spring两个核心IoCDI(一)
  • javaweb开发笔记—— 前端工程化
  • 当安全遇上资源瓶颈:轻量级加密为何成为 IoT 时代的刚需?
  • 基于 FPGA 的电磁超声脉冲压缩检测系统
  • 家里Windows,公司Linux?通过cpolar,WSL开发环境无缝切换
  • Python数据可视化利器:Matplotlib从入门到实战全解析