第八章:提升方法
提升方法是将弱学习方法提升为强学习方法的统计学习方法;在分类问题中,提升方法通过反复修改训练数据的权值分布(对比之前的一些算法,基本上都认为所有训练数据的概率分布是一致的),构建一系列基本分类器弱分类器,然后将这些分类器线性组合,即得到强分类器;
Adaboost 算法
-
初始化权值(一般认为刚开始的概率分布均匀)
-
建立 m 个弱分类器:
(1). 按照某一算法(决策树、逻辑回归)对训练集进行分类,得到基本分类器 G m G_m Gm;
(2).计算分类误差率(与权重也有关):(第一步中已经计算出来,因为要选择使得误差分类率(基尼指数、信息熵)最低的那一个分类器)e m = ∑ i = 1 N P ( G m ( x i ) ≠ y i ) = ∑ i = 1 N w m i I ( G m ( x i ) ≠ y i ) e_m=\displaystyle\sum_{i=1}^NP(G_m(x_i)\neq{y_i})=\sum_{i=1}^Nw_{mi}I(G_m(x_i)\neq{y_i}) em=i=1∑NP(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).更新各个训练样本权值 w m i w_{mi} wmiw m + 1 , i = w m , i Z m e x p ( − α m y i G m ( x i ) ) , i = 1 , 2 , . . . , n w_{m+1,i}=\frac{w_{m,i}}{Z_m}exp(-\alpha_my_iG_m(x_i)),i=1,2,...,n wm+1,i=Zmwm,iexp(−αmyiGm(xi)),i=1,2,...,n
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\displaystyle\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi)) 为规范化因子,使得 w 构成一个概率分布;
-
构建基本分类器的线性组合
Adaboost算法:模型为‘加法模型’;损失函数(策略)为‘指数函数’;学习方法为前向分步算法时的二类学习方法;
而提升树算法则是基函数为决策树的提升方法;
Adaboost的训练误差分析
Adaboost算法的最基本的性质是它能在学习的过程中不断减少训练误差,即在训练数据上的分类误差率:
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i = 1 N e x p ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N}\displaystyle\sum_{i=1}^NI(G(x_i)\neq{y_i})\leq{\frac{1}{N}\sum_{i=1}^Nexp(-y_if(x_i))=\prod_mZ_m} N1i=1∑NI(G(xi)=yi)≤N1i=1∑Nexp(−yif(xi))=m∏Zm
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\displaystyle\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi)) 为规范化因子
特别地,在二类分类问题中:
Z m ≤ e x p ( − 2 ∑ m = 1 M γ m 2 ) , γ m = 1 2 − e m ; Z_m\leq{exp(-2\displaystyle\sum_{m=1}^{M}\gamma_m^2}),\gamma_m=\frac{1}{2}-e_m; Zm≤exp(−2m=1∑Mγm2),γm=21−em;
上式表面,Adaboost算法的分类误差率是以 指 数 速 率 \color{red}{指数速率} 指数速率下降的;
前向分步算法
前项分步算法是一种求解 加 法 模 型 \color{red}{加法模型} 加法模型参数(基函数的参数和系数)的最优化方法:
基本思想:
因为学习的是加法模型,如果能够从前向后,每一步只学习一个基函数及其系数,逐步逼近优化目标函数式(
每
次
使
一
个
基
函
数
的
损
失
函
数
值
最
小
\color{red}{每次使一个基函数的损失函数值最小}
每次使一个基函数的损失函数值最小):
( β m , γ m ) = a r g min β , γ ∑ i = 1 N L ( y i , β ( x i , γ ) ) ; (\beta_m,\gamma_m)=arg\displaystyle\min_{\beta,\gamma}\sum_{i=1}^NL(y_i,\beta(x_i,\gamma)); (βm,γm)=argβ,γmini=1∑NL(yi,β(xi,γ));
f ( x ) = ∑ m = 1 M β m b ( x ; γ m ) ; f(x)=\displaystyle\sum_{m=1}^M\beta_mb(x;\gamma_m); f(x)=m=1∑Mβmb(x;γm);
提升树算法
提升树算法就是以 分 类 树 或 回 归 树 为 基 本 分 类 器 \color{red}{分类树或回归树为基本分类器} 分类树或回归树为基本分类器的提升方法。
分类问题只需把相应的基本分类器改成决策树就行了,下面给出回归 某 一 段 区 间 内 对 输 出 Y 的 预 测 , 区 别 于 对 样 本 的 分 类 ( y = 0 或 1 ) \color{red}{某一段区间内对输出 Y 的预测,区别于对样本的分类(y=0或1)} 某一段区间内对输出Y的预测,区别于对样本的分类(y=0或1)提升树的算法:
-
初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0;
-
对于 m = 1,2,…M:
- 树可以表示为: T ( x ; Θ ) = ∑ j = 1 J c j I ( x ∈ R j ) , R j T(x;\Theta)=\displaystyle\sum_{j=1}^Jc_jI(x\in{R_j}),R_j T(x;Θ)=j=1∑JcjI(x∈Rj),Rj是被分的某一个输入空间, c j c_j cj是该子集的固定输出(由属于该子集的 训 练 数 据 输 出 y 的 均 值 \color{red}{训练数据输出y的均值} 训练数据输出y的均值得来,具体可参见第五章回归树模型)
- 计算残差: r m i = y i − f m − 1 ( x i ) , i = 1 , 2 , . . . , N r_{mi}=y_i-f_{m-1}(x_i),i=1,2,...,N rmi=yi−fm−1(xi),i=1,2,...,N
- 拟合残差(平方误差)学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θm)(m=0的时候,即拟合原始的输出值得到树 T ( x , Θ 1 T(x,\Theta_1 T(x,Θ1)
- 更新 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 ( x ) = ∑ m = 1 M T ( x ; Θ m ) f_M(x)=\displaystyle\sum_{m=1}^MT(x;\Theta_m) fM(x)=m=1∑MT(x;Θm)
梯度提升
梯度提升是针对那些优化损失函数不是那么容易的问题(不太好计算,平方误差损失函数就很好计算), 用 损 失 函 数 在 当 前 模 型 的 负 梯 度 作 为 回 归 问 题 提 升 树 算 法 中 残 差 的 近 似 值 \color{red}{用损失函数在当前模型的负梯度作为回归问题提升树算法中残差的近似值} 用损失函数在当前模型的负梯度作为回归问题提升树算法中残差的近似值
r m i = − [ L ( y i , f ( x i ) ] f ( x i ) ′ , f ( x i ) = f m − 1 ( x ) r_{mi}=-[L(y_i,f(x_i)]'_{f(x_i)},f(x_i)=f_{m-1}(x) rmi=−[L(yi,f(xi)]f(xi)′,f(xi)=fm−1(x)