gpt4 book ai didi

algorithm - 非技术的Adaboost算法演练

转载 作者:行者123 更新时间:2023-11-30 09:52:26 28 4
gpt4 key购买 nike

我查看了这些问题herehere。但是我仍然无法找到令人满意的结果来理解该算法。我了解它的作用,以及有关其作用的一般想法,但我仍然不太适应在项目中使用它。我想了解该算法如何对应于其口语化的描述。我尝试阅读一些在线资源,但是其中大多数在没有真正解释正在发生的情况的情况下继续复制Schapire和Freund的示例。这是Schapire的Explaining AdaBoost,p中给出的算法。 2 Adaboost Algorithm

到目前为止,这是我的理解:
x1,y2,对应于训练集。
给定x1时,我们观察到y1输出。

x +数字是X集的成员。
y + number是set {-1,+1}的成员,因此对于该算法的其余部分
训练集是(x+number,-1),(x+number,+1), xm, -1 or +1)等。
初始化分发,不确定此处的分发意义,但让我们继续。
D1(i) = 1/m for i = 1, ..., m
我不确定D1的1和1 / m的1之间是否存在任何关系,但是据我所知,i对应于训练集中元素的位置。
我假设t表示时间或实例之类的意思,因此我们得到t1实例和t2实例等。
通过说使用分布Dt训练弱学习者,我假设我们想做类似Dt(i) = t/m的事情?
得到弱假设ht: X -> {-1,+1}意味着ht是这样的,因此,如果它从X组输入中获取一个元素,则它将给出{-1,+1}作为输出。
目的:选择低加权误差的ht:
我真的不明白这是怎么回事。符号“〜”通常在逻辑运算符中对应于“ not”,或者有时用作日期中的大约日期,但是我认为这里不是这种情况,它对应于i给出Dt的概率之类的东西吗?
一开始我以为是“ et”,但是我读了here那实际上是错误的。 “ [”表示矩阵? ht(xi)!= yi表示ht为输入xi产生错误的输出,因为通常将训练集定义为x1,y1,xm,ym等。
对于算法的其余部分,我一无所知。如果有人可以用非技术性的术语解释其余内容,那将是很好的。非技术性的,我的意思是试图描述算法相对于上一步在每一步中的作用。如果您还可以解释为什么使用“ ln”和“ sign”之类的功能来描述正在发生的事情,那就太好了。如果您可以用更具体的内容代替变量,那也很好。

PS:我以代码格式添加了表示法,因为SO在接受问题之前坚持要求我的问题包含代码

最佳答案

x +数字是X集的成员。
  y + number是集合{-1,+ 1}的成员,因此对于算法的其余部分,训练集合为(x + number,-1),(x + number,+ 1),xm,-1或+1)等
  初始化分发,不确定此处的分发意义,但让我们继续。


似乎正确。
分布的意义是离散的概率质量函数。


  对于i = 1,...,m,D1(i)= 1 / m。
  我不确定D1的1和1 / m的1之间是否存在任何关系,但是据我所知,i对应于训练集中元素的位置。


没关系是的,这就是i的意思。


  我假设t表示时间或实例之类的意思,因此我们得到t1实例和t2实例等。


是的,它是“时间”或更准确地说是迭代次数,即将使用的弱学习者的数量。


  通过说使用分布Dt训练弱学习者,我假设我们想做类似Dt(i)= t / m的事情?


不,绝对不是。考虑一下Adaboost的作用:通过反复构造弱学习者,使弱学习者组合成一个强大的学习者,这种方式(第cc个弱学习者)可以补偿以前的学习者。概率分布是为每个弱学习者加权数据实例,以便较新的弱学习者更强烈地考虑当前弱学习者集合为k的实例。


  得到弱假设ht:X-> {-1,+ 1}意味着ht是这样的,因此,如果它从X个输入集中获取一个元素,则它将给出{-1,+ 1}作为输出。
  目的:选择低加权误差的ht:
  我真的不明白这是怎么回事。符号“〜”通常在逻辑运算符中对应于“ not”,或者有时用作日期中的大约日期,但是我认为这里不是这种情况,它对应于i给出Dt的概率之类的东西吗?


确实,x在“ *编程语言”中不是“但”,但在数学中却不是(通常是等价关系),特别是概率上,它的意思是“分布为”。


  一开始的“ et”是我最初的思想,但是我在这里读到它实际上是错误的。 “ [”表示矩阵? ht(xi)!= yi表示ht为输入xi产生错误的输出,因为通常将训练集定义为x1,y1,xm,ym等。
  对于算法的其余部分,我一无所知。如果有人可以用非技术性的术语解释其余内容,那将是很好的。非技术性的,我的意思是试图描述算法相对于上一步在每一步中的作用。如果您还可以解释为什么使用“ ln”和“ sign”之类的功能来描述正在发生的事情,那就太好了。如果您可以用更具体的内容代替变量,那也很好。


这里有很多误解。我将尝试描述其余步骤(但我建议您最终只阅读原始论文)。

->计算错误

\epsilon_t = Pr_{i~D_t}[ h_t(x_i) != y_i ]


从字面上看这是什么样子:第 ~个弱学习者在数据点 t上出现错误的概率。我猜这很混乱,因为它是加权概率,因此 x_i高的点更有可能被选择,因此在这里对概率度量的贡献更大。因此,从本质上讲,我们只是通过查看 D_t在整个数据集中的错误来估计其性能(但要考虑某些示例比其他示例更重要,尤其是那些我们做得不好的示例)。

->估计加权因子

alpha_t = ln[ (1 - \epsilon_t) / \epsilon_t ] / 2


正如反复提到的那样,我们正在尝试使新的弱学习者在我们之前其他弱学习者(较低的 h_t)失败的数据示例上做得更好。
t是加权因子的一部分。请注意:如果错误为1(即从字面上看可能是最严重的错误),则重量非常小;这意味着“对愚蠢的学习者要少关注”。

最终,当我们将所有弱学习者结合在一起时,我们将不得不对他们进行加权,因为有些学习者的表现会好于其他学习者,因此应该更认真地听取他们的意见。这就是 alpha_t的措施

alpha_t确切形式的原因是数学上的;很容易( see here)证明最佳权重(经过一些合理的假设,例如指数损失)确实处于给定的形式。但这对您而言并不重要。

->更新概率分布(即数据点加权函数):

D_{t+1}(i) = [D_t(i) exp(-alpha_t y_i h_t(x_i))] / Z_t


同样,我们希望将“硬”示例的权重更大。因此,请看一下此表达式的形式。我们正在更新 ln的概率质量。这取决于


x_iD_t(i)的先前概率值(如果以前很重要,现在也应该如此)
x_i:弱学习者的权重函数(较高的权重学习者表示此 alpha_y的概率质量变化将更强)
x_i:请注意,如果学习者错误,则为 y_i h_t(x_i),否则为 y_i h_t(x_i)=-1。在前一种情况下, y_i h_t(x_i)=1将为正(因此 -alpha_t y_i h_t(x_i)将很大);在后者中,为负(因此 exp(-alpha_t y_i h_t(x_i))将很小)。因此,所有这些意味着我们将在错误时增加实例的概率,而在正确的实例上降低实例的概率。这是有道理的:如果 exp(-alpha_t y_i h_t(x_i))h_t上正确,则 x_i不必太在意;它应该重点放在 h_{t+1}错误的情况下,并设法弥补它!


->结合弱者

最终学习者只是弱学习者的加权平均值(由alpha_t加权)。就是这样。让我知道是否合理。

//(天哪,我希望有乳胶...)

关于algorithm - 非技术的Adaboost算法演练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604643/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com