机器学习系列(7)——提升方法与AdaBoost算法

本文介绍提升方法与AdaBoost算法。

 

0x01、提升方法

提升(boosting)方法是一种常用的统计学习方法,应用广泛且有效。在分类问题中,它通过改变训练样本权重,学习多个分类器,并将这些分类器进行线性组合,提高分类的性能。

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

对提升方法来说,有两个关键问题:(1)在每一轮如何改变训练数据的权值或概率分布;(2)如何将弱分类器组合成一个强分类器。

 

0x02、AdaBoost算法基础知识

1、基本框架

(1)在原始数据上学习基本分类器 G_1(x) 。是基于假设训练数据集具有均匀的权值分布,即每个训练样本在基本分类器的学习中作用相同。

(2)反复学习基本分类器,在每一轮 m=1,2,...,M 顺次地执行下列操作:

        a. 使用当前分布 D_m 加权的训练数据集,学习基本分类器 G_m(x)

        b. 计算基本分类器 G_m(x) 在加权训练数据集上的分类误差率:

        e_m=\sum_{i=1}^{N}P(G_m(x_i)\neq y_i) = \sum_{G_m(x_i)\neq y_i} w_{mi}  

这里 w_{mi} 表示第 m 轮中第 i 个实例的权值,\sum_{i=1}^{N}w_{mi} = 1 。这表明 G_m(x) 在加权的训练数据集上的分类误差率是被 G_m(x) 误分类样本的权值之和,由此可以看出数据权值分布 D_m 与基本分类器 G_m(x) 的分类误差率的关系;

        c. 计算基本分类器 G_m(x) 的系数  。  表示 G_m(x) 在最终分类器中的重要性。 分类误差率越小的基本分类器在最终分类器中的作用越大。

        d. 更新训练数据的权值分布为下一轮做准备。被基本分类器 G_m(x) 误分类样本的权值得以扩大,而被正确分类样本的权值却得以缩小。误分类样本在下一轮学习中起更大的作用。

(3)线性组合 实现M个基本分类器的加权表决系数  表示了基本分类器 G_m(x) 的重要性。这里  所有  之和并不为1   的符号决定示例 的类。  的绝对值表示分类的确信度。利用基本分类器的线性组合构建最终分类器是AdaBoost的另一特点。

2、前向分步算法

前向分步算法(forward stagewise algorithm)的基本想法是:因为学习的是加法模型,如果能从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数,那么就可以简化优化复杂度。这样,每步只需优化如下损失函数:

        \min_{\beta ,\gamma } \sum_{i=1}^{N} L(y_i,\beta b(x_i;\gamma))

【前向分步算法】

输入:训练数据集 T=\left\{ (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \right\};损失函数 L(y,f(x));基函数集 b\left\{(x;\gamma) \right\}

输出:加法模型 f(x)

(1)初始化  f_0(x)=0

(2)对 m=1,2,...,M :

        (a). 极小化损失函数,得到参数 \beta_m\gamma_m: 

        (\beta_m,\gamma_m) = arg~\min_{\beta, \gamma} \sum_{i=1}^{N} L(y_i,f_{m-1}(x_i) + \beta b(x_i;\gamma))   

        (b). 更新:f_m(x)=f_{m-1}(x) + \beta_mb(x;\gamma_m) ;

(3)得到加法模型:

        f(x)=f_M(x)= \sum_{m=1}^{M} \beta_mb(x;\gamma_m)  

这样,前向分步算法将 同时求解从 m=1 到 M 所有参数 \beta_m\gamma_m 的优化问题 简化为逐次求解各个 \beta_m\gamma_m 的优化问题。

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

 

0x03、AdaBoost算法步骤

AdaBoost采用加权多数表决的方法,提高那些被前一轮弱分类器错误分类样本的权值,而降低那些被正确分类样本的权重。同时加大分类误差率小的弱分类器的权值,使其在表决中起较大的作用。这样,分类问题被一系列弱分类器“分而治之”。

输入:训练数据集 T=\left\{(x_1,y_1),(x_2,y_2),..., (x_N,y_N) \right\} ,其中 x_i \in \chi \subseteq R^n, y_i \in \gamma \left\{-1,+1\right\}; 弱学习算法;

输出:最终分类器 G(x) 。

(1)初始化训练数据的权值分布 D_1 = (w_{11}, ..., w_{1i}, ..., w_{1N}) ,w_{1i}=\frac{1}{N} , i=1,2,...,N

(2)对 m=1,2,...,M

        a. 使用具有权值分布 D_m 的训练数据集学习,得到基本分类器:G_m(x) : \chi \rightarrow \left\{-1,+1 \right\} ;

        b. 计算 G_m(x) 在训练数据集上的分类误差率:  e_m=\sum_{i=1}^{N}P(G_m(x_i)\neq y_i) = \sum_{i=1}^{N}w_{mi}I(G_m(x_i)\neq y_i)

        c. 计算 G_m(x) 的系数:\alpha_m = \frac{1}{2} ln \frac{1-e_m}{e_m}

        d. 更新训练数据集的权值分布:

                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_m y_i G_m(x_i)),~ i=1,2,...,N

          这里 Z_m 是范化因子:Z_m=\sum_{i=1}^{N}w_{mi}exp(-\alpha_m y_i G_m(x_i))  ,它使 D_{m+1} 成为一个概率分布。

