理解AdaBoost算法:简单流程概述(一)【流程理解、无数学推导】

什么是AdaBoost 算法?

AdaBoost(Adaptive Boosting)算法,全称为 自适应提升 ,是 一种在机器学习中用作集成方法的提升技术 。它之所以被称为自适应提升,因为每个实例的权重会重新分配,错误分类的实例分配较高的权重

它属于boosting算法家族,其核心思想是通过迭代训练多个弱分类器(weak classifiers),每个弱分类器针对之前迭代中被错误分类的样本进行重点训练,最终将这些弱分类器组合成一个强分类器。

AdaBoost 算法的优点和缺点

优点

  • 高精度: AdaBoost能够将多个弱分类器组合成一个强分类器,从而提高整体分类性能。
  • 抗过拟合: 由于算法重点关注错误分类的样本,因此具有一定的抗过拟合能力。
  • 适用性广泛: 可以应用于各种类型的问题,并且对于大型数据集或具有复杂模式的数据集也适用。
  • 多功能: 可以与不同类型的基础分类器一起使用,从而实现建模的灵活性。

缺点

  • 对噪声数据敏感: AdaBoost对噪声数据非常敏感,因为它会将更多的注意力放在错误分类的样本上。
  • 计算开销大: 在训练过程中,AdaBoost需要大量的计算资源,尤其是在处理大规模数据集时。
  • 超参数调优: 迭代次数和弱分类器的选择都是需要调优的超参数,这需要一定的经验和计算成本。
  • 对不平衡数据集表现不佳: 当某一类样本数量远远超过其他类别时,AdaBoost可能会出现性能下降的情况。

AdaBoost 算法的工作原理

  1. 初始化样本权重: 算法开始时,为每个样本赋予相同的权重,这些权重表示样本的重要性。初始情况下,所有样本对分类器的影响被认为是相同的。

  2. 迭代训练弱分类器: AdaBoost通过多次迭代训练弱分类器,每个迭代都会生成一个弱分类器,比如单层决策树(decision stump),该分类器略优于随机猜测。

  3. 加权训练: 在每次迭代中,弱分类器都会根据当前样本权重进行训练,以最小化错误分类。这意味着算法更加关注之前分类错误的样本。

  4. 更新样本权重: 在每次迭代后,算法会更新样本的权重,将错误分类的样本的权重增加,而正确分类的样本的权重减少。

  5. 集成弱分类器: 经过多次迭代后,AdaBoost将所有弱分类器组合成一个强分类器,通过加权多数投票的方式获得最终分类结果。

  6. 重复迭代: 重复上述步骤,直到达到预设的迭代次数或者达到停止条件。

大致过程如图所示:
在这里插入图片描述

图片来自于:AdaBoost Algorithm: Understand, Implement and Learn

这个算法的作用是构建一个模型,并给所有数据点赋予相等的权重。然后为错误分类的数据点赋予更高的权重。现在,所有具有较高权重的数据点在下一个模型中将被赋予更多的重要性。它会不断训练模型,直到获得较低的错误为止。

Titanic 数据集例子

假设我们在 Titanic 数据集上构建了一个决策树算法,并得到了 80% 的准确率。之后,应用了不同的算法,并检查准确率,结果为 KNN 算法的 75% 和线性回归的 70%。

在同一数据集上构建不同模型时,我们会观察到准确率的变化。然而,通过利用 AdaBoost 的力量,我们可以结合这些算法来增强最终的预测。通过平均不同模型的结果,AdaBoost 使我们能够有效地提高准确率并增强预测能力。

让我们现在一步步的理解这个处理的过程,来了解这个算法的工作原理。

步骤 1 :分配权重

Row No.GenderAgeIncomeIllnessSample Weights
1Male4140,000Yes1/5
2Male5430,000No1/5
3Female4225,000No1/5
4Female4060,000Yes1/5
5Male4650,000Yes1/5

我们数据集的实际表示如表所示。由于目标列是二元的(是否生病),所以这是一个分类问题。首先,这些数据点将被分配一些权重。最初,所有的权重将是相等的。
计算样本权重的公式是:
w ( x i , y i ) = 1 N , i = 1 , 2 , . . . . n w(x_i,y_i) = \frac{1}{N} , i = 1,2 , ....n w(xi,yi)=N1,i=1,2,....n
其中 N 是数据点的总数,这里因为我们有 5 个数据点,所以分配的样本权重将是 1/5。

