AdaBoost算法的原理及Python实现
一、概述
AdaBoost(Adaptive Boosting,自适应提升)是一种迭代式的集成学习算法,通过不断调整样本权重,提升弱学习器性能,最终集成为一个强学习器。它继承了 Boosting 的基本思想和关键机制,但在具体的实现中有着显著特点,成为具有一定特定性能和适用场景的集成学习算法。
二、算法过程
(1)设置初始样本权重
在算法开始时,为训练数据集中的每一个样本设定一个相同的权重。如对于样本集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } D=\left\{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \right\} D={(x1,y1),(x2,y2),...,(xn,yn)},初始权重为 w ( 1 ) = ( w 1 ( 1 ) , w 2 ( 1 ) , . . . , w n ( 1 ) ) w^{(1)}=\left( w_{1}^{(1)} ,w_{2}^{(1)},...,w_{n}^{(1)} \right) w(1)=(w1(1),w2(1),...,wn(1)) ,其中 w i ( 1 ) = 1 n w_{i}^{(1)}=\frac{1}{n} wi(1)=n1,即在第一轮训练时,每个样本在模型训练中的重要度是相同的。
(2)训练弱学习器
基于当前的权重分布,训练一个弱学习器。基于当前的权重分布,训练一个弱学习器。弱学习器是指一个性能仅略优于随机猜测的学习算法,例如决策树桩(一种简单的决策树,通常只有一层)。在训练过程中,弱学习器会根据样本的权重来调整学习的重点,更关注那些权重较高的样本。
(3) 计算弱学习器的权重
根据弱学习器在训练集上的分类错误率,计算该弱学习器的权重。错误率越低,说明该弱学习器的性能越好,其权重也就越大;反之,错误率越高的弱学习器权重越小。通常使用的计算公式为
α = 1 2 l n ( 1 − ε ε ) \alpha=\frac{1}{2}ln\left( \frac{1-\varepsilon}{\varepsilon} \right) α=21ln(ε1−ε)
其中 ε \varepsilon ε是该弱学习器的错误率。
(4) 更新训练数据的权重分布
根据当前数据的权重和弱学习器的权重,更新训练数据的权重分布。具体的更新规则是,对于被正确分类的样本,降低其权重;对于被错误分类的样本,提高其权重。这样,在下一轮训练中,弱学习器会更加关注那些之前被错误分类的样本,从而有针对性地进行学习。公式为
w i ( t + 1 ) = w i ( t ) Z t ⋅ { e − α t , i f h t ( x i ) = y i e α t , i f h t ( x i ) ≠ y i \begin{equation} w_{i}^{(t+1)}=\frac{w_{i}^{(t)}}{Z_t}\cdot \begin{cases} e^{-\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)=y_i \\ e^{\alpha_t}, \hspace{0.5em} if \hspace{0.5em} h_t(x_i)\ne y_i \end{cases} \end{equation} wi(t+1)=Ztwi(t)⋅{e−αt,ifht(xi)=yieαt,ifht(xi)=yi
其中, w i ( t ) w_{i}^{(t)} wi(t)是第 t t t 轮中第 i i i个样本的权重, Z t Z_t Zt是归一化因子,确保更新后的样本权重之和为 1, h t ( x i ) h_t(x_i) ht(xi)是第 t t t个弱学习器对第 i i i个样本的预测结果。
(5) 重复以上步骤
不断重复训练弱学习器、计算弱学习器权重、更新数据权重分布的过程,直到达到预设的停止条件,如训练的弱学习器数量达到指定的上限,或者集成模型在验证集上的性能不再提升等。
(6)构建集成模型
将训练好的所有弱学习器按照其权重进行组合,得到最终的集成模型。如训练得到一系列弱学习器 h 1 , h 2 , . . . , h T h_1,h_2,...,h_T h1,h2,...,hT及其对应的权重 α 1 , α 2 , . . . , α T \alpha_1,\alpha_2,...,\alpha_T α1,α2,...,αT,最终的强学习器 H ( X ) H(X) H(X)通过对这些弱学习器进行加权组合得到。对于分类问题,通常采用符号函数 H ( X ) = s i g n ( ∑ t = 1 T α t h t ( X ) ) H\left( X \right)=sign\left( \sum_{t=1}^{T}{\alpha_th_t(X)} \right) H(X)=sign(∑t=1Tαtht(X))输出;对于回归问题,则可采用加权平均的方式输出。
过程图示如下
三、算法特性与应用场景
优势:算法通过不断调整样本权重和组合多个弱学习器,能够有效提高预测的准确性;可以自适应地调整样本的学习重点,对于不同分布的数据集有较好的适应性;对数据的分布没有严格的假设,不需要事先知道关于数据的一些先验知识。
不足:如果训练数据中存在噪声或异常值,可能会过度拟合这些数据,导致在测试集上的泛化能力下降;每次迭代都需要重新计算样本权重和训练弱分类器,当训练数据量较大或迭代次数较多时,计算成本较高。
应用场景:在图像识别、语音识别、目标检测、文本分类、生物信息等方面有着广泛的应用。
四、Python实现
(环境:Python 3.11,scikit-learn 1.6.1)
分类情形
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostClassifier
from sklearn.metrics import accuracy_score# 生成一个二分类的数据集
X, y = make_classification(n_samples=1000, n_features=10,n_informative=5, n_redundant=0,random_state=42,n_classes=2)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建AdaBoost分类器实例
ada_classifier = AdaBoostClassifier(n_estimators=100, learning_rate=0.1, random_state=42)# 训练模型
ada_classifier.fit(X_train, y_train)# 进行预测
y_pred = ada_classifier.predict(X_test)# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
回归情形
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.ensemble import AdaBoostRegressor
from sklearn.metrics import mean_squared_error# 生成模拟回归数据
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, noise=0.5, random_state=42)# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 创建 AdaBoost 回归器
ada_reg = AdaBoostRegressor(n_estimators=100, random_state=42)# 训练模型
ada_reg.fit(X_train, y_train)# 在测试集上进行预测
y_pred = ada_reg.predict(X_test)# 计算均方误差评估模型性能
mse = mean_squared_error(y_test, y_pred)
print(f"均方误差: {mse}")
End.
下载
相关文章:
AdaBoost算法的原理及Python实现
一、概述 AdaBoost(Adaptive Boosting,自适应提升)是一种迭代式的集成学习算法,通过不断调整样本权重,提升弱学习器性能,最终集成为一个强学习器。它继承了 Boosting 的基本思想和关键机制,但在…...
无刷马达驱动芯片算法逐步革新着风扇灯行业--其利天下
风扇灯市场热度持续攀升,根据行业数据,风扇灯市场规模从2010年的100亿元增长至2019年的200亿元,年均复合增长率超10%,预计2025年将达30%,借此其利天下有限公司进一步提升了无刷风扇灯驱动方案。 一、性能参数 电压&a…...
数据库系统综合应用与深度实践指南
前言 在当今数据驱动的时代,数据库技术已成为信息系统的核心支柱。从简单的数据存储到复杂的企业级应用,数据库系统支撑着现代社会的方方面面。本文作为一篇综合性的数据库科普文章,旨在为读者提供从基础到进阶的完整知识体系,涵…...
「Unity3D」TextMeshPro使用TMP_InputField实现,输入框高度自动扩展与收缩
先看实现效果: 要实现这个效果,有三个方面的问题需要解决: 第一,输入框的高度扩展,内部子元素会随着锚点,拉伸变形——要解决这个问题,需要将内部元素改变父类,然后增加父类高度&am…...
SAP-ABAP:在SAP系统中,COEP表(成本控制对象行项目表)详解
在SAP系统中,**COEP表(成本控制对象行项目表)**是成本控制(CO)模块的核心数据表之一,主要用于存储与成本核算相关的详细行项目数据。以下是对其作用的详细解析: 一、 COEP表的核心作用 存储成本…...
crashpad 编译
一环境配置 1.1设置系统UTF8编码 1.2vs2017语言环境设置英文包 二.获取depot_tools(此步骤可以跳过 最新工具包已上传下载使用即可) windows下载压缩包,然后放到系统PATH中 下载完以后,基本就是靠depot_tools这个工具集合了&am…...
Windows系统安装Docker(Win10系统升级,然后安装)
有时需要在自己笔记本跑下代码,所以安装Dockers,步骤如下: 1. 升级系统(Windows10专业版或者Windows11) Windows10家庭版装Docker较麻烦,所以我将Win10升级为Win11了(免费)&#x…...
【Fifty Project - D21】
今日完成记录 TimePlan完成情况9:00 - 10:00爬楼梯√12:00 - 14:00Leetcode√14:00 - 15:00《挪威的森林》√ Leetcode 每日一题 今天的每日一题是个easy:给定一个数组,要求统计…...
中央网信办部署开展“清朗·整治AI技术滥用”专项行动
为规范AI服务和应用,促进行业健康有序发展,保障公民合法权益,近日,中央网信办印发通知,在全国范围内部署开展为期3个月的“清朗整治AI技术滥用”专项行动。 中央网信办有关负责人表示,本次专项行动分两个阶…...
《Python实战进阶》 No46:CPython的GIL与多线程优化
Python实战进阶 No46:CPython的GIL与多线程优化 摘要 全局解释器锁(GIL)是CPython的核心机制,它保证了线程安全却限制了多核性能。本节通过concurrent.futures、C扩展优化和多进程架构,实战演示如何突破GIL限制&#…...
BOTA新六维力传感器PixONE:用12维度力矩与运动感测,驱动人形机器人力控未来
在机器人技术日益发展的今天,六维力传感器对于提升机器人感知环境、增强操作精度发挥着重要作用。瑞士BOTA Systems是一家专注于机器人传感器技术的公司,致力于为原始设备制造商提供高性能的传感器解决方案。 PixONE是BOTA推出的一款创新的高精度传感器&…...
《PyTorch documentation》(PyTorch 文档)
PyTorch documentation(PyTorch 文档) PyTorch is an optimized tensor library for deep learning using GPUs and CPUs. (PyTorch是一个优化的张量库,用于使用GPU和CPU进行深度学习。) Features described in this documentation are classified by release status: (此…...
数据库的死锁相关(一)
目录 前言 一、什么死锁 二、产生死锁的必要条件 三、死锁发生的具体位置和场景 1. 数据行级别死锁(最常见) 2. 表级别死锁 3. 索引间隙锁死锁(InnoDB特有) 4. 外键约束死锁 5. 元数据锁死锁 6. 内存中的锁结构死锁 7.…...
数据编码(Encoding)
对数据做编码可以减少存储和 I/O开销,常见的技术比如 Dictionary Encoding,Run-Length Encoding,Bitpacking,Delta Encoding,Frame-of-Reference等。 本篇文章对这些编码方案进行介绍,举例说明,最后总结各种encoding的适用场景。 一、Dictionary Encoding(字典编码)…...
Wartales 战争传说 [DLC 解锁] [Steam] [Windows SteamOS]
Wartales 战争传说 [DLC 解锁] [Steam] [Windows & SteamOS] DLC 版本 至最新全部 DLC 后续可能无法及时更新文章,具体最新版本见下载文件说明 DLC 解锁列表(仅供参考) 《战争传说》 - Pirates of Belerion 《战争传说》 - The Tavern …...
决策树在电信客户流失分析中的实战应用
在当今数据驱动的时代,数据分析和机器学习技术在各行业的应用愈发广泛。电信行业面临着激烈的竞争,客户流失问题成为影响企业发展的关键因素之一。如何准确预测客户是否会流失,并采取相应措施挽留客户,是电信企业关注的重点。决策…...
滚珠丝杆怎么选型?
滚珠丝杆的选型需要考虑多个因素,包括应用需求、性能参数、环境因素等,以确保选型的准确性和合理性。 1、负载:确定设备运行时滚珠丝杆需要承受的静载荷和动载荷,包括轴向载荷和径向载荷,根据实际工作情况计算出最大负…...
HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样
在电源管理需求日益严苛的当下,禾润 HTN77A0 以卓越性能脱颖而出。它不仅适配多种应用场景,还兼具高效节能与稳定输出,为设备供能带来革新体验。 禾润 HTN77A0 同步降压变换器,凭借5V~130V 超宽输入电压范围,打破传统供…...
linux中sigint和sigterm的区别
SIGINT 和 SIGTERM 是在 Unix 及类 Unix 系统(包括 Linux)中用于进程间通信的信号,它们都可以用于请求进程终止,区别如下: 1、信号编号与定义 在信号机制里,每个信号都有对应的编号,这便于系统…...
errorno 和WSAGetlasterror的区别
errno 和 WSAGetLastError 是用于获取错误代码的机制,但它们应用于不同的编程场景,下面为你详细介绍二者的区别: 应用场景 errno:它是 C 和 C 等编程语言里用于表示系统调用和库函数错误的全局变量。在 Unix、Linux 等类 Unix 系…...
《操作系统真象还原》第十一章——用户进程
文章目录 前言为什么要有TSSTSS简介TSS描述符和TSS结构现代操作系统采用的任务切换方式 定义并初始化TSS修改global.h编写tss.c测试 实现用户进程实现用户进程的原理维护虚拟地址空间,修改thread.h为进程创建页表和3特权级栈,修改memory.c进入特权级3用户…...
第 11 届蓝桥杯 C++ 青少组中 / 高级组省赛 2020 年真题答和案解析
一、选择题 第 1 题 单选题 题目:表达式 ‘6’ - ‘1’ 的值是 ( ) A. 整数 5 B. 字符 5 C. 表达式不合法 D. 字符 6 答案:A 解析:在 C++ 中,字符常量以 ASCII 码形式存储。6 的 ASCII 码为 54,1 的 ASCII 码为 49,二者相减结果为 5,是整数类型,因此选 A。 第 2 题 …...
ES搜索知识
GET /categories/1/10?name手机 // 按名称过滤 GET /categories/1/10?type电子产品 // 按类型过滤 GET /categories/1/10?name手机&type电子产品 // 组合过滤 查询参数 ApiOperation(value "获取商品分类分页列表")GetMapping("{page}/{limit}")…...
Java高阶程序员学习计划(详细到天,需有一定Java基础)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息文章目录 Java高阶程序员学习计划(详细到天,需有一定Java基础)第一阶段(30天)Java基础:Java生态工具链:设计模式与编码规范:第二阶段(15天…...
SALOME源码分析: SMESH模块
本文分析SALOME GEOM模块。 注1:限于研究水平,分析难免不当,欢迎批评指正。 注2:文章内容会不定期更新。 一、核心组件 1.1 SMESHGUI 二、关键流程 网络资料 SALOME: Introduction to MESH Modulehttps://docs.salome-platform…...
提高程序灵活性和效率的利器:Natasha动态编译库【.Net】
从零学习构建一个完整的系统 今天推荐一个针对C#动态编译库,动态编译的使用场景有很多: 1、动态代码生成:可以根据用户的输入或者系统配置动态执行C#代码,比如很多Web在线编译器,就是这个原理; 2、代码反…...
Cangjie Magic在医疗领域的应用:智能体技术如何重塑医疗数字化
文章目录 1. Cangjie Magic是什么?有什么优势?2. Cangjie Magic与Python的区别与优势对比技术特性对比医疗场景案例对比案例1:电子病历自然语言处理案例2:ICU实时监护系统 3. Cangjie Magic的学习成本与性价比学习门槛性价比优势 …...
MySQL基础关键_002_DQL(一)
目 录 一、初始化 二、简单查询 1.部分语法规则 2.查询一个字段 (1)查询员工编号 (2)查询员工姓名 3.查询多个字段 (1)查询员工编号、姓名 (2)查询部门编号、名称、位置 …...
从高端制造到民生场景:天元轻量化软件的“破局”之路
近期,清华大学航空发动机研究院(以下简称“清华航发院”)正式引入天元轻量化软件,用于其相关设计与3D可视化研究工作。 作为国内领先的3D轻量化解决方案提供商,天元轻量化软件一直致力于为各行业提供高效、灵活、安全…...
本地部署大模型的方式有哪些
本地部署大模型的方式主要分为 应用部署 和 源码部署 两大类,具体分类及特点如下: 一、应用部署(适合新手) 特点:无需编程基础,通过厂商提供的工具直接安装使用,支持图形化界面和命令行操作&am…...
libevent详解
目录 一、安装libevent库 二、libevent 三、基于 libevent 实现信号处理与定时任务 四、基于 libevent 的事件驱动 TCP 服务端代码 一、安装libevent库 sudo su apt install libevent-dev 二、libevent libevent 是一个轻量级网络i/o库,i/o框架库,…...
Solon Cloud Gateway 补充
说明 在「使用 Solon Cloud Gateway 替换Spring Cloud Gateway 」的文章中,有评论说不知道响应式。当时看的是 Solon Cloud Gateway 使用响应式接口,由 Solon-Rx 来实现,是基于 reactive-streams 封装的 RxJava 极简版。目前仅一个接口 Com…...
海外社交软件技术深潜:实时互动系统与边缘计算的极限优化
一、毫秒级延迟之战:下一代实时通信架构 1.1 全球实时消息投递体系设计 图表 代码 性能基准测试(跨大西洋传输): 协议/算法组合 平均延迟 99分位延迟 丢包恢复率 WebSocketTLSBBRv2 142ms 298ms 78% QUIC自定义CC 112ms 201ms 92%…...
直播美颜SDK是什么?跨平台美颜SDK开发与接入全解析
当下,越来越多的直播平台、短视频App、社交娱乐应用,开始在画面美化方面加大投入。本文将围绕直播美颜SDK是什么、其背后的核心技术、如何实现跨平台开发、以及接入流程等关键问题,为你全面解析这一技术热点。 一、直播美颜SDK到底是什么&am…...
自学S32k144(18)————芯片锁死问题及成功解锁流程
1.锁死原因 温度过高flash异常操作静电等电压异常问题。。。。 本人出现情况:之前开发板不知什么原因,发生短路,重新置换芯片后,发现芯片在S32DS中无法正常烧录 判断可能是由于焊接时温度过高导致锁死。需解锁芯片。 2.解决方法…...
【免费数据】2000-2020年中国4km分辨率逐日气象栅格数据(含9个气象变量)
逐日气象数据是在很多研究中都会用到的数据,例如验证气候模拟、分析陆地生态系统变化以及识别气候变化下的极端天气条件等研究,尤其是高精度的逐日气象数据对于研究者来说更为常用。 本次我们为大家带来的是2000-2020年中国4km分辨率逐日气象栅格数据&a…...
Android Compose 无网络状态处理全指南:从基础到高级实践
Android Compose 无网络状态界面处理全方案 引言 在移动应用开发中,网络连接不稳定是常见场景。优雅地处理无网络状态能显著提升用户体验。Jetpack Compose 提供了强大的工具来实现各种网络状态下的界面展示。本文将全面介绍在 Compose 中处理无网络状态的多种方案…...
网络规划和设计
1.结构化综合布线系统包括建筑物综合布线系统PDS,智能大夏布线系统IBS和工业布线系统IDS 2.GB 50311-2016综合布线系统工程设计规范 GB/T 50312-2016综合布线系统工程验收规范 3.结构化布线系统分为6个子系统: 工作区子系统;水平布线子系…...
Learning vtkjs之ImageMarchingSquares
体积 等值线处理 介绍 vtkImageMarchingSquares - 对图像(或来自体积的切片)进行等值线处理 给定一个指定的等值,使用Marching Squares算法(3D Marching Cubes算法的2D版本)生成等值线。 效果 自己增加了两个小球&…...
前端跨域问题详解:原因、解决方案与最佳实践
引言 在现代Web开发中,跨域问题是前端工程师几乎每天都会遇到的挑战。随着前后端分离架构的普及和微服务的发展,跨域请求变得愈发常见。本文将深入探讨跨域问题的本质、各种解决方案以及在实际开发中的最佳实践。 一、什么是跨域问题? 1.1…...
第五届图像、视觉与智能系统国际会议(ICIVIS 2025)参会通知
大会官网: http://www.icivis.net/ 官方邮箱:icivis163.com 会议地点:杭州师范大学仓前校区(余杭塘路2318号) 会议时间:2025年5月23日-5月25日 主办单位:杭州师范大学 1.一般会员注册 提交注册表以后…...
PCB设计工艺规范(二)基本布局要求
基本布局要求 1.PCBA加工工序2.对器件以及PCB布局要求 资料来自网络,仅供学习使用。 1.PCBA加工工序 制成板的元件布局应保证制成板的加工工序合理,以便于提高制成板加工效率和直通率。 PCB 布局选用的加工流程应使加工效率最高。 常用 PCBA 的6种主流…...
SWIG 和 JNA / JNI 等 C 接口封装工具及进行 C 接口的封装
SWIG 相关 SWIG 是什么 SWIG 是一个软件开发工具,是一个 封装 C/C++ 动态库供其他编程语言调用的神器。 使用它可以简化不同语言与与 C/C++ 语言的交互。简单点说,SWIG 是一个编译器,它以 C/C++的声明为输入,创建从其他语言包括常见的脚本语言如 Javascript、Perl、PHP、…...
【Bootstrap V4系列】学习入门教程之 布局
Bootstrap V4 学习入门教程之 布局 一、容器1.1 All-in-one 一体化1.2 Fluid 流体1.3 Responsive 快速响应 二、栅格系统2.1 网格选项2.2 自动布局列等宽等宽多线 2.3、设置一列宽度2.4、可变宽度内容 一、容器 容器是Bootstrap中最基本的布局元素,在使用我们的默认…...
Nginx功能全解析:你的高性能Web服务器解决方案
Nginx是一款开源的高性能HTTP和反向代理服务器,同时也是IMAP/POP3/SMTP代理服务器。自2004年推出以来,Nginx因其卓越的性能、稳定性和丰富的功能而广泛应用于各种规模的网站。本文将深入解析Nginx的主要功能,帮助你充分利用这款强大的Web服务…...
OpenAI 2025 4月最新动态综述
2025年4月,OpenAI在人工智能领域持续引领创新浪潮,发布了多项重磅新产品和技术,推动AI进入更加实用和智能的新阶段。以下是近期OpenAI的重点动态整理: 1. GPT-5预览版发布,迈入通用AI工业化时代 2025年4月15日&#…...
综合案例建模(1)
文章目录 滚花手扭螺丝机箱封盖螺丝螺丝孔锥形垫片 滚花手扭螺丝 前视基准面画草图,旋转生成主体 倒角0.5 顶面,草图转换实体引用,去复制边线 生成螺旋线路径 顶面绘制草图 上一步画的草图沿螺旋线扫描切除 镜像扫描特征 阵列镜像扫描特征 创…...
ComfyUI 学习笔记,案例3:img2img
背景 ComfyUI 学习笔记,第三个案例 img2img,官网文档的 安装篇 部分找到桌面版,于是就下载了桌面版本,运行第三个案例。 注意要点: 桌面版安装时检测到本机设备不符合时,需要手动选择安装配置࿰…...
水利水电安全员A证考试核心知识点
水利水电安全员A证考试核心知识点 水利水电安全员A证考试主要考查安全生产管理、法律法规、专业技术及应急处理能力,以下是核心知识点: 1. 安全生产法律法规 《安全生产法》:明确企业主体责任、从业人员权利与义务、事故追责等。 《水利工…...
Verilog仿真模块--真随机数生成器
前言 在进行功能仿真时,总是希望仿真条件能覆盖尽量多的情况,因此,经常需要产生随机数作为仿真的输入。Verilog 和 SV 中有能够产生随机数的系统函数 $random,可惜的是此函数产生的随机数是伪随机数,重新再跑一次仿真&…...