zoukankan      html  css  js  c++  java
  • 模式识别笔记4-集成学习之AdaBoost

    目前集成学习(Ensemble Learning) 分为两类:

    • 个体学习器间存在强依赖关系、必须串行化生成的序列化方法:Boosting
    • 个体学习器间不存在强依赖关系,可同时生成的并行化方法:Bagging 和 随机森林

    这里先来讲下代表Boosting家族的AdaBoost。
    Boosting 是一族可以将弱学习器提升为强学习器的算法。

    算法机制
    从初始训练集训练一个基学习器(Base Learner) ,根据基学习器的表现对训练样本分布进行调整,对做错的样本赋予更大的权重,基于调整后的样本分布训练下一个基学习器,直到基学习器的数目达到指定的值 (T),,同时进行学习器权重调整。

    1. AdaBoost分类算法流程

    假设我们有:

    • 训练集 (D={(x_1, y_1), (x_2, y_2), cdots, (x_m, y_m)})

    • 训练轮数(学习器数目): (T)

    • 基学习器 (h_t(x), t={1,2,3,cdots,T}) ,对应于学习算法

    • 基学习器权重 (alpha_t)

    • 样本分布 (mathcal D), 训练集在第 (t) 个分类器上的样本权重为:

      [ otag mathcal{D}_t= (w_{t1},w_{t2},cdots, w_{tm}) ]

    针对以上条件,AdaBoost的算法流程如下:

    [egin{align} &mathcal D_1 =1/m\ & ext{for }t = 1,2, cdots,T ext{ do} otag \ & e_t = P(h_t(x_i) eq y_i) = sum_{i=1}^mw_{ti}I(h_t(x_i) eq y_i)\ & alpha_t = frac{1}{2}ln(frac{1-e_t}{e_t})\ & ext{update distribution }D_{t+1}: otag \ & w_{t+1,i} = frac{w_{t,i}}{Z_t} imesexp(-alpha_ty_ih_t(x_i)) ext{ for } i=1,2,cdots,m\ & ext{end for} otag end{align} ]

    根据这个算法,我们一步步讲AdaBoost的流程。

    (1) 初始化权重

    对于每个样本,我们令其的初始化权重均为 (frac{1}{m})

    对于指定的基学习器数目 (T),我们知道Boosting 是串行化训练,每一个基学习器都是基于上一个已训练的基学习器继续训练得到的,所以接下来要做 (T) 个循环

    (2) 获得集合分类误差

    以二分类 ({+1,-1})为例(多分类是二分类的推广),第 (t) 个基学习器在训练集上的加权误差即如公式(2)所示。

    (3) 基学习器获得权重系数

    由公式(3)可以得到当前基学习器的权重系数。

    由公式可以知道,误差率越高,则当前基学习器的权重系数越小。至于为什么使用这个系数公式,我们放到Adaboost的损失函数优化的时候再讲。

    (4) 更新样本权重

    单独把公式(4)拿出来讲:

    [egin{align} w_{t+1,i} = frac{w_{t,i}}{Z_t} imesexp(-alpha_ty_ih_t(x_i)) end{align} ]

    其中 (Z_t) 是归一化因子:

    [egin{align} Z_t = sum_{i=1}^mw_{t,i} imes exp(-alpha_ty_ih_t(x_i)) end{align} ]

    可以看到,如果第 (i) 个样本分类错误,则 有:

    [egin{align} y_ih_t(x_i)<0 & Rightarrow exp(-alpha_i y_ih_t(x_i))>1\ &Rightarrow w_{t+1,i}>w_{t,i} end{align} ]

    则错误分类的样本会在下一个基学习器的训练中,在数据中占有更高的比重。具体为什么用这个权重更新公式,还是放到损失函数优化的时候讲。

    (5) 最终的分类策略

    最终的强分类器采用了加权平均:

    [egin{align} H(x)= ext{sign}(sum_{t=1}^Talpha_th_t(x)) end{align} ]

    2. AdaBoost损失函数

    AdaBoost使用指数损失函数:

    [egin{align} ell _{exp}(H|mathcal D)=sum_{i=1}^mexp (-y_iH_T(x)) end{align} ]

    通过最小化这个损失函数,我们可以推导出基学习器的权重系数更新策略和样本权重更新策略。至于为什么最小化指数函数误差就可以最小化分类误差,将在最后推导。

    基学习器权重更新策略推导

    我们知道,(t) 轮训练获得的基学习器是由上一个轮的学习器所得,即有:

    [egin{align} H_t(x)=H_{t-1}(x)+alpha_th_t(x) end{align} ]

    最小化 (t) 轮学习后得到的强分类器损失:

    [egin{align} (alpha_t, h_t(x) )=argminlimits_{alpha, h}sum_{i=1}^mexp(-y_i(H_{t-1}(x)+alpha_th_t(x))) end{align} ]

    我们令 (w_{ti}’=exp(-y_iH_{t-1}(x))),显然,它的值不依赖于 $alpha_t $ 和 (h_t(x)), 仅仅依赖于 (H_{t-1}(x)), 随着迭代改变。

    带回式子(12),得

    [egin{align} (alpha_t, h_t(x) )=argminlimits_{alpha, h}sum_{i=1}^mw_{ti}'exp(-y_ialpha_th_t(x)) end{align} ]

    为了极小化这个损失函数,我们需要极小化第 (t) 个分类器误差。即:

    [egin{align} h_t(x)=argmin limits_{h}sum_{i=1}^mw_{ti}'I(y_i eq h(x_i)) end{align} ]

    将(14)带入损失函数:

    [egin{align} otag sum_{i=1}^mw_{ti}'exp(-y_ialpha_th_t(x))&=sum_{y_i=h_t(x_i)}w_{ti}'e^{-alpha}+sum_{y_i eq h_t(x_i)}w_{ti}'e^alpha\ &=sum_{i=1}^mw_{ti}'e^{-alpha}-sum_{y_i eq h_t(x_i)}w_{ti}'e^{-alpha}+sum_{y_i eq h_t(x_i)}w_{ti}'e^alpha\ otag &=(e^alpha-e^{-alpha})sum_{y_i eq h_t(x_i)}w_{ti}'+e^{-alpha}sum_{i=1}^m w_{ti}' end{align} ]

    对于(15)求偏导,令其为0,得:

    [egin{align} (e^alpha+e^{-alpha})sum_{y_i eq h_t(x_i)}w_{ti}'-e^{-alpha}sum_{i=1}^m w_{ti}'=0 end{align} ]

    在基学习器的迭代中,每轮的分类误差为:

    [egin{align} e_t = sum_i^m w_{ti}I(y_i eq h_t(x_i))=sum_{y_i eq h_t(x_i)}w_{ij} end{align} ]

    注意到 :

    [egin{align} e_t = frac{ sum_i^m w_{ti}I(y_i eq h_t(x_i))}{sum_{i=1}^m w_{ti}'} end{align} ]

    则,式(16)变为:

    [egin{align} (e^{alpha_t}+e^{-alpha_t})e_t - e^{-alpha_t}=0 end{align} ]

    解得:

    [egin{align} alpha_t = frac{1}{2}ln left( frac{1-e_t}{e_t} ight) end{align} ]

    样本权重更新策略推导

    根据上一节自定义的 (w_{ti}'),我们知道它与 权重参数只差一个归一化因子 (Z_t)。有:

    [egin{align} w_{t+1,i}'&=exp (-y_iH_t(x))\ &=exp(-y_i(H_{t-1}(x)+alpha_th_t(x)))\ &=exp(-y_iH_{t-1}(x)·exp(-y_ialpha_th_t(x))\ &=w_{t,i}'·exp(-y_ialpha_th_t(x)) end{align} ]

    最小化指数函数误差=最小化分类误差?

    最后讲下为什么最小化指数函数误差=最小化分类误差。

    回顾一下指数函数误差。

    [egin{align} ell _{exp}(H|mathcal D)=sum_{i=1}^mexp (-y_iH_T(x)) end{align} ]

    为了最小化误差,我们对 (H(x))求偏导:

    [ abla H(x)=e^{H(x)}P(y=-1|x)-e^{-H(x)}P(y=+1|x) ]

    ( abla H(x)=0), 解得:

    [egin{align} H(x)&=frac{1}{2}lnfrac{P(y=+1|x)}{P(y=-1|x)} end{align} ]

    则最终强分类器:

    [egin{align} ext{sign}(H(x))&= ext{sign}left(frac{1}{2}lnfrac{P(y=+1|x)}{P(y=-1|x)} ight)\ &=mathop{ ext{arg max}} limits_{yin{+1,-1}}P(y|x) end{align} ]

    这意味着最终强分类器达到了贝叶斯最优错误率。换言之,若指数函数最小化,则分类错误率也最小化。

    参考资料

  • 相关阅读:
    Java并发和高并发学习总结(三)- J.U.C之Atomic包
    Java并发编程和高并发学习总结(二)- Java内存模型
    Java并发编程和高并发学习总结(一)-大纲
    PHP之验证码识别
    python+flask+mongodb+whoosh实现自己的搜索引擎(一):目录
    个性化自己的二维码
    基于bootstrap3的 表格和分页的插件
    构建 shiro struts2 spring3 mybatis 的maven项目
    jsp 嵌套iframe 从iframe中表单提交并传值到外层
    构建 struts2 spring3 mybatis 的maven项目 构建 pom.xml
  • 原文地址:https://www.cnblogs.com/HolyShine/p/9101672.html
Copyright © 2011-2022 走看看