这种 AdaBoost 行为是不是正确?

Posted

技术标签:

【中文标题】这种 AdaBoost 行为是不是正确?【英文标题】:Is this AdaBoost behavior correct?这种 AdaBoost 行为是否正确? 【发布时间】:2014-08-07 05:28:31 【问题描述】:

我正在按照Viola-Jones 论文中的描述实施 AdaBoost,以供我自己启迪。在对算法进行单元测试的过程中,我发现了一些奇怪的行为。这可能只是算法对预设数据的奇怪行为,或者我可能遗漏了一些东西。我想知道是哪种情况。

首先我有:

2 instances of A type faces
1 instance  of a B type face
3 instances of noise
--------------------
6 total instances

所以每张图片的初始权重都是1/6

分类器选择的第一个特征识别 A 类人脸,但不是 B 类人脸,也不是任何噪声。因此,它有一个错误(以及增强分类器中的相关权重)1/6

接下来更新权重(首先将正确分类的图像乘以(error / 1 - error)) == 0.2 产生:

A type face weight: 1/30
B type face weight: 1/6
noise image weight: 1/6

然后将权重归一化(总和为 1):

A type face weight: 1/22
B type face weight: 5/22
noise image weight: 5/22

第二个特征正确选择了 B 类图像,但没有正确选择噪声或 A 类图像。因此,它的错误为 1/11 (2/22),明显小于 1/6

由于 Viola-Jones 提出的“默认”阈值(这是在本文后面部分讨论级联和调整阈值之前)是权重的一半,并且只有两个权重,第二个特征的权重更大(因为它具有更低的误差),那么生成的增强分类器只能正确分类 B 型人脸。

直观地说,我希望一个强分类器由一个检测 A 面孔的弱分类器和一个检测 B 面孔以检测 A 和 B 面孔的弱分类器组成。

我什至愿意接受我只会得到两者中的一个,因为 AdaBoost 是一种多数投票算法,并且只有 2 个选民可能会表现得很奇怪,但我希望它只会正确分类一个的面孔,然后它会正确分类 A 面孔,因为它们更多。

换句话说,我希望添加到强分类器中的每个弱分类器的权重都会依次降低。

我是遗漏了一步还是这只是过于简单的数据的奇怪行为?

【问题讨论】:

【参考方案1】:

计算有误。使用第一个特征时,误差为 1/6,因为只有 B 面被错误分类。在这种情况下,噪声和 A 面被正确分类。因此,当您根据 w(i) = w(i) * beta^(1-e(i)) 更新权重时,仅对于 B 面 e(i) 等于 1。对于 A 面和噪声 e(i ) = 0。因此,噪声和 A 面的权重都会更新:

A type face weight: 1/30
B type face weight: 1/6
noise image weight: 1/30

标准化后:

A type face weight: 1/10
B type face weight: 1/2
noise image weight: 1/10

现在,当您使用第二个功能时,误差为 1/5。

【讨论】:

你是绝对正确的。我只是减少正确分类的人脸的权重,而不是正确分类的非人脸的权重。现在效果好多了。我会尽可能奖励赏金(必须等待 24 小时)。

以上是关于这种 AdaBoost 行为是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 的 Adaboost predict_proba 如何在内部工作?

机器学习——集成学习之Boosting

5. 集成学习(Ensemble Learning)GBDT

提升算法——Adaboost

集成学习:AdaBoost与LogitBoost

机器学习实战笔记-利用AdaBoost元算法提高分类性能