(3)构建基本分类器的线性组合:

                  f(x)=\sum_{m=1}^{M}\alpha_mG_m(x) 

得到最终分类器:

                   G(x)=sign(f(x))=sign\left\(\sum_{m=1}^{M}\alpha_mG_m(x) \right\)

 

0x04、AdaBoost算法的训练误差分析

AdaBoost最基本的性质是它能在学习过程中不断减少训练误差,即在训练数据集上的分类误差率。

【定理:AdaBoost的训练误差界】AdaBoost算法最终分类器的训练误差界为:

        \frac{1}{N} \sum_{i=1}^{N} I(G(x_i) \neq y_i) \leq \frac{1}{N} \sum_{i} exp(-y_if(x_i)) = \prod_{m} Z_m  

这里 G(x),f(x) 和 Z_m 分别为:

        G(x)=sign(f(x))=sign \left( \sum_{m=1}^{M} \alpha_m G_m(x) \right)  

        f(x)= \sum_{m-1}^{M} \alpha_m G_m(x)   

        Z_m = \sum_{i=1}^{N} w_{mi} exp(-\alpha_m y_i G_m(x_i))   

【定理:二分类问题AdaBoost训练误差界】如下公式,其中 \gamma_m = \frac{1}{2}-e_m  :

         \prod_{m=1}^{M} Z_m = \prod_{m=1}^{M} [2 \sqrt{e_m(1-e_m)}] \\ ~~~~~~~~~~~~~~~=\prod_{m=1}^{M} \sqrt{1-4\gamma^2_{m}} \\ ~~~~~~~~~~~~~~~\leq exp\left(-2 \sum_{m=1}^M \gamma_{m}^2 \right )   

【推论】如果存在 \gamma > 0,对所有 m 有 \gamma_m \geq \gamma,则:

        \frac{1}{N} \sum_{i=1}^{N} I(G(x_i) \neq y_i) \leq exp(-2M\gamma^2)   

这表明在此条件下AdaBoost的训练误差是以指数速率下降的。


0x05、AdaBoost在sklearn中的实现

1、sklearn.ensemble.AdaBoostClassifier

参数参数类型默认值参数含义详细说明
base_estimator对象型None基学习器理论上可以选择任何一个分类或者回归学习器,不过需要支持样本权重。默认使用CART分类树。
n_estimattorsint50基学习器个数基学习器的个数,默认50个
learning_ratefloat1学习率每个弱学习器的权重缩减系数,取值在[0,1]之间,用于正则化,防止过拟合
algorithm

{'SAMME',

'SAMME.R'}

SAMME.R分类算法两者的主要区别是弱学习器权重的度量,SAMME使用对样本集分类效果作为弱学习器权重,SAMME.R使用对样本集分类的预测概率大小来作为弱学习器权重。SAMME.R迭代一般比SAMME快。一般使用默认的SAMME.R就够了。但要注意使用了SAMME.R,则base_estimator必须限制使用支持概率预测的分类器。SAMME算法没有这个限制。
random_stateint或随机状态None随机性设置给基学习器每轮的迭代加上随机种子。

 

2、sklearn.ensemble.AdaBoostRegressor

参数参数类型默认值参数含义详细说明
base_estimator对象型None基学习器理论上可以选择任何一个分类或者回归学习器,不过需要支持样本权重。默认使用CART回归树。
n_estimattorsint50基学习器个数基学习器的个数,默认50个
learning_ratefloat1学习率每个弱学习器的权重缩减系数,取值在[0,1]之间,用于正则化,防止过拟合
loss

{'linear','square',

'exponential'}

linear损失函数损失函数的选择,有线性损失函数、平方损失函数和指数损失函数,一般用线性损失函数
random_stateint或随机状态None随机性设置给基学习器每轮的迭代加上随机种子。

 

参考:

[1]. 李航. 统计学习方法(第二版)

[2]. scikit-learn Adaboost类库使用小结 - 博客园

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值