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

人工智能与机器学习原理精解【27】

文章目录

  • 集成学习
    • 集成学习概述
      • 集成学习的定义
      • 集成学习的性质
      • 集成学习的算法过程
      • 集成学习的算法描述
      • 集成学习的例子和例题
      • Julia实现集成学习
    • 集成学习数学原理
      • 一、基学习器的生成
        • Bagging(装袋法)
        • Boosting(提升法)
      • 二、基学习器的结合策略
        • 平均法
        • 投票法
        • 学习法(Stacking)
      • 三、集成学习的整体性能提升
  • 参考文献

集成学习

集成学习概述

集成学习的定义

集成学习(Ensemble Learning)是一种机器学习范式,通过构建并结合多个学习器(也被称为基学习器或组件学习器)来完成学习任务。这些学习器可以是从同一种学习算法产生的同质学习器,也可以是从不同学习算法产生的异质学习器。集成学习的核心思想是“好而不同”,即基学习器应该具有好的性能,并且它们之间的预测结果应该具有差异性,以提高整体的泛化性能。

集成学习的性质

集成学习的主要性质包括:

  1. 多样性:基学习器之间的差异性是集成学习性能提升的关键。这种差异性可以通过不同的训练数据、不同的学习算法、不同的参数设置等方式来引入。
  2. 鲁棒性:集成学习通过结合多个学习器的预测结果,能够减少单一学习器因数据噪声或模型偏差带来的过拟合风险,从而提高模型的鲁棒性。
  3. 准确性:通过结合多个学习器的预测结果,集成学习通常能够获得比单一学习器更高的预测准确性。

集成学习的算法过程

集成学习的算法过程大致可以分为以下几步:

  1. 生成基学习器:使用一种或多种学习算法从训练数据中生成多个基学习器。这些基学习器可以是同质的,也可以是异质的。
  2. 结合基学习器:通过某种策略将基学习器的预测结果结合起来,得到最终的预测结果。常见的结合策略包括平均法、投票法和学习法(如Stacking)。

集成学习的算法描述

以Bagging和Boosting为例,简要描述集成学习的算法过程:

  1. Bagging

    • 步骤:从原始训练集中通过有放回抽样得到多个训练子集;在每个训练子集上训练一个基学习器;最后通过投票或平均的方式结合基学习器的预测结果。
    • 代表算法:随机森林(Random Forest),即Bagging与决策树结合的算法。
  2. Boosting

    • 步骤:从原始训练集训练出一个基学习器;根据基学习器的预测结果调整训练样本的权重,使得预测错误的样本在后续训练中受到更多关注;基于调整后的样本权重训练下一个基学习器;重复上述过程,直到基学习器数目达到预设值;最后通过加权投票的方式结合基学习器的预测结果。
    • 代表算法:AdaBoost、Gradient Boosting(包括GBDT和XGBoost)。

集成学习的例子和例题

例子:随机森林是一种集成学习算法,它通过构建多个决策树并将它们的预测结果进行投票或平均来得到最终的预测结果。随机森林在分类、回归等任务中都有广泛的应用。

例题:假设有一个二分类问题,使用随机森林算法进行分类。首先,通过有放回抽样从原始训练集中生成多个训练子集;然后,在每个训练子集上训练一个决策树作为基学习器;最后,通过投票的方式结合所有决策树的预测结果得到最终的分类结果。

Julia实现集成学习

在Julia中实现集成学习,虽然没有像Python的scikit-learn那样直接提供完整集成学习框架的库,但我们可以利用Julia现有的机器学习库,如MLJ,来构建集成学习模型。MLJ是一个灵活的机器学习库,它提供了许多算法和工具,可以用于实现集成学习。

以下是一个使用MLJ在Julia中实现简单Bagging集成学习的示例。这个示例将使用决策树作为基学习器,并通过Bagging的方式来结合它们。

首先,确保你已经安装了MLJ和相关的依赖库。你可以使用Julia的包管理器来安装它们:

using Pkg
Pkg.add("MLJ")
Pkg.add("MLJBase")
Pkg.add("MLJEnsembles")
Pkg.add("DecisionTree")

接下来,是实现Bagging集成学习的代码:

