关于第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 xi∈X⊂Rn,输出最后分类器 G ( x ) G(x) G(x)
初始化训练数据的权重分布 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为第一个弱分类器的每个数据的权重
对 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=1∑NwmiI(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=21logem1−em这里的对数是自然对数。
(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。
构建基本分类器的线性组合 f ( x ) = ∑ m = 1 M a m G m ( x ) f(x)=\sum_{m=1}^Ma_mG_m(x) f(x)=m=1∑MamGm(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=1∑MamGm(x))
提升树是以分类或回归树为基本分类的提升方法。提升树被认为是统计学习中性能最好的方法之一。
提升树方法实际采用加法模型(即基函数的线性组合)与前向分布算法,以决策树为基函数的提升方法称为提升树。对分类问题是二叉分类树,对回归问题决策树是二叉回归树。提升树模型可以表示为决策树的加法模型: f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1∑MT(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)=fm−1(x)+T(x;Θm)其中, f m − 1 ( x ) f_{m-1}(x) fm−1(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=1∑NL(yi,fm−1(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)},xi∈X⊂Rn,yi∈Y⊂R
输出:提升树 f M ( x ) f_M(x) fM(x)
提升树利用加法模型与前向分歩算法实现学习的优化过程。当损失函数是平方损失和指数损失函数时,每一步优化是很简单的。但对一般损失函数而言,往往每一步优化并不那么容易。针对这一问题,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)=fm−1(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)},xi∈X⊂Rn,yi∈Y⊂R,损失函数 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X))
输出:提升树 f ^ ( x ) \hat{f}(x) f^(x)