步骤 2:分类样本

我们首先看看“性别”如何分类样本,然后再看看变量(年龄,收入)如何分类样本。

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

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

在步骤2中,为了更好地理解 AdaBoost 算法,我们需要了解一些基本概念:决策树桩和基尼指数。下面详细解释这些概念。

决策树桩(Decision Stump)是什么?

决策树桩是决策树的一种简单形式,它 只考虑一个特征 来进行决策。它是一个只有一层深度的决策树,意味着它只基于一个特征将数据划分成两类。

示例:

假设我们有一个数据集,包含两个特征“年龄”和“收入”,以及一个二元分类标签“是否购买”。一个决策树桩可能会基于“年龄”特征,将数据划分成“年龄<30”和“年龄≥30”两类。然后它会根据这两个类别分别预测是否购买。

由于决策树桩非常简单,只能基于一个特征进行划分,所以它被称为“弱学习器”。但在 AdaBoost 中,通过组合多个弱学习器,我们可以获得一个强大的分类器。

基尼指数(Gini Index)是什么?

基尼指数是用于评估决策树分割质量的一种指标。它衡量了数据集中类别的不纯度。基尼指数的计算公式为:

G i n i ( D ) = 1 − ∑ k = 1 n p k 2 Gini(D) = 1 - \sum_{k=1}^{n} p_k^2 Gini(D)=1k=1npk2

其中, p k p_k pk 是第 k k k 类在数据集 D D D 中的比例。

基尼指数的取值范围在 0 到 0.5 之间:

  • 当基尼指数为 0 时,数据集是纯净的,只有一个类别。
  • 当基尼指数接近 0.5 时,数据集的类别分布是最不均匀的。

“基尼指数最低的树将是我们的第一个树桩。”如何理解这句话?

在构建 AdaBoost 模型的过程中,我们需要选择一个最能区分数据的特征作为第一个决策树桩。这句话的意思是我们将选择基尼指数最低的决策树桩作为第一个弱学习器。基尼指数最低意味着这个决策树桩能够 最好地划分数据 ,从而减少数据集的不纯度。

理解这个过程:

  1. 计算每个特征的基尼指数:对于每个特征(例如“年龄”、“收入”等),计算它们基于不同划分点(例如“年龄<30”和“年龄≥30”)的基尼指数。
  2. 选择基尼指数最低的特征:比较所有特征的基尼指数,选择基尼指数最低的特征作为第一个决策树桩。
  3. 构建第一个决策树桩:基于选定的特征构建第一个决策树桩,这个树桩将用于第一次划分数据。

通过这种方法,我们保证第一个弱学习器能够尽可能有效地对数据进行分类,从而为后续的模型训练提供良好的基础。

步骤 3:计算影响

现在我们将计算这个分类器在分类数据点中的“影响量(Amount of Say)”或“重要性(Importance)”或“影响力(Influence)”,使用以下公式:

I n f l u e n c e = 1 2 l o g 1 − T o t a l E r r o r T o t a l E r r o r Influence = \frac{1}{2} log\frac{1-TotalError}{TotalError} Influence=21logTotalError1TotalError
总错误(TotalError)只是错误分类数据点的所有样本 权重的总和

在我们的数据集中,假设有一个错误输出,所以我们的总错误(TotalError)将是 1/5(只有对应错误样本点的权重),而 alpha(树桩的表现)将是:

P e r f o r m a n c e o f t h e s t u m p = 1 2 log ⁡ e ( 1 − Total Error  Total Error  ) Performance of the stump =\frac{1}{2} \log _{e}\left(\frac{1-\text { Total Error }}{\text { Total Error }}\right) Performanceofthestump=21loge( Total Error 1 Total Error )

α = 1 2 log ⁡ e ( 1 − 1 5 1 5 ) α = 1 2 log ⁡ e ( 0.8 0.2 ) α = 1 2 log ⁡ e ( 4 ) = 1 2 ∗ ( 1.38 ) α = 0.69 \begin{aligned} \alpha & =\frac{1}{2} \log _{e}\left(\frac{1-\frac{1}{5}}{\frac{1}{5}}\right) \\ \alpha & =\frac{1}{2} \log _{e}\left(\frac{0.8}{0.2}\right) \\ \alpha & =\frac{1}{2} \log _{e}(4)=\frac{1}{2} *(1.38) \\ \alpha & =0.69 \end{aligned} αααα=21loge(51151)=21loge(0.20.8)=21loge(4)=21(1.38)=0.69

