机器学习技法 Lecture8: Adaptive Boosting
Motivation of Boosting
举了个分辨图片是否是苹果的例子,来描述boosting的思想。主要是使用很多个小的判别器连续判断,每次将分对的样例降低比重,而将分错的样例增大比重。这样最后将这些小的判别器组合起来,最终能够得到一个效果比较好的复杂模型。
Diversity by Re-weighting
可以回顾一下上节课讲的boostrap的方法。假如使用了bootstrap对数据进行采样生成了新的数据集
D
^
\widehat{D}
D
,在计算新的数据集上的
E
i
n
E_{in}
Ein时可以当做是将原数据集上的样本进行加权求和得到的结果。
对于每个基分类器g而言,它的目标就是最小化这个加权后的
E
i
n
E_{in}
Ein:
加权的这种方式在之前的分类算法里已经用到过很多,比如SVM算法里只需要在每个惩罚项前面加系数,在逻辑回归里只需要在求和时对每个err加对应的系数即可。这种方式是对于不同分类重要性加权的一种拓展。
在讲bagging方法的时候我们提到,基分类器的diversity越大,最终得到的算法可能就会越好。而增大基分类器diversity的一个方式就是生成更多样化的数据集。因此对应加权的形式就相当于每个基分类器对应的每个样本的系数要尽可能多样化。
所以有一种想法来最大程度得增加多样性,那就是让下一次对应的系数
u
(
t
+
1
)
u^{(t+1)}
u(t+1)对于前一个基分类器
g
t
g_{t}
gt来说效果与瞎猜一样。数学表示如下:
简单的说,就是让
u
(
t
+
1
)
u^{(t+1)}
u(t+1)里前一个分类器
g
t
g_{t}
gt分对的样本系数与分错的样本系数相等。
因此有个简单的做法就是互相乘以对方的系数和:
Adaptive Boosting Algorithm
加入将犯错的样本系数和写为
ϵ
t
\epsilon_{t}
ϵt,那么下一次的样本系数分别正比于
ϵ
t
\epsilon_{t}
ϵt和
1
−
ϵ
t
1-\epsilon_{t}
1−ϵt。
与直接乘以对应的系数相比,我们使用一个更直观的方式,定义一个scaling factor,分别乘以和除以这个系数来放缩样本系数:
这个放缩系数能够有明确的物理意义,那就是放大错误样本的系数,缩小正确样本的系数。而我们这么放缩的目的最终还是增加基分类器的多样性。于是我们就有了一个基本的算法流程:
其中初始化的系数一般使用平均分配的方式。而最终将基分类器组合起来的方式也可以自由选择,可以使用任意线性或者非线性的组合。
假如使用线性的组合方式,那么有一种在计算过程中直接得到最终组合系数的算法。我们的scaling factor表示的是基分类器
g
t
g_{t}
gt的正确程度,因此可以把最终的组合系数
α
t
\alpha_{t}
αt正比于这个scaling factor。不过我们选择了取ln的形式,这样不仅是正比,而且还有一定的物理意义:
于是就得到了adaboost算法,这个算法如下:
它有几个部分组成:基分类器、最大化diversity的scaling factor和最终的线性组合的系数
α
t
\alpha_{t}
αt。而且这个算法的VC bound上限是有理论保障的:
大致的说,只要基分类器的正确率大于1/2,那么
E
i
n
E_{in}
Ein就可以很小到0。而且
E
i
n
E_{in}
Ein收敛到0的速度T是样本数量N的对数级别。因此后一项在N比较大的时候也会很小,最终就会保证
E
o
u
t
E_{out}
Eout很小。
Adaptive Boosting in Action
有个实际的例子来说明adaboost算法。那就是decision stump算法。它每次只能在一个维度上做一个简单的划线切分,这样一个单独的分类器可能就不会得到很好的结果:
它有很好的性质,比如物理意义明确,而且算法耗时不多。
但是令人惊讶的是即使是一个复杂的样本集合,使用简单的decision stump的集合也能够得到很好的结果。而实际中adaboost算法的思想也应用在很多其它的领域如人脸识别等等: