AdaBoost 算法:理解、实现和掌握 AdaBoost

news2024/11/26 10:19:15

一、介绍

        Boosting 是一种集成建模技术,由 Freund 和 Schapire 于 1997 年首次提出。从那时起,Boosting 就成为解决二元分类问题的流行技术。这些算法通过将大量弱学习器转换为强学习器来提高预测能力 。

        Boosting 算法背后的原理是,我们首先在训练数据集上构建一个模型,然后构建第二个模型来纠正第一个模型中存在的错误。继续此过程,直到且除非错误被最小化并且数据集被正确预测。Boosting 算法以类似的方式工作,它结合多个模型(弱学习器)来达到最终输出(强学习器)。

        学习目标

  • 了解 AdaBoost 算法是什么及其工作原理。
  • 了解什么是树桩。
  • 了解增强算法如何帮助提高 ML 模型的准确性。

本文作为数据科学博客马拉松的一部分发表 

        目录

  • 介绍
  • 什么是 AdaBoost 算法?
  • 了解 AdaBoost 算法的工作原理
    • 第 1 步:分配权重
    • 第 2 步:对样本进行分类
    • 步骤 3:计算影响力
    • 第 4 步:计算 TE 和性能
    • 第 5 步:减少错误
    • 第 6 步:新数据集
    • 第 7 步:重复前面的步骤
  • 结论
  • 经常问的问题

        二、什么是 AdaBoost 算法?

有许多机器学习算法可供选择用于您的问题陈述。其中一种用于预测建模的算法称为 AdaBoost。

AdaBoost 算法是 Adaptive Boosting 的缩写,是 一种在机器学习中用作集成方法的 Boosting 技术。它被称为自适应提升,因为权重被重新分配给每个实例,更高的权重分配给错误分类的实例。

该算法的作用是构建一个模型并为所有数据点赋予相同的权重。然后,它为错误分类的点分配更高的权重。现在,所有权重较高的点在下一个模型中都会变得更加重要。它将继续训练模型,直到收到较低的错误为止。

        让我们举个例子来理解这一点,假设您在泰坦尼克号数据集上构建了一个决策树算法,并且从那里您获得了 80% 的准确率。之后,您应用不同的算法并检查准确性,结果显示 KNN 为 75%,线性回归为 70%。

        当我们在同一数据集上构建不同的模型时,我们发现准确性有所不同。但是如果我们使用所有这些算法的组合来做出最终预测呢?通过取这些模型结果的平均值,我们将获得更准确的结果。我们可以通过这种方式来提高预测能力。

        如果您想直观地理解这一点,我强烈建议您阅读这篇文章。

        这里我们将更加关注数学直觉。

        还有另一种集成学习算法称为梯度提升算法。在此算法中,我们尝试减少误差而不是权重,如 AdaBoost 中那样。但在本文中,我们将仅关注 AdaBoost 的数学直觉。

三、了解 AdaBoost 算法的工作原理

让我们通过以下教程了解该算法的原理和工作原理。

第 1 步:分配权重

下面显示的图像是我们数据集的实际表示。由于目标列是二元的,因此这是一个分类问题。首先,这些数据点将被分配一些权重。最初,所有权重都是相等的。

样本权重的计算公式为:

其中 N 是数据点的总数

这里由于我们有 5 个数据点,因此分配的样本权重将为 1/5。

第 2 步:对样本进行分类

我们首先查看“性别”对样本进行分类的效果如何,然后查看变量(年龄、收入)如何对样本进行分类。

我们将为每个特征创建一个决策树桩,然后计算每棵树的基尼指数。基尼指数最低的树将是我们的第一个树桩。

在我们的数据集中,假设性别具有最低的基尼指数,因此它将是我们的第一个树桩。

第 3 步:计算影响力

现在,我们将使用以下公式计算该分类器在对数据点进行分类时的“发言量”“重要性”“影响力” :

 

总误差只不过是错误分类的数据点的所有样本权重的总和。

在我们的数据集中,我们假设有 1 个错误的输出,因此我们的总误差将为 1/5,并且 alpha(树桩的性能)将为:

        

注意:总误差始终在 0 和 1 之间。

