【发布时间】: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 面孔,因为它们更多。
换句话说,我希望添加到强分类器中的每个弱分类器的权重都会依次降低。
我是遗漏了一步还是这只是过于简单的数据的奇怪行为?
【问题讨论】:
标签: algorithm classification adaboost