注意: 总错误(TotalError)将始终在 0 和 1 之间。

0 表示完美的树桩(没有一个错误),1 表示糟糕的树桩(全错)。

在这里插入图片描述
从上图可以看出,当没有错误分类时,我们的总错误为 0,因此“影响量(alpha)”将是一个大数值。

当分类器预测一半正确一半错误时,总错误为 0.5,分类器的重要性(影响量)将为 0。

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

步骤 4:计算总错误和表现

为什么要计算 AdaBoost 树桩的总错误(TE)和表现?更新权重是关键 。如果对后续模型保持相同的权重,输出将与初始模型相同。

错误的预测将被赋予更高的权重,而正确的预测权重将减少。当我们在更新权重后构建下一个模型时,具有更高权重的点将被赋予更多的优先权。

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

N e w s a m p l e w e i g h t = o l d w e i g h t ∗ e ± A m o u n t o f s a y ( α ) New\ sample\ weight = old\ weight * e^{\ \pm\ Amount\ of\ say(\alpha)} New sample weight=old weighte ± Amount of say(α)

当样本被正确分类时,影响量(alpha)将为负。

当样本被错误分类时,影响量(alpha)将为正。

这里有四个正确分类的样本和一个错误分类的样本。错误分类数据点的样本权重为 1/5,性别树桩的表现为 0.69(前面通过公式计算得到)。

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

N e w s a m p l e w e i g h t = 1 5 ∗ e x p ( − 0.69 ) New \ sample\ weight = \frac{1}{5} * exp(-0.69) New sample weight=51exp(0.69)
N e w s a m p l e w e i g h t = 0.2 ∗ 0.502 = 0.1004 New \ sample\ weight = 0.2 * 0.502 = 0.1004 New sample weight=0.20.502=0.1004

对于错误分类的样本,更新后的权重为:
N e w s a m p l e w e i g h t = 1 5 ∗ e x p ( 0.69 ) New \ sample\ weight = \frac{1}{5} * exp(0.69) New sample weight=51exp(0.69)
N e w s a m p l e w e i g h t = 0.2 ∗ 1.994 = 0.3988 New \ sample\ weight = 0.2 * 1.994 = 0.3988 New sample weight=0.21.994=0.3988

注意(Note)
当我填入值时,请看 alpha 的符号,当数据点正确分类时,alpha 为负,这将样本权重从 0.2 减少到 0.1004。当有错误分类时,它为正,这将样本权重从 0.2 增加到 0.3988。

Row No.GenderAgeIncomeIllnessSample WeightsNew Sample Weights
1Male4140,000Yes1/50.1004
2Male5430,000No1/50.1004
3Female4225,000No1/50.1004
4Female4060,000Yes1/50.3988
5Male4650,000Yes1/50.1004

我们知道样本权重的总和必须等于 1,但这里如果我们将所有新样本权重相加,我们将得到 0.8004。为了使这个总和等于 1,我们将通过将所有权重除以更新权重的总和 0.8004 来 归一化 这些权重。所以,归一化后的样本权重是这样的,现在总和等于 1。

为了确保在重新采样时,权重作为概率来使用。
权重越大,数据点被选中的概率就越高。

Row No.GenderAgeIncomeIllnessSample WeightsNew Sample Weights
1Male4140,000Yes1/50.1004 / 0.8004 = 0.1254
2Male5430,000No1/50.1004 / 0.8004 = 0.1254
3Female4225,000No1/50.1004 / 0.8004 = 0.1254
4Female4060,000Yes1/50.3988 / 0.8004 = 0.4982
5Male4650,000Yes1/50.1004 / 0.8004 = 0.1254

步骤 5:减少错误

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