0 表示完美的树桩,1 表示糟糕的树桩。

        从上图中,我们可以看到,当没有错误分类时,我们就没有错误(Total Error = 0),因此“a amount of say (alpha)”将是一个很大的数字。

        当分类器预测一半正确一半错误时,则总误差 = 0.5,并且分类器的重要性(可以说)将为 0。

        如果所有样本都被错误分类,那么错误将非常高(大约为 1),因此我们的 alpha 值将是负整数。

        第 4 步:计算 TE 和性能

        您一定想知道为什么需要计算树桩的 TE 和性能。答案很简单,我们需要更新权重,因为如果将相同的权重应用于下一个模型,那么收到的输出将与第一个模型中收到的输出相同。

        错误的预测将被赋予更高的权重,而正确的预测权重将被降低。现在,当我们在更新权重后构建下一个模型时,将更优先考虑权重较高的点。

        在找到分类器的重要性和总误差后,我们最终需要更新权重,为此,我们使用以下公式:

当样本被正确分类时,例如(alpha)的数量将为

当样本被错误分类时,例如(alpha)的量将为正。

有 4 个正确分类的样本,1 个错误分类的样本。这里, 该数据点的样本权重1/5,性别树桩的发言/表现 量是0.69

正确分类样本的新权重为:

对于错误分类的样本,更新后的权重为:

笔记

当我输入值时请查看 alpha 的符号,当数据点正确分类时alpha 为负,这会将样本权重从 0.2 降低到 0.1004。当存在错误分类时为,这会将样本权重从 0.2 增加到 0.3988

        我们知道样本权重的总和必须等于 1,但是这里如果我们将所有新样本权重相加,我们将得到 0.8004。为了使这个总和等于 1,我们将所有权重除以更新权重的总和(即 0.8004)来标准化这些权重。因此,对样本权重进行归一化后,我们得到了这个数据集,现在总和等于 1。

第 5 步:减少错误

现在,我们需要创建一个新的数据集来查看错误是否减少。为此,我们将删除“样本权重”和“新样本权重”列,然后根据“新样本权重”将数据点划分为多个桶。

第 6 步:新数据集

我们快完成了。现在,该算法所做的是从 0-1 中选择随机数。由于错误分类的记录具有较高的样本权重,因此选择这些记录的概率非常高。

假设我们的算法采用的 5 个随机数是 0.38,0.26,0.98,0.40,0.55。

现在我们将看到这些随机数落在桶中的位置,并根据它,我们将制作如下所示的新数据集。

这是我们的新数据集,我们看到错误分类的数据点已被选择 3 次,因为它的权重较高。

第 7 步:重复前面的步骤

现在这作为我们的新数据集,我们需要重复上述所有步骤,即

  1. 为所有数据点 分配相同的权重。
  2. 通过查找基尼指数并选择基尼指数最低的树桩,找到对新样本集合进行分类的最佳树桩
  3. 计算“Amount of Say”“Total error”来更新之前的样本权重。
  4.  标准化新样本权重。

迭代这些步骤,直到达到较低的训练误差。

假设对于我们的数据集,我们按顺序构建了 3 个决策树(DT1、DT2、DT3)  如果我们现在发送测试数据,它将通过所有决策树,最后,我们将看到哪个类占多数,并基于此,我们将对
测试数据集进行预测。

四、结论

如果你理解了本文的每一行,你就终于掌握了这个算法。

我们首先向您介绍什么是 Boosting 以及它的各种类型,以确保您了解 Adaboost 分类器以及 AdaBoost 的准确位置。然后我们应用简单的数学并了解公式的每个部分是如何工作的。

在下一篇文章中,我将解释梯度下降和极限梯度下降算法,它们是一些更重要的增强预测能力的Boosting技术。

如果您想从头开始了解 AdaBoost 机器学习模型初学者的 Python 实现,请访问Analytics vidhya 的完整指南。本文提到了bagging和boosting的区别,以及AdaBoost算法的优缺点。

  • 在本文中,我们了解了 boosting 的工作原理。
  • 我们了解 adaboost 背后的数学原理。
  • 我们了解了如何使用弱学习器作为估计器来提高准确性。