using MLJ
using MLJBase
using MLJEnsembles
using DecisionTree# 加载数据集(这里以iris数据集为例)
data = load_iris()
X = data.X
y = data.y# 划分训练集和测试集
train, test = partition(eachindex(y), 0.7, shuffle=true, rng=123)# 定义基学习器(这里使用决策树)
base_learner = DecisionTreeClassifier()# 定义Bagging集成学习器
bagging_model = BaggingEnsemble(base_learner=base_learner,n_estimators=10,         # 使用10个基学习器sampling_fraction=0.8,   # 每个基学习器使用80%的训练数据replace=true,            # 有放回抽样rng=123                  # 随机数种子
)# 训练集成学习器
fit!(bagging_model, X[train, :], y[train])# 评估集成学习器
predictions = predict(bagging_model, X[test, :])
accuracy = sum(predictions .== y[test]) / length(y[test])
println("Accuracy: ", accuracy)

请注意,这个示例代码可能需要根据你安装的MLJ和相关库的具体版本来进行调整。此外,MLJEnsembles库可能不直接包含Bagging的实现(这取决于库的发展情况),因此你可能需要自己实现Bagging的逻辑,或者查找其他可用的Julia库或资源。

如果你发现MLJEnsembles没有直接提供Bagging,你可以通过自己编写循环来训练多个基学习器,并使用投票或平均等方式来结合它们的预测结果。这通常涉及以下步骤:

  1. 对训练数据进行有放回抽样,生成多个训练子集。
  2. 在每个训练子集上训练一个基学习器。
  3. 对测试数据,使用每个基学习器进行预测。
  4. 结合基学习器的预测结果(例如,通过投票或平均)得到最终的预测。

在Julia中实现这些步骤需要一些编程技巧,但得益于Julia的高性能和灵活性,你可以根据自己的需求定制集成学习算法。

集成学习数学原理

一、基学习器的生成

集成学习的第一步是生成多个基学习器。这些基学习器可以是同质的(如都是决策树或都是支持向量机),也可以是异质的(如包含决策树和神经网络)。在生成基学习器时,不同的集成学习方法(如Bagging、Boosting)会有不同的策略。

Bagging(装袋法)

Bagging方法通过有放回抽样从原始训练集中生成多个训练子集,每个子集用于训练一个基学习器。由于是有放回抽样,每个子集可能包含重复的样本,也可能不包含某些原始样本。Bagging的主要目的是通过样本扰动增加基学习器之间的多样性。

Boosting(提升法)

Boosting方法则通过调整训练样本的权重来生成多个基学习器。在Boosting的每一轮迭代中,都会根据前一轮基学习器的预测结果来更新样本权重,使得预测错误的样本在后续轮次中受到更多的关注。通过这种方法,Boosting逐步将弱学习器提升为强学习器。

二、基学习器的结合策略

在生成多个基学习器后,需要采用某种策略将它们结合起来以得到最终的预测结果。常见的结合策略包括平均法、投票法和学习法(如Stacking)。

平均法

对于回归问题,通常使用平均法来结合基学习器的预测结果。平均法可以分为简单平均和加权平均。

  • 简单平均:将各个基学习器的预测结果直接相加后求平均。数学公式为:

    H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x) = \frac{1}{T} \sum_{i=1}^{T} h_i(x) H(x)=T1i=1Thi(x)

    其中, H ( x ) H(x) H(x) 是最终的预测结果, T T T 是基学习器的数量, h i ( x ) h_i(x) hi(x) 是第 i i i 个基学习器的预测结果。

  • 加权平均:为不同的基学习器分配不同的权重,然后将加权后的预测结果相加。数学公式为:

    H ( x ) = ∑ i = 1 T w i h i ( x ) H(x) = \sum_{i=1}^{T} w_i h_i(x) H(x)=i=1Twihi(x)

    其中, w i w_i wi 是第 i i i 个基学习器的权重,且满足 ∑ i = 1 T w i = 1 \sum_{i=1}^{T} w_i = 1 i=1Twi=1

投票法

对于分类问题,通常使用投票法来结合基学习器的预测结果。投票法可以分为绝对多数投票法、相对多数投票法和加权投票法。

  • 绝对多数投票法:要求某标记的票数必须超过半数才能作为最终的预测结果。
  • 相对多数投票法:预测为得票最多的标记,若同时有多个标记的票数最高,则随机选择一个。
  • 加权投票法:类似于加权平均法,为不同的基学习器分配不同的权重,然后将加权后的票数相加。
学习法(Stacking)

Stacking是一种更复杂的结合策略,它通过将基学习器的预测结果作为新的特征,然后训练一个新的学习器来得到最终的预测结果。Stacking的数学公式可以表示为:

H ( x ) = g ( ϕ ( h 1 ( x ) , h 2 ( x ) , … , h T ( x ) ) ) H(x) = g(\phi(h_1(x), h_2(x), \ldots, h_T(x))) H(x)=g(ϕ(h1(x),h2(x),,hT(x)))

