前言
Boosting是一种常用的机器学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本的权重学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。常见的Boosting算法有AdaBoosting算法,本节就主要介绍AdaBoosting算法。
一、AdaBoost算法
1.Boosting的基本思路
Boosting基于这样一种思想:对于一个复杂任务来说,将多个专家的判断进行适当的综合所得出的判断要比其中任何一个专家单独的判断好。实际上,就是“三个臭皮匠顶个诸葛亮”的道理
下面先给出弱可学习算法和强可学习算法的概念。
- 弱可学习算法:对于一个概念(一个类),如果存在一个学习算法能够学习它,学习的正确率仅比随机猜测略好,那么称这个概念是弱可学习的。
- 强可学习算法:如果存在一个学习算法能够学习它,并且正确率很高,那么就称这个概念是强可学习的。
这样以来,在学习中,如果已经发现了“弱学习算法”,那么能否将它提升(boost)为“强学习算法”。关于Boosting的研究有很多,最具代表性的是AdaBoost算法。
2.AdaBoost算法的思路
对于分类问题,给定一个训练样本集,求弱分类器要比强分类器容易得多。Boosting从弱学习算法出发,反复学习,得到一系列弱分类器(又称为基本分类器),然后组合这些弱分类器,构成一个强分类器。大多数的Boosting算法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。
这样,对于Boosting来说,存在两个问题:
- 在每一轮如何改变训练数据的权值分布或概率分布?
- 如何将弱分类器组合成一个强分类器?
Adaboosting的做法如下:
- 针对问题1,它提高那些被前一轮若分类器错误分类样本的权值,而降低那些被正确分类样本的权值。
- 针对问题2,它采用加权多数表决的方法。具体地,加大分类误差率小的若分类器的权值,使其在表决中起较大的作用;减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。
二、AdaBoost算法的具体流程
1.算法的具体流程
输入:一个二类分类的训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
N
)
}
T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}
T={(x1,y1),(x2,y2),⋯,(xN,yN)},
y
i
=
{
−
1
,
+
1
}
y_i=\{-1,+1\}
yi={−1,+1};弱学习算法。
输出:最终分类器
G
(
x
)
G(x)
G(x)。
- 初始化训练数据的权值分布
D 1 = ( w 11 , ⋯ , w 1 i , ⋯ , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯ , N D_1=(w_{11},\cdots,w_{1i},\cdots,w_{1N}),w_{1i}=\frac{1}{N},i=1,2,\cdots,N D1=(w11,⋯,w1i,⋯,w1N),w1i=N1,i=1,2,⋯,N - 对
m
=
1
,
2
,
⋯
,
M
m=1,2,\cdots,M
m=1,2,⋯,M(
m
m
m为弱分类器的个数)
a. 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本分类器:
G m ( x ) : χ → { − 1 , + 1 } G_m(x):\chi \rightarrow\{-1,+1\} Gm(x):χ→{−1,+1}
b.计算 G m ( x ) G_m(x) Gm(x)在训练数据集上的分类误差率:
e m = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=\sum_{i=1}^{N}w_{mi}I(G_m(x_i)\ne y_i) em=i=1∑NwmiI(Gm(xi)=yi)
c.计算 G m ( x ) G_m(x) Gm(x)的系数:
α m = 1 2 ln 1 − e m e m \alpha_m=\frac{1}{2}\ln\frac{1-e_m}{e_m} αm=21lnem1−em
d.更新训练数据集的权值分布:
D m + 1 = ( w m + 1 , 1 , ⋯ , w m + 1 , i , ⋯ , w m + 1 , N ) D_{m+1}=(w_{m+1,1},\cdots,w_{m+1,i},\cdots,w_{m+1,N}) Dm+1=(wm+1,1,⋯,wm+1,i,⋯,wm+1,N)
w m + 1 , i = w m i Z m e − α m y i G m ( x i ) , i = 1 , 2 , ⋯ , N w_{m+1,i}=\frac{w_{mi}}{Z_m}e^{-\alpha_my_iG_m(x_i)},i=1,2,\cdots,N wm+1,i=Zmwmie−αmyiGm(xi),i=1,2,⋯,N
上式也可以写为:
w m + 1 , i = { w m i Z m e − α m G m ( x i ) = y i w m i Z m e α m G m ( x i ) ≠ y i w_{m+1,i} = \begin{cases} \frac{w_{mi}}{Z_m}e^{-\alpha_m} &G_m(x_i)=y_i \\ \frac{w_{mi}}{Z_m}e^{\alpha_m}&G_m(x_i)\neq y_i \end{cases} wm+1,i={Zmwmie−αmZmwmieαmGm(xi)=yiGm(xi)=yi
这里, Z m Z_m Zm是规范化因子,且
Z m = ∑ i = 1 N w m i e − α m y i G m ( x i ) Z_m=\sum_{i=1}^{N}w_{mi}e^{-\alpha_my_iG_m(x_i)} Zm=i=1∑Nwmie−αmyiGm(xi)
它使 D M + 1 D_{M+1} DM+1成为一个概率分布。 - 构建基本分类器的线性组合
f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^{M}\alpha_mG_m(x) f(x)=m=1∑MαmGm(x)
得到最终分类器:
G ( x ) = s i g n ( f ( x ) ) G(x)=sign(f(x)) G(x)=sign(f(x))
总结
本节我们介绍了Boosting算法的思想,并介绍了Boosting算法中最具有代表性的算法AdaBoost,下一节我们介绍提升树,提升树是以分类树或回归树为基本分类器的Boosting。提升树被认为是机器学习中性能最好的方法之一。
参考资料
机器学习方法.李航.