Adboost算法(未完待续)

Boosting

集成学习通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统。集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。下面从两个方面对集成学习进行简要介绍、

  • 分类
    根据个体学习器的生成方式,目前的集成学习方法大致可以分为两大类,即个体学习器间存在强依赖关系、必须串行生成的序列化方法,以及个体学习器间不存在强依赖关系、可同时生成的并行化方法;前者的代表是Boosting,后者的代表是Bagging和随机森林。
  • 结合策略
    对于基分类器最终的结合策略常见的方法有如下几种:
    • 平均法
      对于数值型输出,最常见的结合策略即为平均法:
      H ( x ) = 1 T i = 1 T h i ( x )

      其中 h i ( x ) 基学习器的输出结果, H ( x ) 为最终学习器的结果, T 为基学习器的个数。
    • 加权平均法
      H ( x ) = i = 1 T ω i h i ( x )

      其中 ω i 是个体学习器 h i ( x ) 的权重,通常要求 ω i 0 , i = 1 T ω i = 1 。显然,平均法是加权平均法的特例。
    • 投票法
      预测结果为得票最多的标记,若同时有多个标记得票数相同,则在其中随机选择一个。
    • 学习法
      当训练数据很多时,可以通过另一个学习器来对所有的基学习器产生结果的结合方法进行学习,这时候个体学习器成为初级学习器,用于结合的学习器称为次级学习器或元学习器。

Adaboost

思想

AdaBoost是最著名的Boosting族算法。开始时,所有样本的权重相同,训练得到第一个基分类器。从第二轮开始,每轮开始前都先根据上一轮基分类器的分类效果调整每个样本的权重,上一轮分错的样本权重提高,分对的样本权重降低。之后根据新得到样本的权重指导本轮中的基分类器训练,即在考虑样本不同权重的情况下得到本轮错误率最低的基分类器。重复以上步骤直至训练到约定的轮数结束,每一轮训练得到一个基分类器。
可以想象到,远离边界(超平面)的样本点总是分类正确,而分类边界附近的样本点总是有大概率被弱分类器(基分类器)分错,所以权值会变高,即边界附近的样本点会在分类时得到更多的重视。

Example

给定数据集D,我们采用AdaBoost算法来学习得到一个强分类器

x 0 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 1 1 1 1 -1

数据集D共有10条数据,根据x的输入得到的y可以分类两类,即y=1与y=-1。我们每一轮使用最简单的决策树桩来构建基分类器,即每轮设定一个阈值θ,只要x<θ,就判定为正类(y=1),x>θ就判定为负类(y=-1)。

Round 1

  • D 1 ( x )
    在第一轮中,所有样本权重相同:
    D 1 ( x ) = { 1 10 , 1 10 , 1 10 , 1 10 , 1 10 , 1 10 , 1 10 , 1 10 , 1 10 , 1 10 }
  • θ
    因为是离散数据,因此 θ 可以依次取0.5,1.5,2.5,…,8.5来对x进行分类,可以有两种分类方法:
    • x < θ 时为正类, x > θ 时为正类,分类错误率对应 ϵ t 1
    • x > θ 时为正类, x < θ 时为正类,分类错误率对应 ϵ t 2
      最终要选择一个令 ϵ 1 取得最小值的 θ 与分类方法,九个 θ 值在上述两种分类方法下, h 1 的错误率 ϵ 1 分别为:
      ϵ 1 1 = { 0.5 1 10 , 0.4 1 10 , 0.3 1 10 , 0.4 1 10 , 0.5 1 10 , 0.6 1 10 , 0.5 1 10 , 0.4 1 10 , 0.3 1 10 , }
      ϵ 1 2 = { 0.5 1 10 , 0.6 1 10 , 0.7 1 10 , 0.6 1 10 , 0.5 1 10 , 0.4 1 10 , 0.5 1 10 , 0.6 1 10 , 0.7 1 10 , }
      可以看到 ϵ 1 1 中的 0.3 1 10 为最小值。对应的,我们取θ为2.5(θ为8.5亦可),使用第一种分类方法。则x为0,1,2的样本分为正类,都分对了;而之后的样本都被分为负类,分错了3个,所以总错误率为 0.3 1 10 。故此轮弱分类器的阈值θ取2.5,分类方法取第一种。
  • α 1
    第一层基分类器 h 1 的权重 α 1 的计算推到方法后面的推导部分再细说,此处只要知道通过如下的公式来计算即可:
    α 1 = 1 2 log 1 ϵ 1 ϵ 1 = 0.4236
  • H ( x ) , P A ( D )
    根据公式计算 H ( x ) ,此时T为1:
    H ( x ) = t = 1 T α t h t ( x )

    H ( x ) = { 0.424 , 0.424 , 0.424 , 0.424 , 0.424 , 0.424 , 0.424 , 0.424 , 0.424 }

    s i g n ( H ( x ) ) = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }

    当前整个模型准确率为: P A ( D ) = 0.7
    至此第一轮的工作就结束了,可以看出被误分类样本的权值之和影响误差率,误差率影响基分类器在最终分类器中所占的权重。