Row No.GenderAgeIncomeIllnessSample WeightsNew Sample WeightsBuckets
1Male4140,000Yes1/50.1004 / 0.8004 = 0.12540 to 0.1254
2Male5430,000No1/50.1004 / 0.8004 = 0.12540.1254 to 0.2508
3Female4225,000No1/50.1004 / 0.8004 = 0.12540.2508 to 0.3762
4Female4060,000Yes1/50.3988 / 0.8004 = 0.49820.3762 to 0.8744
5Male4650,000Yes1/50.1004 / 0.8004 = 0.12540.8744 to 0.9998

buckets是什么?用来干啥的?

buckets 用于重新采样数据点。为了重新采样数据,我们会生成随机数(范围在0到1之间),这些随机数落在哪个bucket中,就选择哪个bucket对应的数据点。

例如,如果随机数是 0.38,那么它落在 0.3762(0.1254 * 3 ) 到 0.8744(0.3762 + 0.4982-归一化得到的新权重) 之间,因此我们选择第4个样本。

bucket计算过程是怎样的?

  • 第一个数据点的新权重为0.1254,累积区间为0到0.1254(0+0.1254)。
  • 第二个数据点的新权重为0.1254,累积区间为0.1254到0.2508(0.1254+0.1254)。
  • 第三个数据点的新权重为0.1254,累积区间为0.2508到0.3762(0.2508+0.1254)。
  • 第四个数据点的新权重为0.4982,累积区间为0.3762到0.8744(0.3762+0.4982)。
  • 第五个数据点的新权重为0.1254,累积区间为0.8744到0.9998。

累积权重区间(buckets)是通过将每个数据点的权重依次累加而得出的。每个数据点的累积权重区间从前一个数据点的累积区间上限开始,加上当前数据点的权重。

步骤 6:新数据集

到这一步,我们基本上完成了。现在,算法会从 0 到 1 选择随机数。由于错误分类的记录具有较高的样本权重,选择这些记录的概率非常高。

假设算法选择的 5 个随机数是 [0.58842873 0.88056847 0.61431001 0.02307079 0.69973373]。

  • 0.58842873 处于 (0.3762 到 0.8744)——第四个样本
  • 0.88056847 处于(0.8744 到 0.9998)——第五个样本
  • 0.61431001 处于 (0.3762 到 0.8744)——第四个样本
  • 0.02307079 处于(0 到 0.1254)——第一个样本
  • 0.69973373 处于 (0.3762 到 0.8744)——第四个样本

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

Row No.GenderAgeIncomeIllnessSample WeightsNew Sample WeightsBuckets
4Female4060,000Yes1/50.49820.3762 to 0.8744
5Male4650,000Yes1/50.12540.8744 to 0.9998
4Female4060,000Yes1/50.49820.3762 to 0.8744
1Male4140,000Yes1/50.12540 to 0.1254
4Female4060,000Yes1/50.49820.3762 to 0.8744

这就是我们的新数据集,我们看到错误分类的数据点被选中了三次,因为它具有较高的权重。

步骤 7:重复前面的步骤

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

  • 为所有数据点分配相等的权重。
  • 找到分类新样本集合最好的树桩,通过找到它们的基尼指数并选择基尼指数最低的一个。
  • 计算“影响量”和“总错误”以更新先前的样本权重。
  • 归一化新样本权重。
  • 迭代这些步骤,直到达到较低的训练误差。

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

参考文章:

  • Understanding the AdaBoost Algorithm | by Data Science Wizards | Medium
  • AdaBoost Algorithm: Understand, Implement and Learn

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

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

相关文章

推荐一个远程数据库 Supabase

地址&#xff1a;Supabase | The Open Source Firebase Alternative 使用文档&#xff1a; Supabase Docs

NIUSHOP开源商城单商户V6版本:前端技术架构的深度解析

摘要&#xff1a; 本文将对NIUSHOP开源商城单商户V6版本的前端技术架构进行深度解析。NIUSHOP V6版本以其强大的多应用多插件组合设计理念、前后端完全分离的技术架构&#xff0c;以及支持多语言、多平台等特点&#xff0c;受到了市场的广泛好评。本文将详细介绍其前端技术栈的…

HOW - BFF 服务实践系列(一)

目录 一、BFF 介绍1.1 BFF 的概念1.2 为什么需要 BFF1.3 举例说明 二、适用于Web前端的BFF应该提供哪些能力2.1 接口聚合&#xff08;重要&#xff09;2.2 简化和优化的API2.3 安全和身份验证&#xff08;重要&#xff09;2.4 缓存机制2.5 错误处理和重试机制2.6 数据格式转换2…

