机器学习算法系列(十九)-自适应增强算法(Adaptive Boosting Algorithm / AdaBoost Algorithm)——上篇

AdaBoost算法详解
本文详细介绍AdaBoost算法原理及其变体,包括算法步骤、原理证明等内容,适用于机器学习初学者及进阶者。

阅读本文需要的背景知识点:集成学习、拉格朗日乘数法、一丢丢编程知识

一、引言

  前面一节我们学习了随机森林算法(Random Forest Algorithm),讲到了其中一种集成学习的方法——Bagging 算法,这一节我们来学习另一种集成学习的方法——提升算法1 (Boosting Algorithm),同时介绍其中比较常见的算法——自适应增强算法2(Adaptive Boosting Algorithm / AdaBoost Algorithm)

二、模型介绍

Boosting 算法

  Boosting 算法也是一种集成学习,与 Bagging 算法不同的是,每次训练更关注训练出的估计器中分类错误或者回归误差大的样本,即每次训练都是根据上次训练的结果调整不同的样本权重,直到最后的输出小于预设的阈值。

0.png

图2-1

  图 2-1 展示了提示算法的具体流程,其与 Bagging 算法的区别在于:其一,Bagging 算法的每个估计器相对独立且权重都相同,而 Boosting 算法的每个估计器都依赖于上一个估计器同时权重也不同。其二,一般情况下 Bagging 算法可以减小方差、而 Boosting 算法则是减小偏差。
  Boosting 算法中比较有代表性的算法就是自适应增强算法(Adaptive Boosting Algorithm / AdaBoost Algorithm)

AdaBoost 算法

  AdaBoost 算法是由 Yoav Freund 和 Robert E. Schapire 在 1995 年提出的,同时还提出了 AdaBoost.M1、AdaBoost.M2 算法用于多分类问题,AdaBoost.R 算法用于回归问题。后面陆续又有人提出了上述算法的变体 AdaBoost-SAMME、AdaBoost-SAMME.R、AdaBoost.R2 算法。
  AdaBoost 算法的基本步骤与 Boosting 算法一样,是 Boosting 算法的具体实现,其定义了每次循环如何更新样本权重以及最后如何将每个估计器结合起来。
  由于笔者能力所限,本文只会介绍基础的 AdaBoost 算法和现在 scikit-learn 中所实现的 AdaBoost-SAMME、AdaBoost-SAMME.R、AdaBoost.R2算法,其他的算法暂无法一一介绍,感兴趣的读者可以参考文末对应算法的论文原文。

三、算法步骤

  下面先给出每个算法的执行步骤,后面再一一说明这些算法步骤中公式的来源。

二分类

  假设训练集 T = { X i , y i } T = \{ X_i, y_i \} T={ Xi,yi} i = 1 , . . . , N i = 1,...,N i=1...N y i ∈ { − 1 , + 1 } y_i \in \{-1,+1\} yi{ 1+1},h(x) 为估计器,估计器的数量为 K。

AdaBoost 算法步骤如下:

初始化样本权重向量 ω 1 ω_1 ω1
ω 1 , i = 1 N i = 1 , . . . , N \begin{aligned} \omega_{1,i} &= \frac{1}{N} \quad i = 1,...,N \end{aligned} ω1,i=N1i=1,...,N

遍历估计器的数量 K 次:
  在样本权重 ω k ω_k ωk 下训练估计器 h(x)
  计算第k次的误差率 e k e_k ek
e k = ∑ i = 1 N ω k , i I ( y i ≠ h k ( X i ) ) \begin{aligned} e_k &= \sum_{i = 1}^{N}\omega_{k,i} I(y_i \ne h_k(X_i)) \end{aligned} ek=i=1Nωk,iI(yi=hk(Xi))

  如果误差率 e k e_k ek 大于 0.5
    中断循环
  计算第k次的估计器权重 α k α_k αk
α k = 1 2 ln ⁡ 1 − e k e k \begin{aligned} \alpha_k &= \frac{1}{2} \ln \frac{1 - e_k}{e_k}\\ \end{aligned} αk=21lnek1ek

  计算第 k + 1 次的权重向量 ω k + 1 ω_{k+1} ωk+1
