将弱学习器组合成强分类器

如何将几个弱学习器组合成一个强分类器?我知道公式,但问题是,我读过的关于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))。

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

编辑2

这是strongclassifier(x)内部发生的事情:分离超平面基本上是在weak(x)函数中决定的,所以所有weak(x)=1的x在超平面的一侧,而weak(x)=-1的x在超平面的另一侧。如果你把它想象成平面上的线,你有一个平面将平面分成两部分(总是如此),一侧是(-),另一侧是(+)。如果你现在有3条无限长的线,形状像一个三角形,它们的负面朝外,你会在三角形内得到3个(+),在外面得到1或2个(-),这在强分类器中会导致一个正的三角形区域,其余部分为负。这是一个过度简化,但要点仍然存在,并且在更高维度中完全类似地工作。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注