Adaboost算法演练非技术性

时间:2017-03-05 04:49:31

标签: algorithm machine-learning language-agnostic adaboost

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

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

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

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

1 个答案:

答案 0 :(得分:1)

  

此x +编号是X set的成员。   并且y + number是集合{-1,+ 1}的成员,因此对于算法的其余部分,训练集是(x +数字,-1),(x +数字,+ 1),xm,-1或+1)等   初始化分发,不确定这里的分布感,但让我们继续。

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

  

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

没有这样的关系。是的,这就是i的含义。

  

我假设t表示类似于时间或实例的东西,所以我们t1实例和t2实例等。

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

  

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

绝对不是。想想Adaboost所做的事情:它通过迭代地构建弱学习者,将弱学习者组合成一个强大的学习者,使得(例如)k弱学习者补偿之前的学习者。概率分布是对每个弱学习者的数据实例进行加权,因此当前弱学习者集合较差的x个实例被认为更强较新的弱学习者。

  

得到弱假设ht:X - > {-1,+ 1}意味着ht是这样的,如果它从X组输入中获取一个元素,那么它将给出{-1,+ 1}作为输出。   目标:选择低加权误差的ht:   我真的不知道这里发生了什么。标志"〜"通常对应于"而不是"在逻辑运算符中或有时用作约会的约会但我认为这不是这种情况,它是否与我给出Dt的概率相对应?

没有。确实~是"不是" in *编程语言"但在数学中却不是这样(它通常是例如等价关系)。特别是,在概率上,它意味着"分布为"。

  

" et"起初我最初认为是好斗的,但我在这里读到它实际上是错误的。 " ["用于指示矩阵? ht(xi)!= yi表示ht为输入xi产生错误的输出,因为通常训练集定义为x1,y1,xm,ym等。   对于算法的其余部分,我不知道。如果有人可以用非技术术语解释其余部分,那就太好了。非技术性,我的意思是试图描述算法相对于前一步骤在每个步骤中所做的事情。如果您也可以解释为什么函数像" ln"那将是很好的。并且"签署"用于描述正在发生的事情。如果你能用一些更具体的东西替换变量,也会很棒。

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

- >计算错误

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

这实际上是它的样子:t弱学习者在数据点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))会很小)。所以,所有这些意味着,当我们错误的和我们 right 的重量级实例时,我们将增加实例的概率。这是有道理的:如果h_tx_i是正确的,那么h_{t+1}就不应该关心它;它应该关注h_t错误的情况,并尝试弥补它!

- >结合弱学习者

最终学习者只是弱学习者的加权平均值(由alpha_t加权)。那就是那个。如果这是有道理的,请告诉我。

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