阅读本文需要的背景知识点:集成学习、拉格朗日乘数法、一丢丢编程知识
一、引言
前面一节我们学习了随机森林算法(Random Forest Algorithm),讲到了其中一种集成学习的方法——Bagging 算法,这一节我们来学习另一种集成学习的方法——提升算法1 (Boosting Algorithm),同时介绍其中比较常见的算法——自适应增强算法2(Adaptive Boosting Algorithm / AdaBoost Algorithm)
二、模型介绍
Boosting 算法
Boosting 算法也是一种集成学习,与 Bagging 算法不同的是,每次训练更关注训练出的估计器中分类错误或者回归误差大的样本,即每次训练都是根据上次训练的结果调整不同的样本权重,直到最后的输出小于预设的阈值。

图 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=1∑Nω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=21lnek1−ek
计算第 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,je−yjαkhk(Xj))ωk,ie−yiα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=1∑Kα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=1∑Nω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=lnek1−ek+ln(M−1)
计算第 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=1∑Kα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=m∣x)
计算第 k + 1 次的权重向量 ω k + 1 ω_{k+1} ωk+
AdaBoost算法详解

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

被折叠的 条评论
为什么被折叠?



