【VJ算法】VJ算法 之 Adaboost

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=1Nwihj(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=1Nwihj(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(et1et)

  • 基于基分类器,更新训练集的权重 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(1et) 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(et1et)

  • 观察各个基分类器的权重 α t = 1 2 l n ( 1 − e t e t ) \alpha_t = \frac{1}{2}ln(\frac{1-e_t}{e_t}) αt=21ln(et1et),会发现,误分率小的基分类器对最终结果起较大的决定作用,而误分率大的基分类器在最终的结果中起着较小的决定作用。


4、算法说明 & 细节解读:

1、弱分类器可以是任意的分类器模型,需是提前训练好的分类器。比如说,可以是决策树分类器,阈值分类器,等等。n个弱分类器可以是多种不同的分类器,唯一的要求是他们输出的结果是相同的格式。

2、算法中涉及两个权重:

  • 样本权重:
  • 基分类器权重

3、怎么确定T 的值?
根据实际情况调试而定。假如你一开始将 T 设为了5, 结果训练完发现效果还不错,满足需求了,那么T就是5。假如你觉得效果不太好,差点意思,而且手上还有没有用上的弱分类器,那你就继续往模型里面加,那 T 的值也就增加。


5、AdaBoost 算法使用实例

大家请参考这篇文章的实例子: 点击查看


Reference:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Enzo 想砸电脑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值