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

集成算法学习笔记

一、集成算法简介

1. 核心思想

类比“多个专家综合判断优于单个专家”,通过构建并结合多个个体学习器,提升模型的泛化能力(降低过拟合风险、提高预测准确性),完成复杂的学习任务。

2. 个体学习器与结合模块

        个体学习器:多个基础模型(如决策树、KNN、SVM等),是集成算法的核心组成单元。

        结合模块:将所有个体学习器的预测结果汇总,输出最终结论,常见结合策略包括3类:

        简单平均法:对回归任务,直接取所有个体学习器预测结果的平均值作为最终输出。

        加权平均法:对回归任务,给不同个体学习器分配不同权重(通常精度高的权重更大),加权求和得到最终结果(公式:H(x) = \sum_{i=1}^{n} \omega_i h_i(x),其中\omega_i为第i个学习器的权重,且\omega_i \geq 0、\sum_{i=1}^{n} \omega_i = 1)。

    投票法:对分类任务,采用“少数服从多数”原则,统计所有个体学习器的预测类别,得票最多的类别为最终结果。

        若多数个体学习器预测正确,集成结果会提升性能(如测试例1中集成正确,单个学习器有错误);

        若个体学习器错误趋势一致,集成可能不起作用(如测试例2)或起负作用(如测试例3)。

二、集成算法分类(按个体学习器生成方式)

根据个体学习器间的依赖关系,分为3类核心算法:

        并行化方法(Bagging):个体学习器无强依赖,可同时生成,代表为随机森林。

        序列化方法(Boosting):个体学习器有强依赖,需串行生成(后一个学习器依赖前一个的结果),代表为AdaBoost。

        堆叠方法(Stacking):聚合多种类型分类器/回归器,分阶段训练,综合多模型结果。

三、Bagging算法与随机森林

1. Bagging算法

        全称:Bootstrap Aggregation(自助聚合)。

        核心逻辑:

    1.    并行训练:通过“有放回采样(Bootstrap)”从原始训练集中生成多个不同的子数据集,每个子数据集对应训练一个个体学习器(如决策树)。

    2.    结果结合:分类任务用简单投票法,回归任务用简单平均法,汇总所有个体学习器结果。

2. 随机森林(Bagging的典型代表)

        定义:以“决策树”为个体学习器的Bagging算法,核心在于“双重随机性”。

        随机1:数据采样随机:通过有放回采样生成不同子数据集,训练不同决策树。

        随机2:特征选择随机:每个决策树在划分节点时,仅从所有特征中随机选择部分特征,再从中选最优切分特征。

        优势:

    1.    能处理高维度数据(特征多),无需手动做特征选择。

    2.    训练后可输出特征重要性,辅助分析。

    3.    个体学习器可并行训练,速度快。

    4.    支持可视化(如决策树结构),便于理解模型逻辑。

3. 随机森林代码实现(Python sklearn)

(1)核心类

        RandomForestClassifier():用于分类任务的随机森林模型。

        RandomForestRegressor():用于回归任务的随机森林模型。

(2)关键参数
参数 含义与取值 
n_estimators 个体学习器(决策树)的数量,默认100,通常需根据数据调整(数量过少易欠拟合,过多增加计算成本)。 
oob_score 是否用“袋外样本(Out of Bag,未被采样到的样本)”评估模型,默认False;设为True时,等同于简易交叉验证,无需额外划分验证集。 
bootstrap 是否采用有放回采样,默认True(Bagging的核心特性,保证子数据集多样性)。 
max_samples 每个决策树训练时使用的最大样本量,默认None(即使用全部子数据集样本)。 

4. 课堂练习:葡萄酒分类

基于sklearn.datasets.load_wine数据集(含13个特征,如酒精含量、苹果酸、灰分等,目标是将葡萄酒分为3类),用RandomForestClassifier()实现分类,步骤包括数据加载、划分训练/测试集、模型训练、精度评估。

四、Boosting算法与AdaBoost

