机器学习入门之《统计学习方法》笔记整理——提升方法

  提升方法的思路是综合多个分类器,得到更准确的分类结果。 说白了就是“三个臭皮匠顶个诸葛亮”。


目录


提升方法

提升方法AdaBoost算法

  提升方法思路比较简单,它意在通过改变训练样本之间相对的权重,从而学习出多个分类器,并将这些分类器进行线性组合,从而提高分类的性能。
  从以上思路可以看出,提升方法将一个复杂的任务分配给多个专家进行判断,并且对判断的结果进行综合,这样做要比只让一个专家来判断要好,毕竟大家说好才是真的好。

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

算法 (AdaBoost)

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, x i X = R n y i Y = { 1 , + 1 } ,弱学习算法;

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

(1) 初始化训练数据的权值分布

D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2... , N

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

  (a) 使用具有权值分布 D m 的训练数据集学习,得到基本分类器

G m ( x ) : X { 1 , + 1 }

  (b) 计算 G m ( x ) 在训练数据集上的分类误差率

e m = P ( G m ( x i ) y i ) = i = 1 N w m i I ( G m ( x i ) y i )

  (c) 计算 G m ( x ) 的系数

α m = 1 2 log 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 = w m i Z m exp ( α m y i G m ( x i ) ) i = 1 , 2 , . . . , N

也可以写成

w m + 1 , 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

这里, Z m 是规范化因子

Z m = i = 1 N w m i exp ( α m y i G m ( x i ) )

它使 D m + 1 成为一个概率分布。

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

f ( x ) = m = 1 M α m G m ( x )

得到最终分类器

G ( x ) = s i g n ( f ( x ) ) = s i g n ( m = 1 M α m G m ( x ) )

  从以上算法可以看到:最开始步骤1,我们假设了样本具有均匀的权重分布,它将产生一个基本分类器 G 1 ( x ) 。步骤2是一个m从1到M的循环过程,每一次循环都可以产生一个弱分类器。

  1. 分类误差率实际上就是被误分类点的权值之和。
  2. 在计算当前弱分类器在线性组合中的系数时,当 e 0.5 时, α 0 ,并且随着e的减小而增大,正好印证了需要使误差率小的弱分类器的权值更大这个事实。
  3. 每一个样本的权值 w ,都与它原来的标签
    y i
    以及预测的标签 G m ( x i ) 有关,当预测正确即它们同号时,exp指数是一个负值,这样就会减小原来样本点的权重;当预测不正确即它们异号时,exp指数是一个正值,它会增加当前样本点的权重。这正印证了我们需要使被误分类样本的权值更大这个事实。

AdaBoost算法的解释

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

前向分步算法

  考虑加法模型(additive model)

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

  其中, b ( x ; γ m ) 为基函数, γ m 为基函数的参数, β m 为基函数的系数。显然, f ( x ) = m = 1 M β m b ( x ; γ m ) 是一个加法模型。

  在给定训练数据及损失函数的条件下,学习加法模型 f ( x ) 成为经验风险极小化即损失函数极小化问题:

min β m , γ m i = 1 N L ( y i , m = 1 M β m b ( x i ; γ m ) )

  通常这是一个复杂的优化问题。前向分步算法(forward stage wise algorithm)求解这一优化问题的想法是:因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式,那么就可以简化优化的复杂度。具体地,每步只需优化如下损失函数:

min β , γ i = 1 N L ( y i , β b ( x i ; γ ) )

算法 (前向分步算法)

输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . ( x N , y N ) } ,损失函数 L ( y , f ( x ) ) 和基函数的集合 { b ( x ; γ ) }

输出:加法模型 f ( x ) .

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

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

  (a) 极小化损失函数

( β m , γ m ) = arg min β , γ i = 1 N L ( y i , f m 1 ( x i ) + β b ( x i ; γ ) )

得到参数 β m , γ m

  (b) 更新

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

(3) 得到加法模型

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

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

前向分步算法与AdaBoost

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

提升树

  提升树是以分类树或回归树为基本分类器的提升方法。提升树被认为是统计学习中性能最好的方法之一。

提升树模型

  提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法。以决策树为基函数的提升方法称为提升树(boosting tree)。对分类问题决策树是二叉分类树,对回归问题决策树是二叉回归树。在原著例题中看到的基本分类器,可以看作是由一个根结点直接连接两个叶结点的简单决策树,即所谓的决策树桩(decision stump)。提升树模型可以表示为决策树的加法模型:

f M ( x ) = m = 1 M T ( x ; Θ m )

其中, T ( x ; Θ m ) 表示决策树; Θ m 为决策树的参数; M 为树的个数。

提升树算法

  提升树算法采用前向分步算法。首先确定初始提升树 f m ( x ) = 0 ,第 m 歩的模型是

f m ( x ) = f m 1 ( x ) + T ( x ; Θ m )

其中, f m 1 ( x ) 为当前模型,通过经验风险极小化确定下一棵决策树的参数 Θ m

Θ ^ m = arg min Θ m i = 1 N L ( y i , f m 1 ( x i ) + T ( x i ; Θ m ) )

  由于树的线性组合可以很好地拟合训练数据,即使数据中的输入与输出之间的关系很复杂也是如此,所以提升树是一个髙功能的学习算法。

  不同问题有大同小异的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及用一般损失函数的一般决策问题。

  对于二类分类问题,提升树算法只需将AdaBoost算法中的基本分类器限制为二类分类树即可,可以说这时的提升树算法是AdaBoost算法的特殊情况。

算法 (回归问题的提升树算法)

输入:线性可分训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, x i X R n y i Y R

输出:提升树 f M ( x ) .

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

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

  (a) 计算残差

r m i = y i f m 1 ( x i ) , i = 1 , 2 , . . . , N

  (b) 拟合残差 r m i 学习一个回归树,得到 T ( x ; Θ m )

  (c) 更新 f m ( x ) = f m 1 ( x ) + T ( x ; Θ m )

(3) 得到回归问题提升树

f M ( x ) = m = 1 M T ( x ; Θ m )

算法 (梯度提升算法)

输入:线性可分训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ,其中, x i X R n y i Y R ,损失函数 L ( y , f ( x ) )

输出:回归树 f ^ ( x ) .

(1) 初始化

f 0 ( x ) = arg min c i = 1 N L ( y i , c )

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

  (a) 对 i = 1 , 2 , . . . , N ,计算

r m i = [ L ( y i , f ( x i ) ) f ( x i ) ] f ( x ) = f m 1 ( x )

  (b) 对 r m i 拟合一个回归树,得到第 m 棵树的叶节点区域 R m j , j = 1 , 2 , . . . , J

  (c) 对 j = 1 , 2 , . . . , J ,计算

c m j = arg min c x i R m j L ( y i , f m 1 ( x i ) + c )

  (d) 更新 f m ( x ) = f m 1 ( x ) + j = 1 J c m j I ( x R m j )

(3) 得到回归树

f ^ ( x ) = f M ( x ) = m = 1 M j = 1 J c m j I ( x R m j )

参考文章

  1. 提升方法
  2. 《统计学习方法(李航)》讲义 第08章 提升方法
  3. 提升方法及AdaBoost

猜你喜欢

转载自blog.csdn.net/qq_30611601/article/details/79490290
今日推荐