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.


下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/78938.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《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: (此…

Android学习总结之算法篇六(数组和栈)

括号匹配 public static boolean isValid(String s) {// 创建一个栈用于存储左括号Stack<Character> stack new Stack<>();// 遍历字符串中的每个字符for (char c : s.toCharArray()) {if (c ( || c [ || c {) {// 如果是左括号&#xff0c;将其压入栈中stack…

遗传算法(Genetic Algorithm,GA)

遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种受生物进化理论启发的优化算法&#xff0c;通过模拟自然选择和遗传机制来搜索复杂问题的最优解。 ​​核心原理​​ ​​自然选择与适者生存​​&#xff1a;适应度高的个体更有可能繁殖&#xff0c;将…

消防应急物资智能调用立库:豪越科技助力消防“速战速决”

在消防救援的战场上&#xff0c;时间就是生命&#xff0c;每一秒都关乎着人民群众的生命财产安全。然而&#xff0c;在过去的紧急救援中&#xff0c;应急物资无法及时到位的情况时有发生&#xff0c;成为制约救援效率的关键难题&#xff0c;给救援工作带来了巨大的困境。 想象一…

【MySQL】数据类型和表的操作

目录 一. 常用的数据类型 1.数值类型 1.1 整形类型 1.2 浮点型类型 2.字符串类型 char和varchar的区别 如何选择char和varchar 3.日期类型 4.二进制类型 二. 表的操作 1.查看所有表 2.表的创建 3.查看表的结构 4.表的修改 4.1 添加新的列 4.2 修改表中现有的列 4…

涨薪技术|0到1学会性能测试第43课-apache status模块监控

前面的推文我们认识了apache目录结构与配置知识,今天我们继续来看下apache监控技术,究竟是怎么做性能监控的。后续文章都会系统分享干货,带大家从0到1学会性能测试。 Apache监控技术 关于apache监控通常会有两种方法: 一是:使用apache自带的status监控模块进行监控; 二是…

关于 MCP 的理论知识学习

文章目录 1. 写在最前面2. 基本概念2.1 Why MCP2.1.1 大模型访问的局限2.1.2 过渡阶段—Function Call2.1.3 当前阶段— MCP 3. 碎碎念4. 参考资料 1. 写在最前面 最近有一项任务是写旧版本迁移到新版本的支持文档&#xff0c;文档的编写是借助于 cursor 帮忙写的。但是实现的…

C++学习之路,从0到精通的征途:List类的模拟实现

目录 一.list的介绍 二.list的接口实现 1.结点 2.list结构 3.迭代器 &#xff08;1&#xff09;begin &#xff08;2&#xff09;end 4.修改 &#xff08;1&#xff09;insert &#xff08;2&#xff09;push_back &#xff08;3&#xff09;push_front &#xff0…

【游戏ai】从强化学习开始自学游戏ai-2 使用IPPO自博弈对抗pongv3环境

文章目录 前言一、环境设计二、动作设计三、状态设计四、神经网路设计五、效果展示其他问题总结 前言 本学期的大作业&#xff0c;要求完成多智能体PPO的乒乓球对抗环境&#xff0c;这里我使用IPPO的方法来实现。 正好之前做过这个单个PPO与pong环境内置的ai对抗的训练&#…

计算机考研精炼 操作系统

第 14 章 操作系统概述 14.1 基本概念 14.1.1 操作系统的基本概念 如图 14 - 1 所示&#xff0c;操作系统是计算机系统中的一个重要组成部分&#xff0c;它位于计算机硬件和用户程序&#xff08;用户&#xff09;之间&#xff0c;负责管理计算机的硬件资源&#xff0c;为用户和…

什么是基尔霍夫第一定律

基尔霍夫第一定律&#xff08;Kirchhoffs First Law&#xff09;&#xff0c;也称为基尔霍夫电流定律&#xff08;Kirchhoffs Current Law&#xff0c;简称 KCL&#xff09;&#xff0c;是电路分析中最基础的定律之一。它描述了电路中电流的守恒特性&#xff0c;适用于任何集总…

解决 RN Switch 组件在安卓端样式很丑的问题

解决此种问题的方式有很多 可以导入原生库react-native-switch 切图 (会缺少动画) 使用 js 组件 这里使用 js 绘制组件&#xff08;原生体验&#xff09;解决此类问题 Switch.tsx import React, { useEffect, useRef, useState } from react; import { Animated, Pressabl…

【AI】【MCP】搭建私人王炸MCP自动化工作流

目录 一、什么是MCP 二、MCP大集合 三、准备工作 3.1 安装node.js 3.2 安装vscode 3.3 安装cline插件 3.3.1 安装 3.3.2 配置Cline 四、配置MCP服务 4.1 Search-mcp服务 4.2 playwright-mcp 服务 前言&#xff1a;梦想组合&#xff0c;轻松办公&#xff0c;告别手动&a…

Git 实操:如何使用交互式 Rebase 移除指定提交(真实案例分享)

在日常开发中&#xff0c;有时候我们提交了一些不想保留的记录&#xff0c;比如测试代码、错误的功能提交等。 ⚠️ 在操作 4. 强制推送到远程仓库前的注意事项 强制推送&#xff08;git push --force 或 git push -f&#xff09;确实很强大但也危险&#xff0c;因为它会重写…

11.Excel:函数

一 函数是什么 函数是定义好的公式。 单元格内输入sum然后tab&#xff0c;框选要求和的范围&#xff0c;然后回车键。 补充&#xff1a;公式。 公式以开头&#xff0c;可以用于计算&#xff0c;返回数值。 分别点击各个数值&#xff0c;中间用加号连接。这样很不方便&#xff…

Springboot使用ThreadLocal提供线程局部变量,传递登录用户名

文章目录 概述使用创建ThreadLocalUtil工具类在登录拦截器中使用ThreadLocal存储登录用户名在/userInfo接口中获取登录用户名 注意事项参考视频 概述 使用 创建ThreadLocalUtil工具类 utils/ThreadLocalUtil.java package org.example.utils;/*** ThreadLocal 工具类*/ Supp…

1399. 统计最大组的数目

1399. 统计最大组的数目 题目链接&#xff1a;1399. 统计最大组的数目 代码如下&#xff1a; class Solution { public:int countLargestGroup(int n) {int res 0;unordered_map<int, int> um;int maxValue 0;for (int i 1;i < n;i) {string value to_string(i);…

VS Code 插件Git History Diff 使用

右上角 查看单个文件记录

数学建模论文手的学习日常01

目录 一.要写的内容&#xff1a; 二.文章标题&#xff1a; 三.摘要&#xff08;非常非常非常重要&#xff09; 四、关键词&#xff1a; 五、问题重述 六、模型假设 七、符号说明 八、模型的建立与求解 九、模型的分析与检验 十、模型的评价、改进与推广 十一、参考…

深度学习: AI 体育领域

一、引言 在科技与体育深度融合的当下&#xff0c;AI 体育逐渐成为推动体育行业变革的重要力量。深度学习凭借其强大的数据分析与模式识别能力&#xff0c;为 AI 体育带来了全新的发展机遇。从运动员动作分析到智能健身指导&#xff0c;从赛事预测到运动康复辅助&#xff0c;深…