1. Boosting核心思想

从“弱学习器”(精度略高于随机猜测的模型)开始,通过动态调整样本权重和学习器权重,逐步加强模型能力,最终将多个弱学习器串联成“强学习器”。核心特点是个体学习器串行生成(后一个学习器依赖前一个的结果)。

2. AdaBoost(Boosting的典型代表)

(1)核心逻辑

    1.    初始化样本权重:首次训练时,所有样本分配相同的权重(如总样本数为N,每个样本权重为1/N)。

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

        用当前权重的样本集训练一个弱学习器(如简单决策树)。

        计算该学习器的分类误差率,对分类错误的样本提高权重(下次训练更关注这些难分样本),对分类正确的样本降低权重。

    3.    迭代训练多个弱学习器:重复步骤2,生成多个弱学习器。

    4.    组合弱学习器为强学习器:

        给误差率低的弱学习器分配更大权重(其预测结果更可信),给误差率高的分配更小权重。

        最终预测时,加权汇总所有弱学习器的结果(分类任务为加权投票,回归任务为加权平均)。

(2)核心优势

通过“关注难分样本+加权组合学习器”,能有效提升弱学习器的整体性能,泛化能力强,对简单数据集效果显著。

五、Stacking算法

1. 核心思想

“暴力聚合多种模型”,不限制个体学习器类型(可同时使用KNN、SVM、随机森林、逻辑回归等),分两个阶段训练:

    1.    第一阶段(基础模型训练):用原始训练集训练所有选定的基础模型,得到每个模型对训练集和测试集的预测结果。

    2.    第二阶段(元模型训练):将第一阶段的预测结果作为“新特征”,训练一个“元模型”(如逻辑回归、简单决策树),最终由元模型输出集成结果。

2. 特点

        灵活性高:可融合多种类型模型的优势,适合复杂数据集。

        计算成本高:需训练多类基础模型和元模型,步骤较繁琐。

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

相关文章:

  • Unreal Engine UStaticMeshComponent
  • 线性回归:机器学习中的基础建模工具
  • LeetCode100-76最小覆盖子串
  • C++ 面向对象之继承
  • 【DataGrip】连接达梦数据库后,能查询数据但是看不到表的几种情况分析,达梦数据库驱动包下载DmJdbcDriver18.jar
  • Leetcode—120. 三角形最小路径和【中等】(腾讯校招面试题)
  • LeetCode100-53最大子数组和
  • 数据工程师——ETL
  • 开发避坑指南(35):mybaits if标签test条件判断等号=解析异常解决方案
  • 【Protues仿真】基于AT89C52单片机的LCD液晶显示屏显示控制
  • 基于单片机的电子血压计设计方案
  • 亚信科技Java 150道面试题及参考答案(上)
  • DS 0 | 数据结构学习:前言
  • 使用隧道(Tunnel)连接PostgreSQL数据库(解决防火墙问题)
  • CentOS 10安装Ollama
  • Redis高级篇 | 分布式缓存四大核心问题讲解:持久化、主从集群、哨兵与分片集群
  • 【Java后端】【可直接落地的 Redis 分布式锁实现】
  • Python数据治理实战从爬虫到情感分析的电商评论处理系统
  • MySQL 高级主题:索引优化、ORM 与数据库迁移
  • java8 findAny()、findFirst()空指针NullPointerException问题
  • [RestGPT] RestGPT智能体
  • 从零开始的云计算生活——第四十九天,长路漫漫,kubernetes模块之持久化存储
  • 计算机网络技术-第七章
  • 嵌入式学习 day57 驱动-驱动框架
  • 利用 PHP 爬虫获取淘宝商品描述实战指南
  • 全志T113学习记录
  • 渲染新纪元:人工智能如何重构数字内容生产流水线
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘uvicorn’问题
  • EMNLP 2025数据公布,投稿量首次突破8000
  • 【AGI使用教程】GPT-OSS 本地部署(1)