将弱学习者与强分类器结合起来

时间:2012-08-27 23:11:29

标签: machine-learning artificial-intelligence decision-tree classification adaboost

如何将少数弱学习者组合成一个强大的分类器?我知道这个公式,但问题是,在我读过的每篇关于AdaBoost的论文中,只有没有任何例子的公式。我的意思是 - 我的学习者和他们的体重都很弱,所以我可以做公式告诉我做的事情(将学习者的体重乘以另一个加上一个乘以它的重量和另一个等等)但是我该怎么做呢?我的弱学习者是决策树桩。他们得到了属性和阈值,那么我会乘以什么呢?

2 个答案:

答案 0 :(得分:6)

如果我正确地理解了你的问题,那么你可以很好地解释如何将弱分类器连接成一个强大的分类器,并在这些讲义中包含大量图像:

www.csc.kth.se/utbildning/kth/kurser/DD2427/bik12/DownloadMaterial/Lectures/Lecture8.pdf

基本上你是通过采用分离超平面的加权组合创建一个更复杂的决策表面(在演讲笔记中显示了这个很好的情节)

希望这有帮助。

修改

实际上这样做:

在第42页的

中,您可以看到alpha_t = 1/2*ln((1-e_t)/e_t)的公式,这些公式很容易在for循环中计算,或者如果您正在使用某些数字库(我使用numpy,这真的很棒)直接通过向量操作。 alpha_t是在adaboost内部计算的,所以我假设你已经有了这些。

你有第38页的数学公式,大sigma代表所有的总和。 h_t是弱分类器函数,它返回-1(no)或1(yes)。 alpha_t基本上是弱分类器有多好,因此在强分类器的最终决策中有多少(不是很民主)。

我从来没有真正使用forloops,但我会更容易理解并且更加独立于语言(这是pythonish伪代码):

strongclassifier(x):
    response=0
    for t in T: #over all weakclassifiers indices
        response += alpha[t]*h[t](x)
    return sign(response)

这在数学上称为权重和弱响应之间的点积(基本上:强(x)= alpha *弱(x))。

  

http://en.wikipedia.org/wiki/Dot_product

<强> EDIT2

这是strongclassifier(x)中发生的事情: 分离超平面基本上是在函数weak(x)中决定的,因此具有弱(x)= 1的所有x都位于超平面的一侧,而弱(x)= - 1位于超平面的另一侧。如果你认为它在平面上有线条,你有一个平面将平面分成两部分(总是),一边是( - ),另一边是(+)。如果你现在有三条三角形的无限线,它们的负面向外,你会得到三角形内的3(+)和外面的1或2( - ),(在强分类器中)进入一个积极的三角形区域,其余为负的。这是一个过度简化,但重点仍然存在,它在更高的维度上完全类似。

答案 1 :(得分:1)

在香草Ada Boost中,你不会增加任何体重的学习者。相反,您增加了错误分类数据的权重。想象一下,你有一个数组,如[1..1000],你想用神经网络来估计哪些数字是素数。 (愚蠢的例子,但足以进行演示)。

想象一下,你有神经网络课程。您实例化第一个,n1 = NeuralNet.new。然后你有训练集,也就是另一个从1到1000的素数数组。(你需要为一个数字组成一些特征集,比如它的数字。)。然后训练n1识别训练集上的素数。让我们假设n1很弱,所以在训练期结束后,它将无法正确地将所有数字1..1000分类为素数和非素数。让我们假设n1错误地说27是素数而113是非素数,并且犯了其他一些错误。你是做什么?你实例化另一个神经网络,n2,并增加27,113和其他错误数字的权重,比如从1增加到1.5,并将正确分类的数字的权重从1减少到0.667。然后你训练n2。训练结束后,你会发现n2纠正了n1的大多数错误,包括没有。 27,但没有。 113仍然被错误分类。因此,您实例化n3,将权重增加到113,将权重减少27和其他现在正确分类的数字减少到1,并将旧的正确分类数字的权重减少到0.5。等等...

我是否足够具体?