1、Adaboost 算法简介
- AdaBoost (Adaptive Boosting):自适应增强
- 由 Yoav Freund和Robert Schapire在1995年在《A decision-theoretic generalization of on-line learning and an application to boosting》一文中提出
2、Adaboost 算法图示
1)Adaboost 训练过程框架图示
训练结束,我们得到了:
- 从n个弱分类器中挑选出了 t t t 个基分类器
- 这 t t t 个基分类器,具有顺序性
- 每个基分类器,有对应的权重
强分类器的使用
强分类器的预测结果是 “基分类器的预测结果” 与 “基分类器的权重” 的加权和,根据加权和结果的符号决定强分类器的最终结果是 -1 还是 1 (**样本的二分类 label 记为 -1 或 1)
- 加权和小于0, 强分类器的最终预测结果为 -1
- 加权和大于0, 强分类器的最终预测结果为1
模型优化方向
假设一开始我们的计划是挑选出10个基分类器组成一个强分类器。在完成这10个基分类器的挑选,并且获得他们的权重之后,我们在测试数据集上(或者验证数集上)进行测试,发现效果并不理想,那么接下来的优化方向有2个:
(1)优化弱分类器,然后重新挑选基分类器
(2)继续增加基分类器,比如之前只挑选了5个基分类器,那你可以加到8个,或10个
看完这部分之后,带着问题去看第4部分-算法说明 & 细节解读,有任何问题也欢迎评论区留言。
3、Adaboost 算法步骤
符号定义
D D D :样本集权重, D t ( i ) D_t(i) Dt(i) 表示第t次更新后,第 i i i个样本的权重值
h j h_j hj :弱分类器,(一共有 n n n 个弱分类器, j j j表示第 j j j个分类器), h j ( x i ) h_j(x_i) hj(xi) 表示 弱分类器 j j j 对于样本 x i x_i xi 的预测结果,值为 -1 或 1
H H H :基分类器,(通过计算,从所有 n n n 个分类器中选择出的一个弱分类器,叫做基分类器。 H t ( x i ) H_t(x_i) Ht(xi) 表示基分类器 t t t 对于样本 x i x_i xi 的预测结果,值为 -1 或 1
H f i n a l H_{final} Hfinal :最终的强分类器
e e e :误分率, 计算公式为 e = ∑ i = 1 N w i ∣ h j ( x i ) − y i ∣ e =\sum_{i=1}^Nw_i|h_j(x_i)-y_i| e=∑i=1Nwi∣hj(xi)−yi∣
α t \alpha_t αt :弱分类器的权重
step 1:初始化训练数据的权重 w 1 w_1 w1。
训练集有 N N N个样本,每个样本 x i x_i xi 都有自己的权重值 w i w_{i} wi
首次需要初始化样本的权重值,
每个样本的权重值初始化为: w i = 1 N w_i=\frac{1}{N} wi=N1
训练样本集权重为: D 1 = ( w 1 , w 2 , . . . , w N ) = ( 1 N , 1 N , . . . , 1 N ) D_1=(w_{1}, w_{2}, ... , w_{N})=(\frac{1}{N}, \frac{1}{N}, ... , \frac{1}{N}) D1=(w1,w2,...,wN)=(N1,N1,...,N1)
- D D D 的下标 “1 ” 表示第1次更新样本集权重值,因为样本集的权重值后续会更新
step 2:进行迭代 t = 1 , . . . , T t=1 , ... , T t=1,...,T
-
用提前训练好的n个弱分类器,分别对训练数据进行预测,得到这n个弱分类器的误差率。
选择误分率最小的一个做为第 t t t 个基分类器。
误分率的计算公式为: e = ∑ i = 1 N w i ∣ h j ( x i ) − y i ∣ e =\sum_{i=1}^Nw_i|h_j(x_i)-y_i| e=i=1∑Nwi∣hj(xi)−yi∣
由上述式子可知,误分类率就是被 弱分类器 h i h_i hi (或者 基分类器 H t H_t Ht) 误分类样本的权重之和 -
计算基分类器的权重 α t \alpha_t αt
α t = 1 2 l n ( 1 − e t e t ) \alpha_t = \frac{1}{2}ln(\frac{1-e_t}{e_t}) αt=21ln(et1−et) -
基于基分类器,更新训练集的权重 D: D t + 1 ( i ) = D t ( i ) ⋅ e x p ( − α t y i H t ( x i ) ) Z t D_{t+1} (i)= \frac{D_t(i) \cdot exp({-\alpha_t y_iH_t(x_i)})}{Z_t} Dt+1(i)=ZtDt(i)⋅exp(−αtyiHt(xi))
也可以写成每个样本的更新形式: w t + 1 ( i ) = w t ( i ) ⋅ e x p ( − α t y i H t ( x i ) ) Z t w_{t+1} (i)= \frac{w_t(i) \cdot exp({-\alpha_t y_iH_t(x_i)})}{Z_t} wt+1(i)=Ztwt(i)⋅exp(−αtyiHt(xi))
其中,归一化常数 Z t = 2 e t ( 1 − e t ) Z_t = 2\sqrt{e_t(1-e_t)} Zt=2et(1−et) ; H t ( x i ) H_t(x_i) Ht(xi)为基分类器的预测值,值为 -1 或 1
具体训练思想是:如果某个训练样本点 x i x_i xi,被基分类器 h i h_i hi准确地分类,它对应的权值要减小;相反,如果被错误分类,它的权值就应该增大。权值更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代地进行下去。
step 3:最后,将得到的 t t t个 基分类器组合成一个强分类器。
强分类器的分类结果 = ∑ t = 1 T α t H t ( x ) \sum_{t=1}^T\alpha_tH_t(x) ∑t=1TαtHt(x), where α t = 1 2 l n ( 1 − e t e t ) \alpha_t = \frac{1}{2}ln(\frac{1-e_t}{e_t}) αt=21ln(et1−et)
观察各个基分类器的权重 α t = 1 2 l n ( 1 − e t e t ) \alpha_t = \frac{1}{2}ln(\frac{1-e_t}{e_t}) αt=21ln(et1−et),会发现,误分率小的基分类器对最终结果起较大的决定作用,而误分率大的基分类器在最终的结果中起着较小的决定作用。
4、算法说明 & 细节解读:
1、弱分类器可以是任意的分类器模型,需是提前训练好的分类器。比如说,可以是决策树分类器,阈值分类器,等等。n个弱分类器可以是多种不同的分类器,唯一的要求是他们输出的结果是相同的格式。
2、算法中涉及两个权重:
- 样本权重:
- 基分类器权重
3、怎么确定T 的值?
根据实际情况调试而定。假如你一开始将 T 设为了5, 结果训练完发现效果还不错,满足需求了,那么T就是5。假如你觉得效果不太好,差点意思,而且手上还有没有用上的弱分类器,那你就继续往模型里面加,那 T 的值也就增加。
5、AdaBoost 算法使用实例
大家请参考这篇文章的实例子: 点击查看
Reference: