【问题标题】:Adaboost Algorithm Walkthrough for non-technical非技术人员的 Adaboost 算法演练
【发布时间】:2017-07-25 02:01:27
【问题描述】:

我查看了这些问题herehere。但是我仍然找不到令人满意的结果来理解算法。我了解它的作用,以及它如何做的总体思路,但我仍然觉得在项目中使用它还不够舒服。我想了解该算法如何对应于它的更通俗的描述。我尝试阅读几个在线资源,但其中大多数都在重复 Schapire 和 Freund 的例子,而没有真正解释发生了什么。这是 Schapire 的解释 AdaBoost 中给出的算法,p。 2

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

这个 x+number 是 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”,或者有时用作日期中 circa 的等价物,但我认为这里不是这种情况,它是否对应于给定 Dt 的概率之类的东西?
开头的“et”最初是我认为的熵,但我读到here 它实际上是错误的。表示矩阵的“[”? ht(xi) != yi 表示 ht 对输入 xi 产生错误的输出,因为通常训练集定义为 x1,y1,xm,ym 等。
对于算法的其余部分,我不知道。如果有人可以用非技术术语解释其余部分,那就太好了。通过非技术性,我的意思是尝试描述算法在每个步骤中相对于上一步所做的事情。如果您还可以解释为什么使用“ln”和“sign”之类的函数来描述正在发生的事情,那就太好了。如果您可以用更具体的东西替换变量,那也很棒。

PS:我在代码格式中添加了符号,因为 SO 在接受问题之前坚持我的问​​题包含代码

【问题讨论】:

    标签: algorithm machine-learning language-agnostic adaboost


    【解决方案1】:

    这个 x+number 是 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 是做什么的:它通过迭代构建弱学习器来将弱学习器组合成一个强学习器,这种方式(比如)kth 弱学习器可以补偿之前的学习器。概率分布是对每个弱学习器的数据实例进行加权,以便当前弱学习器集较差的x 的实例被较新的弱学习器更强地考虑。

    获取弱假设 ht: X -> {-1,+1} 意味着如果它从 X 组输入中获取一个元素,那么它将给出 {-1,+1} 作为输出。 目标:选择具有低加权误差的 ht: 我真的不明白这里发生了什么。符号“~”通常对应于逻辑运算符中的“not”,或者有时用作日期中 circa 的等价物,但我认为这里不是这种情况,它是否对应于给定 Dt 的概率之类的东西?

    没有。确实,~ 在“编程语言”中“不是”,但在数学中并非如此(例如,它通常是等价关系)。特别是在概率中,它的意思是“分布为”。

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

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

    -> 计算错误

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

    这实际上是它的样子:tth 弱学习器在数据点 x_i 上出错的概率。我想这很令人困惑,因为它是一个加权概率,所以D_t 高的点更有可能被选中,因此对这里的概率度量贡献更大。因此,本质上,我们只是通过查看其在整个数据集中的误差来估计 h_t 的性能(但考虑一些比其他更重要的示例,特别是那些我们做得不好的示例)。

    -> 估计权重因子

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

    正如反复提到的,我们正在努力让新的弱学习器在我们之前的其他弱学习器(较低的t)未能解决的数据示例上做得更好。 这个alpha_t 是权重因子的一部分。注意:如果误差为 1(即它实际上是最坏的可能),那么权重非常小;这意味着“少注意愚蠢的学习者”。

    最终,当我们将所有弱学习者组合在一起时,我们将不得不对它们进行加权,因为有些人会比其他人做得更好,因此应该更强烈地倾听。这就是alpha_t 的措施

    ln 的确切形式的原因是数学;证明最优权重(给定一些合理的假设,例如指数损失)确实是给定的形式是相当容易的(see here)。但这对你来说并不那么重要,现在。

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

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

    同样,我们希望更大的“硬”​​示例权重。所以,看看这个表达式的形式。我们正在更新x_i 的概率质量。这取决于

    • D_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_tx_i 上是正确的,那么h_{t+1} 不应该太在意它;应该关注h_t出错的情况,并努力弥补!

    -> 结合弱学习器

    最终的学习器只是弱学习器的加权平均值(由 alpha_t 加权)。就是这样。让我知道这是否有意义。

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

    【讨论】:

    • 非常感谢您的帮助。很抱歉我的延迟回复我花了一些时间来消化演练。现在我已经大致了解它是如何工作的。只需两件事:为什么需要 Z_t 使 D_t+1 成为一个分布?您提供的链接中显示的 a_t, ∀ i , h i ∈ [ − 1 , 1 ] 的 1/2 之间是否存在任何关系?
    • @KaanE。 (1) 它需要是一个分布,主要是为了数学上的方便(特别是为了理论使用)。 (2) 对不起,我不太明白你的意思(也许发布一个新问题?);如果你指的是alpha_t前面的1/2,那么在最小化错误时自然会发生(尝试解决链接中的dE/d alpha_m = 0方程,它会自动显示)。
    猜你喜欢
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2010-09-08
    • 1970-01-01
    • 2014-07-03
    • 2021-07-26
    • 1970-01-01
    相关资源
    最近更新 更多