AdaBoost算法

Boosting是一种集成学习方法,AdaBoost是Boosting算法中的一种具体实现。

Boosting方法的核心思想在于将多个弱分类器组合成一个强分类器。这些弱分类器通常是简单的模型,比如决策树,它们在训练过程中的错误会被后续的弱分类器所修正。Boosting算法通过逐步增加新的弱分类器来提高整体模型的性能,每个新的弱分类器都专注于之前模型分类错误的样本。

AdaBoost(Adaptive Boosting)是Boosting算法家族中的一员,它的特点是使用了指数损失函数(exponential loss function),这种损失函数会给分类错误的样本赋予更大的权重,使得后续的弱分类器更加关注这些难以分类的样本。通过这种方式,AdaBoost能够自适应地调整每个样本的权重,从而提高模型的整体性能。除了AdaBoost,还有其他基于不同损失函数的Boosting算法,如L2Boosting和LogitBoost等。这些算法虽然在具体的实现细节上有所不同,但都遵循了Boosting方法将弱分类器组合成强分类器的基本框架。

Boosting每一个训练器重点关注前一个训练器不足的地方进行训练,通过加权投票的方式,得出预测结果。

12074e165e42446596b05c9341d2a1f1.png

Bagging 和 Boosting

Bagging 通过均匀取样的方式从原始样本集中抽取训练集,而 Boosting 使用全部样本,并在每一轮训练中根据错误率调整样例权重。这意味着 Bagging 的训练过程可以并行进行,因为它的基模型之间是独立的,而 Boosting 通常是串行进行的,因为每个模型都依赖于前一个模型的表现。

Bagging 方法中每个基模型对于最终决策的贡献是相等的,类似于民主投票制,每个模型有一票;而在 Boosting 中,每个基模型的贡献是根据其性能加权的,性能更好的模型会有更大的影响力。

AdaBoost

AdaBoost算法的核心步骤是:

  1. 权重更新:在每一轮迭代中,根据样本的分类结果来更新每个样本的权重。如果一个样本被正确分类,那么它的权重将会降低;如果一个样本被错误分类,那么它的权重将会增加。这样可以使得在后续的迭代中,分类器更加关注那些难以分类的样本。

  2. 弱分类器的选择:在每一轮迭代中,从所有的弱分类器中选择一个最佳的弱分类器。这个最佳的弱分类器是指在当前权重分布下,分类误差最小的那个弱分类器。

  3. 分类误差率较小的弱分类器的权值大,在表决中起较大作用。

AdaBoost 模型公式

faef75d595fb4150873e33cf90d62758.png 

  1. α 为模型的权重,m 为弱学习器数量。
  2. hi(x) 表示弱学习器
  3. H(x) 输出结果大于 0 则归为正类,小于 0 则归为负类。

AdaBoost 构建过程 

SampleFeature (x)Label (y)
11-1
22-1
331
441

初始化
D1​(1)=D1​(2)=D1​(3)=D1​(4)=1/4

第1轮迭代

  1. 训练一个弱分类器 ℎ1​(x),例如 h_1(x) = \sign(x - 1.5)。
  2. 计算错误率 ϵ1​,假设所有样本都被正确分类,则 ϵ1​=0。
  3. 计算权重α1​,由于epsilon1​=0,则α1​=infty。但通常我们会设置一个上限,比如α1​=0.5。
  4. 更新样本权重,由于所有样本都被正确分类,权重保持不变。

第2轮迭代

  1. 训练另一个弱分类器 ℎ2​(x),例如 h_2(x) = \sign(x - 3)。
  2. 计算错误率 ϵ2​,假设样本1和2被正确分类,样本3和4被错误分类,则ϵ2​=21​。
  3. 计算权重α2​,α2​=21​ln(21​2​)=21​ln(4)≈0.693。
  4. 更新样本权重,增加样本3和4的权重,减少样本1和2的权重。

最终分类器

  • 组合弱分类器的预测结果,形成最终的强分类器H(x)。

这个过程会根据迭代次数M 重复进行,直到达到预定的迭代次数或者满足某个停止条件(如错误率达到某个阈值)。

Demo实战 

import pandas as pd
df_wine = pd.read_csv('wine.data')

df_wine.columns = ['Class label', 'Alcohol', 'Malic acid', 'Ash', 'Alcalinity of ash', 'Magnesium', 'Total phenols',
'Flavanoids', 'Nonflavanoid phenols', 'Proanthocyanins', 'Color intensity', 'Hue', 'OD280/OD315 of diluted wines',
'Proline']

df_wine = df_wine[df_wine['Class label'] != 1]

X = df_wine[['Alcohol', 'Hue']]
y = df_wine['Class label']

 划分训练集测试集

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split

