如何将几个弱学习器组合成一个强分类器?我知道公式,但问题是,我读过的关于AdaBoost的所有论文中都只有公式而没有示例。我的意思是 – 我有弱学习器及其权重,所以我可以按照公式的指示去做(将学习器乘以其权重,然后再加上另一个乘以其权重的学习器,依此类推),但具体如何操作呢?我的弱学习器是决策树桩。它们有属性和阈值,那么我应该乘以什么呢?
回答:
如果我正确理解了你的问题,这些讲义中有很多图片,详细解释了如何通过提升将弱分类器组合成强分类器:
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(否)或1(是)。alpha_t
基本上是弱分类器的表现如何,因此它在强分类器的最终决策中有多大发言权(不太民主)。
我从不真正使用for循环,但这样做会更容易理解且更独立于语言(这是Python风格的伪代码):
strongclassifier(x): response=0 for t in T: #遍历所有弱分类器索引 response += alpha[t]*h[t](x) return sign(response)
这在数学上被称为权重与弱响应之间的点积(基本上:strong(x) = alpha*weak(x))。
编辑2
这是strongclassifier(x)内部发生的事情:分离超平面基本上是在weak(x)函数中决定的,所以所有weak(x)=1的x在超平面的一侧,而weak(x)=-1的x在超平面的另一侧。如果你把它想象成平面上的线,你有一个平面将平面分成两部分(总是如此),一侧是(-),另一侧是(+)。如果你现在有3条无限长的线,形状像一个三角形,它们的负面朝外,你会在三角形内得到3个(+),在外面得到1或2个(-),这在强分类器中会导致一个正的三角形区域,其余部分为负。这是一个过度简化,但要点仍然存在,并且在更高维度中完全类似地工作。