一、概念
由训练数据构建一组基分类器(base classifier),将每个基分类器的预测结果进行组合(ensemble)得到最终结果。
为什么组合分类器的效果好于基分类器?
设基分类器的误差为 ϵ \epsilon ϵ,对 N N N个组合分类器来说,只有超过一半以上基分类器都预测错误时,最终预测结果才错误。当基分类器互相独立时,组合分类器的错误率为
∑ i = N 2 N C N i ϵ i ( 1 − ϵ ) N − i \sum_{i=\frac{N}{2}}^NC_N^i\epsilon^i(1-\epsilon)^{N-i} ∑i=2NNCNiϵi(1−ϵ)N−i
当 ϵ < 0.5 \epsilon<0.5 ϵ<0.5时, e n s e m b l e ensemble ensemble的错误率更小。
因此当基分类器之间相关性不强;且基分类器分类误差小于0.5时,组合分类器的分类效果好于基分类器。
二、构建方法
如何在原始数据上构建多个分类器?
1. 对训练样本进行再抽样
对原始训练样本再抽样得到多个训练集,在每个训练集上训练一个分类器。
抽样方法:
- bagging(bootstrap aggregating)
基分类器是并行产生训练的。
从数据集中随机有放回抽样N次,得到大小为N的训练集。每次抽样每个样本被抽到的概率为 1 − ( 1 − 1 N ) N 1-(1-\frac{1}{N})^N 1−(1−N1)N 趋近于 1 − 1 / e = 0.632 1-1/e = 0.632 1−1/e=0.632,故每次抽样得到的训练集大小为63.2%,验证集大小为36.8%。
重复抽样k次,最终通过基分类器结果的多数表决得到最终结果。
- boosting
基分类器是迭代产生训练的。
不同于bagging的随机抽样,boosting每一轮训练结束后会调整样本的权值,增加分类错误样本的权值,减少分类正确样本的权值,根据权值进行下一轮抽样和模型学习。
三、模型实例
1. Adaboost
对第 j j j个分类器:
- j = 0 j=0 j=0时样本初始权值为 1 / N 1/N 1/N
- 计算基分类器的加权分类错误率 ϵ = ∑ i = 1 N ω i I ( y ^ i ≠ y i ) \epsilon = \sum_{i=1}^N\omega_iI(\hat y_i≠y_i) ϵ=∑i=1NωiI(y^i=yi)
- 若 ϵ > 0.5 \epsilon>0.5 ϵ>0.5则恢复所有样本权值为 1 / N 1/N 1/N,重新抽样。
- 确定基分类器的重要性: α = 1 2 l n ( 1 − ϵ ϵ ) \alpha = \frac{1}{2}ln(\frac{1-\epsilon}{\epsilon}) α=21ln(ϵ1−ϵ)。 ϵ < 0.5 \epsilon<0.5 ϵ<0.5 时 α > 0 \alpha>0 α>0; ϵ > 0.5 \epsilon>0.5 ϵ>0.5 时 α < 0 \alpha<0 α<0
- 更新样本权值:分类正确的样本 ω ′ = ω Z × e − α \omega' = \frac{\omega}{Z}×e^{-\alpha} ω′=Zω×e−α;分类错误的样本 ω ′ = ω Z × e α \omega' = \frac{\omega}{Z}×e^{\alpha} ω′=Zω×eα
- 最终预测结果为 s i g n ( ∑ j = 1 K α j y ^ j ) sign(\sum_{j=1}^K\alpha_j\hat y_j) sign(∑j=1Kαjy^j)
优点:训练误差呈指数递减
e e n s e m b l e ≤ ∏ [ ϵ i ( 1 − ϵ i ) ] ≤ ∏ [ 1 − 4 γ i 2 ] ≤ e x p ( − 2 ∑ γ i 2 ) e_{ensemble} ≤ \prod[\sqrt {\epsilon_i(1-\epsilon_i)}] ≤ \prod[\sqrt{1-4\gamma_i^2}]≤exp(-2\sum \gamma_i^2) eensemble≤∏[ϵi(1−ϵi)]