le = LabelEncoder()
y = le.fit_transform(y)
# 划分训练集测试集
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=1)
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import AdaBoostClassifier

tree = DecisionTreeClassifier(criterion='entropy',max_depth=1)
ada= AdaBoostClassifier(base_estimator=tree,n_estimators=500,learning_rate=0.1)

from sklearn.metrics import accuracy_score

tree = tree.fit(X_train,y_train)
y_train_pre = tree.predict(X_train)
y_test_pre = tree.predict(X_test)
tree_train = accuracy_score(y_train,y_train_pre)
tree_test = accuracy_score(y_test,y_test_pre)
print('Decision tree train/test accuracies %.3f/%.3f' % (tree_train,tree_test))
# 0.845/0.854


ada = ada.fit(X_train,y_train)
y_train_pre = ada.predict(X_train)
y_test_pre = ada.predict(X_test)
ada_train = accuracy_score(y_train,y_train_pre)
ada_test = accuracy_score(y_test,y_test_pre)
print('Adaboost train/test accuracies %.3f/%.3f' % (ada_train,ada_test))
# 1/0.875

 AdaBosst的决策区域比单层的决策区域更加复杂。

集成学习与单独的分类器性能比较,集成学习提高了复杂度,但在实践中,需要衡量是否愿意为适度提高预测性能付出更多的计算成本。

AdaBoost算法的总结

AdaBoost的核心思想是通过对错误分类的样本增加权重,使得后续的弱分类器更加关注这些难以分类的样本。通过加权投票的方式,将多个弱分类器的预测结果组合起来,形成一个强分类器。

  1. 初始化:为每个训练样本分配相同的权重。
  2. 迭代训练弱分类器:对于每一轮迭代,训练一个弱分类器,使其在加权训练集上的错误率最小化。
  3. 计算弱分类器权重:根据弱分类器在加权训练集上的错误率,计算其权重。错误率越低,权重越高。
  4. 更新样本权重:根据弱分类器的表现,更新样本权重。被错误分类的样本权重增加,正确分类的样本权重减少。
  5. 构建最终分类器:将所有弱分类器的预测结果按照其权重进行加权求和,形成最终的强分类器。

bb0366bb99fc4830b3d164a891213774.png

 

应用领域

AdaBoost算法广泛应用于各种机器学习任务,包括图像识别、文本分类、医学诊断等领域。

优点

  • 提高模型的性能:AdaBoost可以显著提高弱分类器的性能,使其成为一个强大的分类器。
  • 鲁棒性:AdaBoost对于过拟合具有很好的鲁棒性。
  • 灵活性:可以与各种类型的弱分类器结合使用。

缺点

  • 对噪声敏感:如果训练数据包含噪声,AdaBoost可能会给噪声样本分配较高的权重,从而影响模型的性能。
  • 长时间训练:对于大规模数据集,AdaBoost的训练时间可能会很长。 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多元回归分析:理论与应用

多元回归分析是一种统计方法,用于研究两个或多个自变量(解释变量)与一个因变量(响应变量)之间的关系。这种分析允许研究者评估多个因素对结果变量的影响,是社会科学、经济学、生物医学和工程等多个领域中常…

SolidWorks学习笔记——入门知识1

目录 1、固定最近文档 2、根据需要自定义菜单栏 3、根据需要增添选项卡 4、命令搜索框 5、鼠标右键长按快速切换视图 6、鼠标笔势 自定义鼠标笔势 1、固定最近文档 图1 固定最近文档 2、根据需要自定义菜单栏 图2 根据需要自定义菜单栏 3、根据需要增添选项卡 图3 根据…

Linux介绍和命令使用

目录 目录 一、Linux简介 1.1 主流操作系统 1.2 Linux 发展历史 1.3 Linux系统版本 二、Linux安装 三、Linux 目录结构 四、Linux常用命令 4.1 基础常用命令说明 4.2 Linux 命令使用技巧 4.3 Linux 命令格式 4.4 进阶重点常用命令 4.4.1 拷贝移动命令 4.4.2 打包…

09 AB 10串口通信发送原理

通用异步收发传输器( Universal Asynchronous Receiver/Transmitter, UART)是一种异步收发传输器,其在数据发送时将并行数据转换成串行数据来传输, 在数据接收时将接收到的串行数据转换成并行数据, 可以实现…

springboot项目热部署实现(Spring Boot DevTools方式)

文章目录 Spring Boot DevTools简介Spring Boot DevTools原理spring Boot Devtools优缺点Spring Boot DevTools集成步骤第一步:添加maven依赖第二步:IDEA热部署配置 Spring Boot DevTools简介 Spring Boot DevTools是Spring Boot提供的一个开发工具&…

二维数组的使用