五、常见的问题

Q1. AdaBoost 算法是有监督的还是无监督的?

答:Adaboost 属于机器学习的监督学习分支。这意味着训练数据必须有一个目标变量。使用adaboost学习技术,我们可以解决分类和回归问题。

Q2。AdaBoost算法有哪些优点?

答:需要较少的预处理,因为您不需要缩放自变量。AdaBoost 算法中的每次迭代都使用决策树桩作为单独的模型,因此所需的预处理与决策树相同。AdaBoost 也不太容易出现过度拟合。除了增强弱学习器之外,我们还可以微调这些集成技术中的超参数(例如learning_rate)以获得更好的准确性。

Q3。如何使用 AdaBoost 算法?

答:与随机森林、决策树、逻辑回归和支持向量机分类器非常相似,AdaBoost 也要求训练数据具有目标变量。该目标变量可以是分类变量或连续变量。scikit-learn 库包含 Adaboost 分类器和回归器;因此我们可以使用Python中的sklearn来创建adaboost模型。

本文中显示的关于使用 Bokeh 的交互式仪表板的媒体不属于 Analytics Vidhya 所有,其使用由作者自行决定。

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

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

相关文章

设计模式(4)-行为型模式

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间…

spark与scala的对应版本查看

仓库地址 https://mvnrepository.com/artifact/org.apache.spark/spark-core 总结 spark3.0 以后,不再支持 scala2.11spark3.0 以后,只能用 scala2.12以上

【吞噬星空】罗峰成功抵达虬龙星,宇宙超级富二代登场,不容错过

Hello,小伙伴们,我是小郑继续为大家深度解析国漫资讯。 深度爆料《吞噬星空》93集,在虬龙星港口,当罗峰的飞船一进入,牵引信号就立刻响起,像一道无形的指引线,将他飞船牵引至指定的停靠区域。罗峰踏出飞船…

如何在 Nginx Proxy Manager(NPM)上部署静态网站

前言 众所周知,我们在之前介绍过 Nginx Proxy Manager(以下简称 NPM) 这个反向代理的神器,对于一些 Docker 搭建的 Web 项目,NPM 能够很轻松地给他们做反向代理。 然而对于一些静态网站,小伙伴们可能不知道怎么用 NP…

机器人制作开源方案 | 智能家庭防护机器人

作者:李尚堰 陈庆达 王立宽 尹婕 张永俊单位:哈尔滨剑桥学院指导老师:马文龙 韩轶男 一、设计背景 随着计算机技术、信息通讯、大数据、智能传感等科学技术的不断发展、融合以及在机器人领域的不断应用,服务机器人产业将呈现出快…

SpringBoot--中间件技术-4:整合Shiro,Shiro基于会话SessionManager实现分布式认证,附案例含源代码!

SpringBoot整合安全中间件Shiro 技术栈&#xff1a;SpringBootShiro 代码实现 pom文件加坐标 Springboot版本选择2.7.14 &#xff1b;java版本1.8 &#xff1b; shiro做了版本锁定 1.3.2 <properties><java.version>1.8</java.version><!--shiro版本锁定…

JavaScript的函数的形参与实参是怎么回事

0 写在前面 此文给小白看的&#xff0c;如果不是可以直接关闭 1 讲解 例如JavaScript中定义函数 //定义函数 function 方法名(形参){方法体-->使用形参}//使用函数 方法名字(实参)具体干了什么呢&#xff1f;此处以伪代码举例 //定义函数 function eat(A,B){A 去 B 家吃…

每日一题:编写程序,使程序分别输出两个整数的加减乘除运算结果

文章目录 每日一题一、编写程序&#xff0c;使程序分别输出两个整数的加减乘除运算结果以下是一个使用 Java 编写的程序&#xff0c;可以输出两个整数的加减乘除运算结果&#xff1a;以下是一个简单的 Python 程序&#xff0c;可以计算两个整数的加减乘除运算结果&#xff1a; …

mindspore mindyolo目标检测华为昇腾上推理使用、训练;华为OBS文件传输使用