其中, H ( x ) H(x) H(x) 是最终的预测结果, g g g 是新的学习器, ϕ \phi ϕ 是一个映射函数,用于将基学习器的预测结果映射到新的特征空间, h i ( x ) h_i(x) hi(x) 是第 i i i 个基学习器的预测结果。

三、集成学习的整体性能提升

集成学习的整体性能提升可以从偏差-方差分解的角度来解释。Bagging方法主要通过减少基学习器之间的方差来提升集成学习的性能,因为每个基学习器都是在有放回抽样得到的训练子集上训练的,所以它们之间的差异性较大。而Boosting方法则通过逐步调整训练样本的权重来减少基学习器之间的偏差,因为每个基学习器都是在前一轮基学习器的预测结果基础上进行训练的,所以它们之间的偏差会逐渐减小。

总的来说,集成学习的数学原理和公式涉及基学习器的生成、基学习器的结合策略以及集成学习的整体性能提升等多个方面。通过合理的基学习器生成策略和结合策略,集成学习可以获得比单一学习器更好的性能。

参考文献

  1. 文心一言

相关文章:

人工智能与机器学习原理精解【27】

文章目录 集成学习集成学习概述集成学习的定义集成学习的性质集成学习的算法过程集成学习的算法描述集成学习的例子和例题Julia实现集成学习 集成学习数学原理一、基学习器的生成Bagging(装袋法)Boosting(提升法) 二、基学习器的结…...

XXL-JOB在SpringBoot中的集成

在SpringBoot中,XXL-JOB作为一个轻量级的分布式任务调度平台,提供了灵活的任务分片处理功能,这对于处理大规模、复杂的任务场景尤为重要。以下将详细探讨如何在SpringBoot中利用XXL-JOB实现灵活控制的分片处理方案,涵盖配置、代码…...

前端工程规范-3:CSS规范(Stylelint)

样式规范工具(StyleLint) Stylelint 是一个灵活且强大的工具,适用于保持 CSS 代码的质量和一致性。结合其他工具(如 Prettier 和 ESLint),可以更全面地保障前端代码的整洁性和可维护性。 目录 样式规范工具…...

Qt系列-1.Qt安装

Qt安装 0 简介 1.安装步骤 1.1 下载 进入qt中文网站:https://www.qt.io/zh-cn/ Qt开源社区版本:https://www.qt.io/download-open-source#source 1.2 安装 chmod +x qt-online-installer-linux-x64-4.8.0.run ./qt-online-installer-linux-x64-4.8.0.run 外网不能下载…...

《自控原理》最小相位系统

在复平面右半平面既没有零点,也没有极点的系统,称为最小相位系统,其余均为非最小相位系统。 从知乎看了一篇答案: https://www.zhihu.com/question/24163919 证明过程大概率比较难,我翻了两本自控的教材,…...

SpringBoot3脚手架

MySpringBootAPI SpringBoot3脚手架&#xff0c;基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok&#xff0c;启动web容器为Undertow(非默认tomcat)&#xff0c;其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…...

【C语言软开面经】

C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数&#xff1a;realloc 函数&#xff1a;free函数&#xff1a; 堆栈-内存分区栈区&#xff08;Stack&#xff09;&#xff1a;堆区&#xff08;Heap&#xff09;&#xff1a;全局&#xff08;静态&#xff…...

YOLOv11训练自己的数据集(从代码下载到实例测试)

文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示&#xff1a;本文是YOLOv11训练自己数据集的记录教程&#xff0c;需要大家在本地已…...

HTML粉色烟花秀

目录 系列文章 写在前面 完整代码 下载代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4...

从零开发操作系统

没有操作系统 要考虑放到什么位置 org 07c00h 我用nasm&#xff08;汇编编译&#xff09; 放到7c00处 ibm兼容机 AX发生变化 -寄存器 不可能做存储 内存- 代码段数据段 if else --指令 代码 int a -数据段 必须告诉计算机代码段从哪里开始 改变cs寄存器里面的值可以改变推进寄…...

SigmaStudio中部分滤波器算法有效性频谱分析

一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop&#xff0c;如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图&#xff0c;如下 2.1、两串联、五个串联和未串联的Notch对白噪音…...

ArcGIS与ArcGIS Pro去除在线地图服务名单

我们之前给大家分享了很多在线地图集&#xff0c;有些地图集会带有制作者信息&#xff0c;在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定&#xff01;清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS&#xff1a; 比如ArcGIS Pro&#xff1a…...

