人工智能与机器学习原理精解【27】
文章目录
- 集成学习
- 集成学习概述
- 集成学习的定义
- 集成学习的性质
- 集成学习的算法过程
- 集成学习的算法描述
- 集成学习的例子和例题
- Julia实现集成学习
- 集成学习数学原理
- 一、基学习器的生成
- Bagging(装袋法)
- Boosting(提升法)
- 二、基学习器的结合策略
- 平均法
- 投票法
- 学习法(Stacking)
- 三、集成学习的整体性能提升
- 参考文献
集成学习
集成学习概述
集成学习的定义
集成学习(Ensemble Learning)是一种机器学习范式,通过构建并结合多个学习器(也被称为基学习器或组件学习器)来完成学习任务。这些学习器可以是从同一种学习算法产生的同质学习器,也可以是从不同学习算法产生的异质学习器。集成学习的核心思想是“好而不同”,即基学习器应该具有好的性能,并且它们之间的预测结果应该具有差异性,以提高整体的泛化性能。
集成学习的性质
集成学习的主要性质包括:
- 多样性:基学习器之间的差异性是集成学习性能提升的关键。这种差异性可以通过不同的训练数据、不同的学习算法、不同的参数设置等方式来引入。
- 鲁棒性:集成学习通过结合多个学习器的预测结果,能够减少单一学习器因数据噪声或模型偏差带来的过拟合风险,从而提高模型的鲁棒性。
- 准确性:通过结合多个学习器的预测结果,集成学习通常能够获得比单一学习器更高的预测准确性。
集成学习的算法过程
集成学习的算法过程大致可以分为以下几步:
- 生成基学习器:使用一种或多种学习算法从训练数据中生成多个基学习器。这些基学习器可以是同质的,也可以是异质的。
- 结合基学习器:通过某种策略将基学习器的预测结果结合起来,得到最终的预测结果。常见的结合策略包括平均法、投票法和学习法(如Stacking)。
集成学习的算法描述
以Bagging和Boosting为例,简要描述集成学习的算法过程:
-
Bagging:
- 步骤:从原始训练集中通过有放回抽样得到多个训练子集;在每个训练子集上训练一个基学习器;最后通过投票或平均的方式结合基学习器的预测结果。
- 代表算法:随机森林(Random Forest),即Bagging与决策树结合的算法。
-
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,你可以通过自己编写循环来训练多个基学习器,并使用投票或平均等方式来结合它们的预测结果。这通常涉及以下步骤:
- 对训练数据进行有放回抽样,生成多个训练子集。
- 在每个训练子集上训练一个基学习器。
- 对测试数据,使用每个基学习器进行预测。
- 结合基学习器的预测结果(例如,通过投票或平均)得到最终的预测。
在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=1∑Thi(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=1∑Twihi(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方法则通过逐步调整训练样本的权重来减少基学习器之间的偏差,因为每个基学习器都是在前一轮基学习器的预测结果基础上进行训练的,所以它们之间的偏差会逐渐减小。
总的来说,集成学习的数学原理和公式涉及基学习器的生成、基学习器的结合策略以及集成学习的整体性能提升等多个方面。通过合理的基学习器生成策略和结合策略,集成学习可以获得比单一学习器更好的性能。
参考文献
- 文心一言
相关文章:
人工智能与机器学习原理精解【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脚手架,基于SpringBoot3DruidPgSQLMyBatisPlus13FastJSON2Lombok,启动web容器为Undertow(非默认tomcat),其他的请自行添加和配置。 <java.version>17</java.version> <springboot.version>3.3…...
【C语言软开面经】
C语言软开面经 malloc calloc realloc free动态分配内存malloccalloc函数:realloc 函数:free函数: 堆栈-内存分区栈区(Stack):堆区(Heap):全局(静态ÿ…...
YOLOv11训练自己的数据集(从代码下载到实例测试)
文章目录 前言一、YOLOv11模型结构图二、环境搭建三、构建数据集四、修改配置文件①数据集文件配置②模型文件配置③训练文件配置 五、模型训练和测试模型训练模型验证模型推理 总结 前言 提示:本文是YOLOv11训练自己数据集的记录教程,需要大家在本地已…...
HTML粉色烟花秀
目录 系列文章 写在前面 完整代码 下载代码 代码分析 写在最后 系列文章 序号目录1HTML满屏跳动的爱心(可写字)2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4...
从零开发操作系统
没有操作系统 要考虑放到什么位置 org 07c00h 我用nasm(汇编编译) 放到7c00处 ibm兼容机 AX发生变化 -寄存器 不可能做存储 内存- 代码段数据段 if else --指令 代码 int a -数据段 必须告诉计算机代码段从哪里开始 改变cs寄存器里面的值可以改变推进寄…...
SigmaStudio中部分滤波器算法有效性频谱分析
一、各类滤波器参数如下图设置 1.1、输入源白噪音经过如下算法处理后Notch\Band Pass\Band Stop,如下频谱分析图 1.2、输入源白噪音经过low pass后处理前后的频谱分析如如下 二、Notch滤波器配置图,如下 2.1、两串联、五个串联和未串联的Notch对白噪音…...
ArcGIS与ArcGIS Pro去除在线地图服务名单
我们之前给大家分享了很多在线地图集,有些地图集会带有制作者信息,在布局制图的时候会带上信息影响出图美观。 一套GIS图源集搞定!清新规划底图、影像图、境界、海洋、地形阴影图、导航图 比如ArcGIS: 比如ArcGIS Pro:…...
滚雪球学MySQL[10.1讲]:常见问题与解决
全文目录: 前言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 推进精度-效率前沿的发展
今天,英伟达™(NVIDIA)发布了一款独特的语言模型,该模型具有无与伦比的准确性和效率性能。Llama 3.1-Nemotron-51B 源自 Meta 的 Llama-3.1-70B,它采用了一种新颖的神经架构搜索(NAS)方法&#…...
SpringBoot+Thymeleaf发票系统
> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录,权限控制,客户管理,发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…...
Updates were rejected because the tip of your current branch is behind 的解决方法
1. 问题描述 当我们使用 git push 推送代码出现以下问题时: 2. 原因分析 这个错误提示表明当前本地分支落后于远程分支,因此需要先拉取远程的更改。 3. 解决方法 1、拉取远程更改 在终端中执行以下命令,拉取远程分支的更新并合并到本地…...
Redis桌面工具:Tiny RDM
1.Tiny RDM介绍 Tiny RDM(Tiny Redis Desktop Manager)是一个现代化、轻量级的Redis桌面客户端,支持Linux、Mac和Windows操作系统。它专为开发和运维人员设计,使得与Redis服务器的交互操作更加便捷愉快。Tiny RDM提供了丰富的Red…...
【Java】酒店管理系统
一 需求: 编写程序 模拟酒店管理系统 : 预订和退订以及查看所有房间 1 需要有一个酒店类 2 需要有一个房间类 3 需要有一个客户端类 public class Test { } 二 分析: 客户端 : 1 先打印所有房间 2 等待用户输入,根据输入情况 判断是预订还是退订 3 等待用户输入房间号 …...
【数据库】Java 中 MongoDB 使用指南:步骤与方法介绍
MongoDB 是一个流行的 NoSQL 数据库,因其灵活性和高性能而广泛使用。在 Java 中使用 MongoDB,可以通过 MongoDB 官方提供的 Java 驱动程序来实现。本文将详细介绍在 Java 中使用 MongoDB 的步骤以及相关方法。 1. 环境准备 1.1 安装 MongoDB 首先&…...
MySQL之内置函数
目录 一、日期函数 二、字符串函数 三、数学函数 四、其它函数 一、日期函数 常见的日期函数如下: 函数名称说明current_date()获取当前日期current_time()获取当前时间current_timestamp()获取当前时间戳date_add(date, interval d_value_type)在date中添加日…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