Round 2

  • D 2 ( x )
    第一轮训练完成后对 D 1 ( x ) 进行更新得到 D 2 ( x ) ,更新公式的推导过程也是等到后边的推到部分再说,此处还是只要知道通过下边的公式来计算更新即可:
    D 2 ( X ) = D 1 ( X ) e α 1 y ( x ) h 1 ( x ) Z 1

    D 2 ( x ) = { 0.071 , 0.071 , 0.071 , 0.071 , 0.071 , 0.071 , 0.167 , 0.167 , 0.167 , 0.071 }

    由于上一轮中x=6、7、8的点分错了,可以看到这三个点在 D 2 中的权重变大了,而其余分类正确的点权重变小了。
  • θ
    我们依然对θ依次取0.5, 1.5, … , 8.5来对x进行分类,注意我们刚才已经得到了 D 2 ( x ,样本权重的分布不再是第一轮全部相等的 1 10 了,如当 θ 取0.5按第一种分类方法进行分类时, ϵ 2 1 计算方法如下:
    ϵ 2 1 ( θ = 0.5 ) = { 0 0.071 + 1 0.071 + 1 0.071 + 0 0.071 + 0 0.071 + 0 0.071 + 1 0.16 + 1 0.167 + 1 0.167 + 0 0.071 } = 0.643
    对所有θ与分类方法都按照如上的步骤进行计算,则可得到 ϵ 2 1 ϵ 2 2 分别为:
    ϵ 2 1 = { 0.643 , 0.571 , 0.5 , 0.571 , 0.643 , 0.714 , 0.548 , 0.381 , 0.214 }
    ϵ 2 2 = { 0.357 , 0.429 , 0.5 , 0.429 , 0.357 , 0.286 , 0.452 , 0.619 , 0.786 }
    可以看到 ϵ 2 1 中的0.214为最小值,故此轮弱分类器的阈值θ取8.5,分类方法为第一种。
  • α 2
    依然使用如下公式进行计算:
    α 2 = 1 2 log 1 ϵ 2 ϵ 2 = 0.6496
  • H ( x ) , P A ( D )
    继续根据如下公式计算 H ( x ) ,此时T为2:
    H ( x ) = t = 1 T α t h t ( x )

    H ( x ) = { 1.073 , 1.073 , 1.073 , 0.226 , 0.226 , 0.226 , 0.226 , 0.226 , 0.226 , 1.073 }

    s i g n ( H ( x ) ) = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }

    当前整个模型的准确率为:
    P A ( D ) = 0.7

    至此第二轮的工作就结束了,下面我们继续使用上边的方式来看第三轮是否能将准确率提升。