ω k + 1 , i = ω k , i e − y i α k h k ( X i ) ∑ j = 0 N ( ω k , j e − y j α k h k ( X j ) ) \begin{aligned} \omega_{k+1,i} &= \frac{\omega_{k,i} e^{-y_i\alpha_kh_k(X_i)}}{\sum_{j = 0}^N \left(\omega_{k,j} e^{-y_j\alpha_kh_k(X_j)}\right) } \end{aligned} ωk+1,i=j=0N(ωk,jeyjαkhk(Xj))ωk,ieyiαkhk(Xi)

结束循环

  最后的结合策略,采用加权后的结果取 sign 函数,得到最终的强估计器:
H ( x ) = sign ⁡ ( ∑ i = 1 K α i h i ( x ) ) \begin{aligned} H(x) &= \operatorname{sign} \left(\sum_{i = 1}^{K} \alpha_i h_i(x)\right) \end{aligned} H(x)=sign(i=1Kαihi(x))


多分类

  假设训练集 T = { X i , y i } T = \{ X_i, y_i \} T={ Xi,yi} i = 1 , . . . , N i = 1,...,N i=1...N,y 的取值有 M 种可能,h(x) 为估计器,估计器的数量为 K。

AdaBoost-SUMME 算法步骤如下:

初始化样本权重向量 ω 1 ω_1 ω1
ω 1 , i = 1 N i = 1 , . . . , N \begin{aligned} \omega_{1,i} &= \frac{1}{N} \quad i = 1,...,N \end{aligned} ω1,i=N1i=1,...,N

遍历估计器的数量 K 次:
  在样本权重 ω k ω_k ωk 下训练估计器 h(x)
  计算第k次的误差率 e k e_k ek
e k = ∑ i = 1 N ω k , i I ( y i ≠ h k ( X i ) ) \begin{aligned} e_k &= \sum_{i = 1}^{N}\omega_{k,i} I(y_i \ne h_k(X_i)) \end{aligned} ek=i=1Nωk,iI(yi=hk(Xi))

  计算第 k 次的估计器权重 α k α_k αk
α k = ln ⁡ 1 − e k e k + ln ⁡ ( M − 1 ) \begin{aligned} \alpha_k &= \ln \frac{1 - e_k}{e_k} + \ln (M - 1) \\ \end{aligned} αk=lnek1ek+ln(M1)

  计算第 k + 1 次的权重向量 ω k + 1 ω_{k+1} ωk+1
ω k + 1 , i ˉ = ω k , i e α k I ( y i ≠ h k ( X i ) ) \begin{aligned} \bar{\omega_{k+1,i}} &= \omega_{k,i}e^{\alpha_kI(y_i \ne h_k(X_i))} \end{aligned} ωk+1,iˉ=ωk,ieαkI(yi=hk(Xi))

  对权重向量 ω k + 1 ω_{k+1} ωk+1 进行归一化
ω k + 1 , i = ω k + 1 , i ˉ ∑ j = 1 N ω k + 1 , i ˉ \begin{aligned} \omega_{k+1,i} &= \frac{\bar{\omega_{k + 1,i}}}{\sum_{j = 1}^N \bar{\omega_{k + 1,i}} } \end{aligned} ωk+1,i=j=1Nωk+1,iˉωk+1,iˉ

结束循环

  最后的结合策略,采用正确分类的结果加权后取值最大的分类,得到最终的强估计器:
H ( x ) = argmax ⁡ m ( ∑ i = 1 K α i I ( h i ( x ) = m ) ) \begin{aligned} H(x) &= \underset{m}{\operatorname{argmax}} \left( \sum_{i = 1}^{K} \alpha_i I(h_i(x) = m) \right) \end{aligned} H(x)=margmax(i=1KαiI(hi(x)=m))


AdaBoost-SUMME.R 算法步骤如下:

初始化样本权重向量 ω 1 ω_1 ω1
ω 1 , i = 1 N i = 1 , . . . , N \begin{aligned} \omega_{1,i} &= \frac{1}{N} \quad i = 1,...,N \end{aligned} ω1,i=N1i=1,...,N

遍历估计器的数量 K 次:
  在样本权重 ω k ω_k ωk 下计算加权类概率估计向量 P k P_k Pk
p k m ( x ) = P ( y = m ∣ x ) \begin{aligned} p_k^m(x) = P(y = m \mid x) \end{aligned} pkm(x)=P(y=mx)

   计算第 k + 1 次的权重向量 ω k + 1 ω_{k+1} ωk+

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值