我查看了这些问题here和here。但是我仍然无法找到令人满意的结果来理解算法。我理解它的作用,以及它如何做到这一点的一般想法,但我仍然觉得在项目中使用它不够舒服。我想了解该算法如何对应于它的更通俗的描述。我尝试阅读几个在线资源,但大多数人都在不重复Schapire和Freund的例子而没有真正解释发生了什么。这是Schapire的Explaining AdaBoost中给出的算法,p。 2
到目前为止,我从中了解到这一点:
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在接受问题之前坚持我的问题包含代码
答案 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_t
上x_i
是正确的,那么h_{t+1}
就不应该关心它;它应该关注h_t
错误的情况,并尝试弥补它!- >结合弱学习者
最终学习者只是弱学习者的加权平均值(由alpha_t加权)。那就是那个。如果这是有道理的,请告诉我。
//(天哪,我希望有乳胶......)