一、二维数组的使用 动态初始化静态初始化 1、动态初始化 2、静态初始化

【Git版本控制 05】多人协作

目录 一、邀请开发用户 二、新建远程分支 三、拉取远程分支 四、推送远程分支 五、合并远程分支 六、多分支协作 一、邀请开发用户 在windows环境下,再clone同⼀个项⽬仓库,来模拟⼀起协作开发的另⼀名⼩伙伴。 际开发中,每个⽤⼾都有…

【flink状态管理(三)】StateBackend的整体设计、StateBackend创建说明

文章目录 一. 状态后端概述二. StateBackend的整体设计1. 核心功能2. StateBackend的UML3. 小结 三. StateBackend的加载与初始化1. StateBackend创建概述2. StateBackend创建过程 一. 状态后端概述 StateBackend作为状态存储后端,提供了创建和获取KeyedStateBacke…

【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)

前言 大家好吖,欢迎来到 YY 滴单片机 系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY…

vue项目打包部署到flask等后端服务里面,实现前后端不分离部署,解决空白页面和刷新页面not fount问题

1. 编译模式一定要设置为esnext,否则会报错: Strict MIME type checking is enforced for module scripts per HTML spec.Expected a JavaScript module script but the server responded with a MIME type of "text/plain". 具体解释可以看vi…

牛客网SQL进阶127: 月总刷题数和日均刷题数

官网链接: 月总刷题数和日均刷题数_牛客题霸_牛客网现有一张题目练习记录表practice_record,示例内容如下:。题目来自【牛客题霸】https://www.nowcoder.com/practice/f6b4770f453d4163acc419e3d19e6746?tpId240 0 问题描述 基于练习记录表…

PyTorch深度学习实战(23)——从零开始实现SSD目标检测

PyTorch深度学习实战(23)——从零开始实现SSD目标检测 0. 前言1. SSD 目标检测模型1.1 SSD 网络架构1.2 利用不同网络层执行边界框和类别预测1.3 不同网络层中默认框的尺寸和宽高比1.4 数据准备1.5 模型训练 2. 实现 SSD 目标检测2.1 SSD300 架构2.2 Mul…

深度学习的新进展:解析技术演进与应用前景

深度学习的新进展:解析技术演进与应用前景 深度学习,作为人工智能领域的一颗璀璨明珠,一直以来都在不断刷新我们对技术和未来的认知。随着时间的推移,深度学习不断迎来新的进展,这不仅推动了技术的演进,也…

Vue中路由守卫的详细应用

作为一名web前端开发者,我们肯定经常使用Vue框架来构建我们的项目。而在Vue中,路由是非常重要的一部分,它能够实现页面的跳转和导航,提供更好的用户体验。然而,有时我们需要在路由跳转前或跳转后执行一些特定的逻辑&am…

vue3项目中的404页面

vue3项目中的404页面 春节前的最后一篇技术博客了 写了不少vue项目,发现一直没有正确处理404页面。404页面的出现有这么几种可能: 错误输入了页面地址路由连接跳转时,某些路由已经不存在了,而程序员并没有正确处理 也就是说40…

C 语言学习七:指针

指针 指针与地址指针的声明和初始化指针的解引用指针的比较指针和数组指针数组指针和动态内存分配 指针与函数参数指针作为函数参数二级指针 指向函数的指针 指针与地址 指针的声明和初始化 int variable 42; int *ptr &variable; //间接访问 int value *ptr; // valu…

【竞技宝】LOL:369兰博豪取四杀带队翻盘 TES2-0轻取WBG

北京时间2024年2月8日,英雄联盟LPL2024春季赛在昨天迎来第三周第三个比赛日,本日第二场比赛由TES对阵WBG。本场比赛TES中后期团战的处理更加出色,第二局更是在后期凭借369兰博的四杀完成翻盘,TES2-0轻取WBG。以下是本场比赛的详细…

蓝桥杯Web应用开发-CSS3 新特性【练习三:文本阴影】

文本阴影 text-shadow 属性 给文本内容添加阴影的效果。 文本阴影的语法格式如下: text-shadow: x-offset y-offset blur color;• x-offset 是沿 x 轴方向的偏移距离,允许负值,必须参数。 • y-offset 是沿 y 轴方向的偏移距离&#xff0c…

GEE详细教程之:将Landsat8与Landsat9影像合成一个影像

1.前言 因项目需求,需要获取一个研究区的Landsat8影像,但Landsat8重复周期长,加之天气的影响,很难获取影像质量较好的影像。Landsat4/5/7的波段顺序与landsat8不同,除此之外,landsat7影像还需要工具进行条带…

222. 完全二叉树的节点个数 - 力扣(LeetCode)

题目描述 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干…
最新文章