首页 > 编程语言 >AdaBoost与前向分步算法

AdaBoost与前向分步算法

时间:2024-10-31 11:48:50浏览次数:3  
标签:加性 min 模型 算法 AdaBoost alpha gamma 分步

1. 加性模型的定义

在AdaBoost算法中,我们可以将其视为一种加性模型。加性模型是指由多个基模型的线性组合构成的模型。图中的公式 (10-9) 描述了加性模型的形式:
f ( x ) = ∑ t = 1 T α t b ( x ; γ t ) f(x) = \sum_{t=1}^T \alpha_t b(x; \gamma_t) f(x)=t=1∑T​αt​b(x;γt​)

其中:

  • b ( x ; γ t ) b(x; \gamma_t) b(x;γt​) 表示第 t t t 个基模型,参数 γ t \gamma_t γt​ 是模型的参数。
  • α t \alpha_t αt​ 是基模型的系数,表示每个基模型的权重。
  • T T T 是基模型的数量。

加性模型的目标是最小化损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)),通过逐步优化每个基模型的参数和权重,逐渐逼近目标值。

2. 加性模型的目标函数

对于给定的训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) } D = \{(x_1, y_1), (x_2, y_2), \dots, (x_N, y_N)\} D={(x1​,y1​),(x2​,y2​),…,(xN​,yN​)},其中 x i ∈ R n x_i \in \mathbb{R}^n xi​∈Rn, y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi​∈{−1,+1},我们可以定义加性模型的目标函数为:
min ⁡ α t , γ t ∑ i = 1 N L ( y i , ∑ t = 1 T α t b ( x i ; γ t ) ) \min_{\alpha_t, \gamma_t} \sum_{i=1}^N L\left(y_i, \sum_{t=1}^T \alpha_t b(x_i; \gamma_t)\right) αt​,γt​min​i=1∑N​L(yi​,t=1∑T​αt​b(xi​;γt​))

即在所有基模型的权重 α t \alpha_t αt​ 和参数 γ t \gamma_t γt​ 上最小化损失函数。

由于这个优化问题非常复杂,难以一次性求解所有参数,所以可以采用前向分步算法来进行逐步优化。

3. 前向分步算法的思想

前向分步算法的核心思想是:逐步优化。每一步仅优化一个基模型的参数和权重,将其加入到模型中,逐渐逼近目标值。

每一步的优化目标可以用公式 (10-11) 表示为:
min ⁡ α t , γ t ∑ i = 1 N L ( y i , f t − 1 ( x i ) + α t b ( x i ; γ t ) ) \min_{\alpha_t, \gamma_t} \sum_{i=1}^N L(y_i, f_{t-1}(x_i) + \alpha_t b(x_i; \gamma_t)) αt​,γt​min​i=1∑N​L(yi​,ft−1​(xi​)+αt​b(xi​;γt​))

其中:

  • f t − 1 ( x ) f_{t-1}(x) ft−1​(x) 表示前 t − 1 t-1 t−1 步构建的模型。
  • α t \alpha_t αt​ 和 γ t \gamma_t γt​ 是第 t t t 个基模型的参数,需要通过最小化损失函数来确定。

4. 前向分步算法在AdaBoost中的应用

在AdaBoost中,前向分步算法的思想体现在逐步增加弱分类器,并为每个弱分类器分配权重,以最小化整个模型的损失函数。

具体步骤如下:

(1) 初始化模型

首先,将模型初始化为常数值 f 0 ( x ) = 0 f_0(x) = 0 f0​(x)=0,即模型初始时没有任何分类能力。

(2) 迭代构建模型

对于每一轮 t = 1 , 2 , … , T t = 1, 2, \dots, T t=1,2,…,T:

  • 选择基模型:选择一个基模型 b ( x ; γ t ) b(x; \gamma_t) b(x;γt​) 和对应的参数 γ t \gamma_t γt​ 以及权重 α t \alpha_t αt​,使得当前损失函数最小化。这一步可以通过公式 (10-12) 来表示:
    ( α t , γ t ) = arg ⁡ min ⁡ α , γ ∑ i = 1 N L ( y i , f t − 1 ( x i ) + α b ( x i ; γ ) ) (\alpha_t, \gamma_t) = \arg \min_{\alpha, \gamma} \sum_{i=1}^N L(y_i, f_{t-1}(x_i) + \alpha b(x_i; \gamma)) (αt​,γt​)=argα,γmin​i=1∑N​L(yi​,ft−1​(xi​)+αb(xi​;γ))
  • 更新模型:将新的基模型加入到当前模型中,更新后的模型为:
    f t ( x ) = f t − 1 ( x ) + α t b ( x ; γ t ) f_t(x) = f_{t-1}(x) + \alpha_t b(x; \gamma_t) ft​(x)=ft−1​(x)+αt​b(x;γt​)
(3) 最终加性模型

经过 T T T 轮迭代后,最终的加性模型表示为:
f ( x ) = ∑ t = 1 T α t b ( x ; γ t ) f(x) = \sum_{t=1}^T \alpha_t b(x; \gamma_t) f(x)=t=1∑T​αt​b(x;γt​)

5. 将前向分步算法应用于AdaBoost

