提升方法

提升方法

  • AdaBoost算法
  • 提升树
    • 提升树模型
    • 提升树算法
    • 梯度提升

在分类问题中,提升方法通过 改变样本的权重学习多个分类器,并 将这些分类器进行线性组合提高分类性能。这样做的理论基础是强可学习与弱可学习是等价的,也就是说,在PAC学习的框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。这样一来,问题便成为了,在学习中,如果 已经发现了"弱可学习算法”,那么能否将它提升为"强可学习"。大家知道,发现弱可学习算法通常要比发现强可学习算法容易得多。提升方法就是 从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。大多数的提升方法都是 改变训练数据的概率分布,针对不 同的训练数据分布调用弱可学习算法学习一系列弱分类器。如此提升方法要解决一下两个问题:

  1. 在每一轮如何改变训练数据的权值或概率分布
  2. 如何将弱分类器组合成一个强分类器

AdaBoost算法

关于第1个问题,AdaBoost的做法是,提高那些被前一轮弱分类错误分类样本的权值而降低那些被正确分类样本的权值。这样做的目的是,增加没有被正确分类的样本的权重,可以在接下来的分类过程中得到更多的关注,提高对这些样本的分类能力。对于第2个问题,即弱分类器的组合,AdaBoost采用加权多数表决的方法。具体地,加大分类误差小的弱分类器的权值,使其在表决中起较大的作用,减小分类误差率大的弱分类器的权值,使其在表决过程中起较小的作用。AdaBoost的具体实现如下:

输入训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \rbrace T={(x1,y1),(x2,y2),...,(xN,yN)}其中 x i ∈ X ⊂ R n x_i \in X \subset R^n xiXRn,输出最后分类器 G ( x ) G(x) G(x)

  1. 初始化训练数据的权重分布 D 1 = ( w 11 , . . . , w i i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N D_1=(w_{11},...,w_{ii},...,w_{1N}),\quad w_{1i}=\frac{1}{N},\quad i=1,2,...,N D1=(w11,...,wii,...,w1N),w1i=N1,i=1,2,...,N其中 D 1 D_1 D1为第一个弱分类器的每个数据的权重

  2. M = 1 , 2 , . . . , m M=1,2,...,m M=1,2,...,m为弱分类器的索引
    (1).使用权重分布 D m D_m Dm的训练数据集,得到基本分类器 G m ( x ) : χ → { − 1 , + 1 } G_m(x):\chi \rightarrow \lbrace -1,+1\rbrace Gm(x):χ{1,+1}
    (2).计算 G m ( x ) G_m(x) Gm(x)(第 m m m个弱分类器)在训练数据集上的分类误差率 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)
    (3).计算 G m ( x ) G_m(x) Gm(x)的系数 a m = 1 2 l o g 1 − e m e m a_m=\frac{1}{2}log\frac{1-e_m}{e_m} am=21logem1em这里的对数是自然对数。
    (4).更新训练数据集的权重分布 D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N ) D_{m+1}=(w_{m+1,1},...,w_{m+1,i},...,w_{m+1,N}) Dm+1=(wm+1,1,...,wm+1,i,...,wm+1,N) w m + 1 , i = w m i Z m e x p ( − a m y i G m ( x i ) ) , i = 1 , 2 , . . . , N w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-a_my_iG_m(x_i)),\quad i=1,2,...,N wm+1,i=Zmwmiexp(amyiGm(xi)),i=1,2,...,N这里, Z m Z_m Zm是规范化因子 Z m = ∑ i = 1 N w m i e x p ( − a m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}exp(-a_my_iG_m(x_i)) Zm=i=1Nwmiexp(amyiGm(xi))如此它使 D m + 1 D_{m+1} Dm+1成为一个概率分布,即 ∑ i = 1 N w m i = 1 \sum_{i=1}^Nw_{mi}=1 i=1Nwmi=1

  3. 构建基本分类器的线性组合 f ( x ) = ∑ m = 1 M a m G m ( x ) f(x)=\sum_{m=1}^Ma_mG_m(x) f(x)=m=1MamGm(x)得到最终分类器 G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M a m G m ( x ) ) G(x)=sign(f(x))=sign(\sum_{m=1}^Ma_mG_m(x)) G(x)=sign(f(x))=sign(m=1MamGm(x))

提升树

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

提升树模型

提升树方法实际采用加法模型(即基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法称为提升树。对分类问题是二叉分类树,对回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1MT(x;Θm)其中, T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)表示决策树; Θ m \Theta_m Θm为决策树的参数; M M M为树的个数。