【算法】贪心算法简介

贪心算法概述 目录 1.贪心算法概念2.贪心算法特点3.贪心算法学习 1.贪心算法概念 贪心算法是一种 “思想” &#xff0c;即解决问题时从 “局部最优” 从而达到 “全局最优” 的效果。 ①把解决问题的过程分为若干步②解决每一步时候&#xff0c;都选择当前最优解(不关注全局…

RDD实战:排序算子 - sortBy()

在本实战案例中&#xff0c;我们将使用Apache Spark的sortBy()算子来对一个包含学生信息的RDD进行排序操作。 排序规则如下&#xff1a; 首先按照性别升序排列。在性别相同的情况下&#xff0c;按照年龄降序排列。 步骤1&#xff1a;创建学生信息列表 首先&#xff0c;我们创…

基于51单片机和NRF24L01的无线温度监控设计

一、设计功能 由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。 温度显示精确到小数点后一位。 按键设定过温值&#xff0c;过温在液晶屏提示。 系统设计 三、器件选择3.1温度信号采集模块 传统的温度检测大多以热敏电阻为传感器&a…

【C++】list的使用(上)

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; STL || C 目录 前言&#x1f308;关于list&#x1f525;默认成员函数构造函数&#xff08;constructor&#xff09;析构函数&#xff08;destructor&#xff09;赋值运算符重载 &#x1…

五分钟“手撕”栈

实现代码放开头&#xff0c;供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…

Request

一、Request介绍 在计算机网络中&#xff0c;"Request"&#xff08;请求&#xff09;通常指的是客户端向服务器发送的请求消息&#xff0c;用于获取特定资源或执行特定操作。在Web开发中&#xff0c;"Request"通常指的是HTTP请求&#xff0c;用于客户端与服…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线&#xff0c;以其独特的外观设计和强大的性能&#xff0c;成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号&#xff0c;更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨&#xff0c;象征着力量…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈&#xff08;堆栈&#xff09;&#xff1a;存放非静态局部变量/函数参数/函数返回值等等&#xff0c;栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆&#xff1a;用于程序运行时动态内存分配&#xff…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中&#xff0c;它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时&#xff0c;通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件&#xff1a; 1.域智盾软件&#xff1a; 作为一款企业级文件加密软件&#xff0c;支持…

曲面细分技术在AI去衣中的创新应用

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;其在图像处理领域的应用日益广泛。其中&#xff0c;AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中&#xff0c;曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别&#xff1a; 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时&#xff0c;程序运行异常&#xff1a; u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

vue3可以快速简单的操作dom元素了

再也不需要用document.getElementById("myElement")的这种方式来对dom元素进行操作了 我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用&#xff1a; <script setup> import { ref, onMo…

wafw00f一键检测目标防火墙信息(KALI工具系列十五)

目录 1、KALI LINUX简介 2、wafw00f工具简介 3、在KALI中使用lbd 3.1 查看可检测的防火墙对象 3.2 目标防火墙种类检测 3.3 目标防火墙详细信息检测 3.4 将检查结果输出 4、总结 1、KALI LINUX简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版&#xff0c;广…

最好的电脑数据恢复软件是什么

由于硬件故障、恶意软件攻击或意外删除而丢失文件可能会造成巨大压力。数据丢失会扰乱日常运营&#xff0c;造成宝贵的业务时间和资源损失。在这些情况下&#xff0c;数据恢复软件是检索丢失或损坏数据的最简单方法。 数据恢复软件何时起作用&#xff1f; 对于 Windows 数据恢…

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值&#xff08;父传子&#xff09; vue的组件具有props自建属性&#xff08;自定义名称&#xff0c;类似于class&#xff0c;id的属性&#xff09;&#xff0c;通过这个属性&#xff0c;父组件可以向子组件传递参数&#xff0c;从而实现组件之间的信息传递&#xff0…

CSDN UI 2024.06.01

当我们的栏目很多的时候&#xff0c;通过【置顶】来排列顺序是很麻烦的&#xff0c;应该加一列&#xff0c;设置优先级别。太难用了 或者加两个按钮【上移】 【下移】