对于AdaBoost而言,基模型是二分类器 G t ( x ) G_t(x) Gt​(x),加性模型构建过程如下:

  • 假设在第 t − 1 t-1 t−1 步,我们已经获得了一个模型 f t − 1 ( x ) f_{t-1}(x) ft−1​(x)。
  • 第 t t t 步添加新的弱分类器 G t ( x ) G_t(x) Gt​(x) 时,我们会选择一个权重系数 α t \alpha_t αt​,使得损失函数最小化。

即公式 (10-16) 表示了这一过程:
( α t , G t ( x ) ) = arg ⁡ min ⁡ α , G ∑ i = 1 N exp ⁡ ( − y i ( f t − 1 ( x i ) + α G ( x i ) ) ) (\alpha_t, G_t(x)) = \arg \min_{\alpha, G} \sum_{i=1}^N \exp(-y_i (f_{t-1}(x_i) + \alpha G(x_i))) (αt​,Gt​(x))=argα,Gmin​i=1∑N​exp(−yi​(ft−1​(xi​)+αG(xi​)))

通过这个优化,我们可以得到每一轮中需要添加的弱分类器 G t ( x ) G_t(x) Gt​(x) 及其权重 α t \alpha_t αt​,从而逐步逼近最优解。

6. 总结

综上所述,AdaBoost可以看作是前向分步算法的具体应用。在每一轮中,AdaBoost通过选择一个新的弱分类器及其权重,逐步逼近整体目标函数的最小化。

标签:加性,min,模型,算法,AdaBoost,alpha,gamma,分步
From: https://blog.csdn.net/u013172930/article/details/143391551

相关文章

  • LUOGU_进阶算法思想
    进阶算法思想单调数据结构单调队列,单调栈都是均摊\(O(1)\),是不支持撤销的,只能按照正常过程加入。单调栈求最近的大于小于其的值CF280BMaximumXorSecondary:枚举最大值,次大值并不容易确定,但枚举次大值的位置,这样最大值就是其左右两边第一个比其大的值,用单调栈可求出。其实就......
  • PME算法简单Python实现
    技术背景在前面的两篇博客中,我们分别介绍了Ewald算法求解静电势能和基于格点拉格朗日插值法的PME算法。在多种计算优化算法(Ewald求和、快速傅里叶变换、格点拉格朗日插值、截断近似)的加持下,使得我们不需要在实空间进行大量的迭代,也可以得到一个近似收敛的静电势能结果。相关的PME......
  • 无监督异常检测算法
    1、概述无监督异常检测方法有重建类、特征类、流模型和教师学生网络这几种,之前了解过重建模型,重建模型大多采用VAE+Diffusion+Transformer类模型,对缺陷特征进行创建,本次总结主要分析特征类的鼻祖模型PatchCore,并找到其论文和源码,了解其工作原理的一些细节。图1描述了Pat......
  • 写分布式机器学习算法,哪种编程接口比较好
    写分布式机器学习算法,比较好的编程接口:1、Python;2、ApacheSpark;3、ApacheFlink;4、ApacheHadoop;5、TensorFlow。其中,Python是一种通用编程语言,广泛用于数据科学和机器学习领域。1、PythonPython是一种通用编程语言,广泛用于数据科学和机器学习领域。它具有简单易学、可读性......
  • 2024_10_30_2_hyperNeat进化神经网络算法
    原文地址:HyperNEATExplained:AdvancingNeuroevolutionExpandingNeuroEvolutionLastweek,IwroteanarticleaboutNEAT(NeuroEvolutionofAugmentingTopologies)andwediscussedalotofthecoolthingsthatsurroundedthealgorithm.Wealsobrieflytouc......
  • yolov8+多算法多目标追踪+实例分割+目标检测+姿态估计(代码+教程)
    #多目标追踪+实例分割+目标检测YOLO(YouOnlyLookOnce)是一个流行的目标检测算法,它能够在图像中准确地定位和识别多个物体。在这里插入图片描述本项目是基于YOLO算法的目标跟踪系统,它将YOLO的目标检测功能与目标跟踪技术相结合,实现了实时的多目标跟踪。在目标......
  • 代码随想录算法训练营day31| 56. 合并区间 738.单调递增的数字
    学习资料:https://programmercarl.com/0056.合并区间.html#算法公开课贪心PART5over学习记录:56.合并区间(也是找重叠区间,但是是跟result[-1]比,只用比右边界;更新result[-1][1]为更大值)点击查看代码classSolution(object):defmerge(self,intervals):"""......
  • 代码随想录算法训练营第十二天| 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大
    226.翻转二叉树题目链接:.-力扣(LeetCode)文章讲解:代码随想录视频讲解:听说一位巨佬面Google被拒了,因为没写出翻转二叉树|LeetCode:226.翻转二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com......
  • 代码随想录算法训练营第十三天| 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子
    110.平衡二叉树题目链接:.-力扣(LeetCode)文章链接:代码随想录视频链接:后序遍历求高度,高度判断是否平衡|LeetCode:110.平衡二叉树_哔哩哔哩_bilibili《代码随想录》算法公开课开讲啦!快来打卡!本期视频的文字讲解版在「代码随想录」刷题网站:programmercarl.com,这里刷题顺序,详......
  • 《算法导论》Ch.4_学习笔记
    <分治策略>分治策略三步骤:分解:将问题划分为一些子问题,子问题的形式与原问题一样,只是规模更小。解决:递归地求解出子问题,如果子问题地规模足够小,则停止递归,直接求解。合并:将子问题地解组合成原问题地解。递归情况:子问题足够大,需要递归求解。基本情况:子问题足够小,不再需要递归......