滚雪球学MySQL[10.1讲]:常见问题与解决

全文目录&#xff1a; 前言10. 常见问题与解决10.1 数据库连接问题10.1.1 无法连接到数据库10.1.2 连接超时10.1.3 连接数过多 10.2 性能问题10.2.1 查询速度慢10.2.2 数据库锁等待 10.3 数据完整性问题10.3.1 违反外键约束10.3.2 重复记录 10.4 安全问题10.4.1 SQL注入攻击10.…...

利用 Llama-3.1-Nemotron-51B 推进精度-效率前沿的发展

今天&#xff0c;英伟达™&#xff08;NVIDIA&#xff09;发布了一款独特的语言模型&#xff0c;该模型具有无与伦比的准确性和效率性能。Llama 3.1-Nemotron-51B 源自 Meta 的 Llama-3.1-70B&#xff0c;它采用了一种新颖的神经架构搜索&#xff08;NAS&#xff09;方法&#…...

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…...

Updates were rejected because the tip of your current branch is behind 的解决方法

1. 问题描述 当我们使用 git push 推送代码出现以下问题时&#xff1a; 2. 原因分析 这个错误提示表明当前本地分支落后于远程分支&#xff0c;因此需要先拉取远程的更改。 3. 解决方法 1、拉取远程更改 在终端中执行以下命令&#xff0c;拉取远程分支的更新并合并到本地…...

Redis桌面工具:Tiny RDM

1.Tiny RDM介绍 Tiny RDM&#xff08;Tiny Redis Desktop Manager&#xff09;是一个现代化、轻量级的Redis桌面客户端&#xff0c;支持Linux、Mac和Windows操作系统。它专为开发和运维人员设计&#xff0c;使得与Redis服务器的交互操作更加便捷愉快。Tiny RDM提供了丰富的Red…...

【Java】酒店管理系统

一 需求: 编写程序 模拟酒店管理系统 : 预订和退订以及查看所有房间 1 需要有一个酒店类 2 需要有一个房间类 3 需要有一个客户端类 public class Test { } 二 分析: 客户端 : 1 先打印所有房间 2 等待用户输入,根据输入情况 判断是预订还是退订 3 等待用户输入房间号 …...

【数据库】Java 中 MongoDB 使用指南:步骤与方法介绍

MongoDB 是一个流行的 NoSQL 数据库&#xff0c;因其灵活性和高性能而广泛使用。在 Java 中使用 MongoDB&#xff0c;可以通过 MongoDB 官方提供的 Java 驱动程序来实现。本文将详细介绍在 Java 中使用 MongoDB 的步骤以及相关方法。 1. 环境准备 1.1 安装 MongoDB 首先&…...

MySQL之内置函数

目录 一、日期函数 二、字符串函数 三、数学函数 四、其它函数 一、日期函数 常见的日期函数如下&#xff1a; 函数名称说明current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date_add(date, interval d_value_type)在date中添加日…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

结构化文件管理实战:实现目录自动创建与归类

手动操作容易因疲劳或疏忽导致命名错误、路径混乱等问题&#xff0c;进而引发后续程序异常。使用工具进行标准化操作&#xff0c;能有效降低出错概率。 需要快速整理大量文件的技术用户而言&#xff0c;这款工具提供了一种轻便高效的解决方案。程序体积仅有 156KB&#xff0c;…...

PLC入门【4】基本指令2(SET RST)

04 基本指令2 PLC编程第四课基本指令(2) 1、运用上接课所学的基本指令完成个简单的实例编程。 2、学习SET--置位指令 3、RST--复位指令 打开软件(FX-TRN-BEG-C)&#xff0c;从 文件 - 主画面&#xff0c;“B: 让我们学习基本的”- “B-3.控制优先程序”。 点击“梯形图编辑”…...

STL 2迭代器

文章目录 1.迭代器2.输入迭代器3.输出迭代器1.插入迭代器 4.前向迭代器5.双向迭代器6.随机访问迭代器7.不同容器返回的迭代器类型1.输入 / 输出迭代器2.前向迭代器3.双向迭代器4.随机访问迭代器5.特殊迭代器适配器6.为什么 unordered_set 只提供前向迭代器&#xff1f; 1.迭代器…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建

目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程.   本…...

从0开始学习R语言--Day17--Cox回归

Cox回归 在用医疗数据作分析时&#xff0c;最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据&#xff0c;往往会有很多的协变量&#xff0c;即使我们通过计算来减少指标对结果的影响&#xff0c;我们的数据中依然会有很多的协变量&#xff0c;且…...