参考&#xff1a; https://github.com/mindspore-lab/mindyolo 使用案例&#xff1a; https://github.com/mindspore-lab/mindyolo/blob/master/GETTING_STARTED.md 安装&#xff1a; pip install mindyolo特别注意opencv-python、opencv-python-headless版本问题&#xff0…

阿里云2核2G3M带宽服务器,新老用户同价99元/年!续费不涨价!

作为双11服务器中备受用户关注的一款&#xff0c;轻量服务器2核2G3M带宽优惠价87元一年的价格令人惊喜。不仅价格实惠&#xff0c;而且配置也十分出色。2核2G的配置足够应对一般网站和轻量级应用的需求&#xff0c;同时3M的带宽也能够保障数据的快速传输。对于个人网站、小型企…

CSDN每日一题学习训练——Java版(二叉搜索树迭代器、二叉树中的最大路径和、按要求补齐数组)

版本说明 当前版本号[20231115]。 版本修改说明20231115初版 目录 文章目录 版本说明目录二叉搜索树迭代器题目解题思路代码思路参考代码 二叉树中的最大路径和题目解题思路代码思路参考代码 按要求补齐数组题目解题思路代码思路参考代码 二叉搜索树迭代器 题目 实现一个二…

DevExpress WinForms HeatMap组件,一个高度可自定义热图控件!

通过DevExpress WinForms可以为Windows Forms桌面平台提供的高度可定制的热图UI组件&#xff0c;体验DevExpress的不同之处。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程…

系列三、双亲委派机制

一、概述 当一个类收到了类加载的请求&#xff0c;它首先不会尝试自己去加载这个类&#xff0c;而是把这个请求委派给父类去完成&#xff0c;每一层的类加载器都是如此&#xff0c;因此所有的请求都应该传送到启动类加载器中&#xff0c;只有当父类加载器反馈自己无法完成这个…

人工智能赋能职业教育:技术融合引领教育变革

人工智能赋能职业教育&#xff1a;技术融合引领教育变革 摘要&#xff1a;本文探讨了人工智能技术在职业教育领域的应用及其带来的变革。通过分析人工智能在个性化教学、智能评估和教学资源优化等方面的技术优势&#xff0c;结合职业教育的现状和发展需求&#xff0c;提出了人…

计算机网络之网络体系结构

计算机网络体系结构 一、常见的计算机体系结构 1.1 OSI标准以及TCP/IP体系结构 OSI标准失败的原因&#xff1a; OSI的专家们缺乏实际经验&#xff0c;他们在完成OSI标准时没有商业驱动力OSI的协议实现起来过分复杂&#xff0c;而且运行效率很低OSI标准的制定周期太长&#x…

【ArcGIS Pro二次开发】(76):面积平差工具

之前做过一个【三调土地利用现状分类面积汇总】的工具&#xff0c;在流程中使用了面积平差的方法。 考虑了在其它场合可能也需要进行面积平差&#xff0c;因此单独提取出来作为一个工具。 平差实现的方法如下图&#xff1a; 主要的计算过程如上图所示&#xff0c;算出总面积差…

队列的实现---超详细

队列的实现—超详细 文章目录 队列的实现---超详细一、队列的模型二、代码实现以及测试用例①队列初始化②入队③出队④输出队头⑤输出队尾⑥判断队列是否为空⑦队列的长度⑧队列的销毁⑨测试用例 一、队列的模型 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在…

从零搭建微服务架构:Spring Boot与Nacos完美整合

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 从零搭建微服务架构&#xff1a;Spring Boot与Nacos完美整合 前言第一&#xff1a;服务注册与发现第二&#xff1a;配置中心第三&#xff1a;报错问题解决第四&#xff1a;什…

深度学习+opencv+python实现车道线检测 - 自动驾驶 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络 4 YOLOV56 数据集处理7 模型训练8 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &am…

【数据结构】单链表基本操作的实现

【单链表的头插和尾插】//无头结点 #include<stdio.h> #include<stdlib.h> typedef struct LNode {int date;struct LNode *next; }LNode,*LinkList; LinkList great_LinkList(LinkList L)//头部插入 {LinkList s;int x,j1;scanf("%d",&x);while(x…