第三轮

  • D 3 ( x )
    使用 D 2 ( x ) 更新得到 D 3 ( x ) 如下:
    $ D 3 ( x ) = { 0.045 , 0.045 , 0.045 , 0.167 , 0.167 , 0.167 , 0.106 , 0.106 , 0.106 , 0.045 }

    在上一轮中x=3.4.5被错分,所以在 D 3 中的权重变大,其余分类正确点的权重会变小。
  • θ
    继续使用之前的方法得到 ϵ 3 1 ϵ 3 2 分别为:
    ϵ 3 1 = { 0.409 , 0.364 , 0.318 , 0.485 , 0.652 , 0.818 , 0.712 , 0.606 , 0.5 }

    ϵ 3 2 = { 0.591 , 0.636 , 0.682 , 0.515 , 0.348 , 0.182 , 0.288 , 0.394 , 0.5 }

    可以看到 ϵ 3 2 中的0.182为最小值,故此轮弱分类器的阈值 θ 取5.5,分类方法为第二种。
  • α 3
    依然使用如下公式进行计算:
    α 3 = 1 2 log 1 ϵ 3 ϵ 3 = 0.752
  • H ( x ) , P A ( D )
    继续根据如下公式计算 H ( x ) ,此时T为3:
    H ( x ) = t = 1 T α t h t ( x )

    H ( x ) = { 0.321 , 0.321 , 0.321 , 0.526 , 0.526 , 0.526 , 0.978 , 0.978 , 0.978 , 0.321 }

    s i g n ( H ( x ) ) = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }

    当前整个模型的准确率为:
    P A ( D ) = 1

    至此,我们只用了3个弱(基)分类器就在样本集D上得到了100%的准确率,总结一下:
  • 在第t轮被分错的样本,在下一轮更新得到的 D t + 1 ( x ) 中权值将被增大
  • 在第t轮被分对的样本,在下一轮更新得到的 D t + 1 ( x ) 中权值将被减小
  • 所使用的决策树桩总是选取让错误率 ϵ t (所有被 h t 分类错误的样本在 D t ( x ) 中对应的权值之和)最低的阈值来设计基本分类器
  • 最终Adboost得到的 H ( x ) 为: s i g n ( H ( x ) ) = s i g n ( 0.4236 h 1 + 0.6496 h 2 ) + 0.752 h 3

推导

AdaBoost算法可以认为是一种模型为加法模型、损失函数为指数函数、学习算法为前向分步算法的而分类学习方法。在对 α t D t 进行推导前,我们先对加法模型和前向分步算法进行简要介绍。
- 加法模型
加法模型定义如下:

f ( x ) = m = 1 M β m b ( x ; γ m )

其中, b ( x ; γ m ) 为基函数, β m 为基函数的系数, γ m 为基函数的参数。在给定训练数据及损失函数 L ( y , f ( x ) ) 的条件下,学习加法模型 f ( x ) 成为经验风险极小化,即损失函数极小化的问题:
min β m , γ m i = 1 N L ( y i , m = 1 M β m b ( x ; γ m ) )

这通常是一个极其复杂的优化问题,因为需要同时考虑所有基函数与其权重的选取来令目标最小化。

  • 前向分步算法
    前向分步算法对加法模型的求解思路是:如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标,那么就可以简化优化的复杂度。即每步只需优化如下损失函数:
    min β , γ m = 1 M L ( y i , β b ( x ; γ ) )

    这样,前向分步算法将同时求解所有步骤的 β m γ m 的优化问题简化为逐次求解各个 β m γ m 的优化问题。
  • α t 的推导过程
    AdaBoost算法是前向分布加法算法的特例。这时,模型是由基本分类器组成的加法模型,损失函数是指数函数。即此时的基函数为基分类器。AdaBoost的最终分类器为:
    H ( x ) = t = 1 T α t h t ( x )

    损失函数为:
    L ( y , H ( x ) ) = e y H ( x )

    上式即被称为指数损失函数,其中y是样本的真实类别。假设在第t轮迭代时有:
    H t ( x ) = H t 1 ( x ) + α t h t ( x )

    目标是使得到的 α t h t ( x L ( y , H ( x ) ) 最小,即:
    $

猜你喜欢

转载自blog.csdn.net/ppdd_0724/article/details/81283422