提升树算法

提升树算法采用前向分布算法。首先确定初始提升树 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0,第 m m m步的模型是 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)其中, f m − 1 ( x ) f_{m-1}(x) fm1(x)为当前模型,通过经验风险最小化确定下一棵决策树的参数 Θ m \Theta_m Θm Θ m ^ = arg min ⁡ Θ m ∑ i = 1 N L ( y i , f m − 1 ( x i ) + T ( x i ; Θ m ) ) \hat{\Theta_m}=\argmin_{\Theta_m}\sum_{i=1}^NL(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) Θm^=Θmargmini=1NL(yi,fm1(xi)+T(xi;Θm))下面讨论不同问题的提升树学习算法,其主要区别在于使用的损失函数不同。包括用平方误差损失函数的回归问题,用指数损失函数的分类问题,以及一般损失函数的一般决策问题。
回归问题的提升树算法如下:
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊂ R n , y i ∈ Y ⊂ R T=\lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \rbrace,\quad x_i \in X \subset R^n,\quad y_i \in Y \subset R T={(x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yiYR
输出:提升树 f M ( x ) f_M(x) fM(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
    (1).计算残差 r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{mi}=y_i-f_{m-1}(x_i),\quad i=1,2,...,N rmi=yifm1(xi),i=1,2,...,N
    (2).拟合残差 r m i r_{mi} rmi(相当于 y i ← r m i y_i \leftarrow r_{mi} yirmi,确定了拟合过程中选择的最优特征以及最优切分点)学习回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)
    (3).更新 f m ( x ) = f m − 1 ( x ) + T ( x ; Θ m ) f_m(x)=f_{m-1}(x)+T(x;\Theta_m) fm(x)=fm1(x)+T(x;Θm)
  3. 得到回归提升树 f M ( x ) = ∑ m = 1 M T ( s ; Θ m ) f_M(x)=\sum_{m=1}^MT(s;\Theta_m) fM(x)=m=1MT(s;Θm)

梯度提升

提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,Freidman提出了梯度提升算法。其关键是利用损失函数的负梯度在当前模型的值 − [ ∂ L ( y , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) -[\frac{\partial L(y,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} [f(xi)L(y,f(xi))]f(x)=fm1(x)作为回归问题提升树算法中的残差的近似值,拟合一个回归树。
梯度提升算法如下:
输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ X ⊂ R n , y i ∈ Y ⊂ R T=\lbrace (x_1,y_1),(x_2,y_2),...,(x_N,y_N) \rbrace,\quad x_i \in X \subset R^n,\quad y_i \in Y \subset R T={(x1,y1),(x2,y2),...,(xN,yN)},xiXRn,yiYR,损失函数 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X))
输出:提升树 f ^ ( x ) \hat{f}(x) f^(x)

  1. 初始化 f 0 ( x ) = arg min ⁡ c ∑ i = 1 N L ( y i , x ) f_0(x)=\argmin_c\sum_{i=1}^NL(y_i,x) f0(x)=cargmini=1NL(yi,x)
  2. m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M
    (1). i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,计算 r m i = − [ ∂ L ( y i , f ( x i ) ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y_i,f(x_i))}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=[f(xi)L(yi,f(xi))]f(x)=fm1(x)
    (2).对 r m i r_{mi} rmi拟合一个回归树,得到第 m m m棵树的叶节点区域 R m j , j = 1 , 2 , . . . , J R_{mj},\quad j=1,2,...,J Rmjj=1,2,...,J
    (3).对 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J,计算 c m j = arg min ⁡ c ∑ x i ∈ R m j L ( y i , f m − 1 ( x i ) + c ) c_{mj}=\argmin_c\sum_{x_i \in R_{mj}}L(y_i,f_{m-1}(x_i)+c) cmj=cargminxiRmjL(yi,fm1(xi)+c) f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m j I ( x ∈ R m j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{mj}I(x \in R_{mj}) fm(x)=fm1(x)+j=1JcmjI(xRmj)
    (4).更新
  3. 得到回归树 f ^ ( x ) = f M ( x ) = ∑ m = 1 M ∑ j = 1 J c m j I ( x ∈ R m j ) \hat{f}(x)=f_M(x)=\sum_{m=1}^M\sum_{j=1}^Jc_{mj}I(x \in R_{mj}) f^(x)=fM(x)=m=1Mj=1JcmjI(xRmj)

你可能感兴趣的:(机器学习)