机器学习——AdaBoost算法

本文深入探讨了AdaBoost算法,一种提升方法的典型代表。详细介绍了AdaBoost算法的工作原理,包括弱分类器的选择、权值调整以及强分类器的构建过程。此外,还提供了另一种解释,即将AdaBoost视为前向分步算法的特例。

综述

对于分类问题而说,给定一个训练样本集,求比较粗糙的分类规则(弱分类器)要比求精确的分类规则(强分类器)容易很多。提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器(又称基分类器),然后组合这些弱分类器,构成一个强分类器。大多数提升方法都是改变训练数据的概率分布(训练数据的权值分布),针对不同的训练数据分布调用弱学习算法学习一系列弱分类器。

AdaBoost算法是Boosting(提升)算法的典型代表,在1995年由Freund和Schapire提出。在每一轮的训练中,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权值。然后,AdaBoost采取加权多数表决的方法,具体地,加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决中起较小的作用。

定义

假设给定一个二分类的训练数据集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}其中,每个样本点由实例(特征)与标记(标签)组成。实例 x i ∈ X ⊆ R n x_i\in\mathcal X\subseteq \bf R^n xiXRn,标记 y i ∈ Y = { + 1 , − 1 } y_i \in \mathcal Y=\{+1,-1\} yiY={+1,1} X \mathcal X X 是实例空间, Y \mathcal Y Y 是标记集合。AdaBoost利用以下算法,从训练数据中学习一系列弱分类器或基分类器,并将这些弱分类器线性组合成为一个强分类器。

  1. 初始化训练数据的权值分布
    D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) ,        w 1 i = 1 N ,        i = 1 , 2 , . . . , N D_1=(w_{11},...,w_{1i},...,w_{1N}),\;\;\;w_{1i}=\frac{1}{N},\;\;\;i=1,2,...,N D1=(w11,...,w1i,...,w1N),w1i=N1,i=1,2,...,N假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同,这一假设保证第1步能够在原始数据上学习基本分类器 G 1 ( x ) G_1(x) G1(x)
  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
    2.1 使用具有权值分布 D m D_m Dm 的训练数据集学习,得到基本分类器
    G m ( x ) : X → { + 1 , − 1 } G_m(x):\mathcal X \rightarrow \{+1,-1\} Gm(x):X{+1,1}
    2.2 计算 G m ( x ) G_m(x) Gm(x) 在训练数据集上的分类误差率:
    e m = P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=P(G_m(x_i)\neq y_i)=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq y_i) em=P(Gm(xi)̸=yi)=i=1NwmiI(Gm(xi)̸=yi)其中, w m i w_{mi} wmi 表示第 m m m 轮中第 i i i 个实例的权值, ∑ i = 1 N w m i = 1 \sum_{i=1}^Nw_{mi}=1 i=1Nwmi=1
    2.3 计算基本分类器 G m ( x ) G_m(x) Gm(x) 的系数 α m \alpha_m αm
    α m = 1 2 log ⁡ 1 − e m e m \alpha_m=\frac{1}{2}\log\frac{1-e_m}{e_m} αm=21logem1em α m \alpha_m αm 表示 G m ( x ) G_m(x) Gm(x) 在最终分类器中的重要程度, α m \alpha_m αm 随着 e m e_m em 的减小而增大,分类误差率越小的基分类器在最终分类器中的作用越大。
    2.4 更新训练数据集的权值分布
    D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N )   w m + 1 , i = w m i Z m exp ⁡ ( − α m y i G m ( x 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 ,        i = 1 , 2 , . . . , N D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) \\ ~\\ w_{m+1,i}=\frac{w_{mi}}{Z_m}\exp(-\alpha_my_iG_m(x_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} ,\;\;\;i=1,2,...,N Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) wm+1,i=Zmwmiexp(αmyiGm(xi))={Zmwmieαm,Gm(xi)=yiZmwmieαm,Gm(xi)̸=yi,i=1,2,...,N Z m Z_m Zm 是规范化因子
    Z m = ∑ i = 1 N w m i exp ⁡ ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}\exp(-\alpha_my_iG_m(x_i)) Zm=i=1Nwmiexp(αmyiGm(xi))它使 D m + 1 D_{m+1} Dm+1 成为一个概率分布。
    由此可以看出,被基分类器误分类的样本的权值扩大,而被正确分类的样本的权值缩小,因此被误分类的样本在下一轮学习中起到更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同作用,这是AdaBoost算法的一大特点。
  3. 构建基本分类器的线性组合
    f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=m=1MαmGm(x)
    得到最终分类器:
    G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign\left(\sum_{m=1}^M\alpha_mG_m(x)\right) G(x)=sign(f(x))=sign(m=1MαmGm(x))线性组合 f ( x ) f(x) f(x) 实现 M M M 个基本分类器的加权表决。系数 α m \alpha_m αm 表示是了基本分类器 G m ( x ) G_m(x) Gm(x) 的重要性,注意:这里所有 α m \alpha_m αm 之和并不为1. f ( x ) f(x) f(x) 的符号决定实例 x x x 的类, f ( x ) f(x) f(x) 的绝对值表示分类的确信度。利用基分类器的线性组合构建最终分类器是AdaBoost算法的又一特点。

另一种解释

AdaBoost算法还有另一种解释,即认为它是模型为加法模型、损失函数为指数函数、学习算法为前向分布算法时的二类分类学习方法。

前向分步算法

加法模型:
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=m=1Mβmb(x;γm)其中, b ( x ; γ m ) b(x;\gamma_m) b(x;γm) 为基函数, γ m \gamma_m γm 为基函数的参数, β m \beta_m βm 为基函数的系数。

在给定训练数据及损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x)) 的条件下,学习加法模型 f ( x ) f(x) f(x) 成为经验风险极小化即损失函数极小化问题:
min ⁡ β m , γ m ∑ i = 1 N L ( y i , ∑ m = 1 M β m b ( x i ; γ m ) ) \min_{\beta_m,\gamma_m}\sum_{i=1}^NL\left(y_i,\sum_{m=1}^M\beta_mb(x_i;\gamma_m)\right) βm,γmmini=1NL(yi,m=1Mβmb(xi;γm))前向分步算法求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度,每步只需优化如下损失函数:
min ⁡ β , γ ∑ i = 1 N L ( y i , β b ( x i ; γ ) ) \min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta b(x_i;\gamma)) β,γmini=1NL(yi,βb(xi;γ))

前向分布算法:
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)};损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));基函数集 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
输出:加法模型 f ( x ) f(x) f(x)

  1. 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
    2.1 极小化损失函数:
    ( β m , γ m ) = arg ⁡ min ⁡ β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1NL(yi,fm1(xi)+βb(xi;γ))得到参数 β m , γ m \beta_m,\gamma_m βm,γm
    2.2 更新 f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta_mb(x;\gamma_m) fm(x)=fm1(x)+βmb(x;γm)
  3. 得到加法模型
    f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_mb(x;\gamma_m) f(x)=fM(x)=m=1Mβmb(x;γm)
    这样,前向分步算法将同时求解从 m = 1 m=1 m=1 M M M 所有参数 β m , γ m \beta_m,\gamma_m βm,γm 的优化问题简化为主次求解各个 β m , γ m \beta_m,\gamma_m βm,γm 的优化问题。

前向分步算法与AdaBoost

AdaBoost算法是前向分步算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。

参考文献

[1] 李航. 统计学习方法. 清华大学出版社. 2012

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值