提升方法
笔记摘要
- 在PAC(概率近似正确(PAC, Probably approximately correct))学习框架下,一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
- 提升方法的两个问题
- 在每一轮如何改变训练数据的权值或概率分布
- 如何将弱分类器组合成一个强分类器
- Adaboost的解决方案:
- 提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类的样本的权值
- 加权多数表决的方法,加大分类误差率小的弱分类器的权值,减小分类误差率大的弱分类器的权值
AdaBoost算法
- 输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x ∈ X ⊆ R n T=\{(x_1,y_1), (x_2,y_2),...,(x_N,y_N)\}, x\in X\sube \R^n T={(x1,y1),(x2,y2),...,(xN,yN)},x∈X⊆Rn, 弱学习算法
- 输出:最终分类器 G ( x ) G(x) G(x)
- 步骤
- 初始化训练数据的权值分布 D 1 = ( w 11 , ⋯   , w 1 i , ⋯   , w 1 N , w 1 i = 1 N ) D_1=(w_{11},\cdots,w_{1i},\cdots,w_{1N},w_{1i}=\frac{1}{N}) D1=(w11,⋯,w1i,⋯,w1N,w1i=N1)
- m = 1,2,
⋯
\cdots
⋯,M
( a ) 使用具有权值分布 D m D_m Dm的训练数据集学习,得到基本的分类器
G m ( x ) : X → { − 1 , + 1 } G_m(x):X→\{-1,+1\} Gm(x):X→{−1,+1}
( b ) 计算 G m ( x ) G_m(x) Gm(x)在训练集上的分类误差率
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=\sum_{i=1}^{N}P(G_m(x_i)\not= y_i)=\sum_{i=1}^{N}w_{mi}I(G_m(x_i)\not=y_i) em=i=1∑NP(Gm(xi)̸=yi)=i=1∑NwmiI(Gm(xi)̸=yi)
( c ) 计算 G m ( x ) G_m(x) Gm(x)的系数
α m = 1 2 l o g 1 − e m e m \alpha_m=\frac{1}{2}log\frac{1-e_m}{e_m} αm=21logem1−em
( d ) 更新训练数据集的权值分布
w m + 1 , i = w m i Z m e x p ( − α m y i G m ( x i ) ) w_{m+1,i}=\frac{w_{mi}}{Z_m}exp(-\alpha_my_iG_m(x_i)) wm+1,i=Zmwmiexp(−αmyiGm(xi))
Z m = ∑ i = 1 N w m i e x p ( − α m y i G m ( x i ) ) Z_m=\sum_{i=1}^Nw_{mi}exp(-\alpha_my_iG_m(x_i)) Zm=i=1∑Nwmiexp(−αmyiGm(xi)) - f ( x ) = ∑ m = 1 M α m G m ( x ) f(x)=\sum_{m=1}^M\alpha_mG_m(x) f(x)=∑m=1MαmGm(x)
- 最终分类器 G ( x ) = s i g n ( f ( x ) ) = s i g n ( ∑ m = 1 M α m G m ( x ) ) G(x)=sign(f(x))=sign(\sum_{m=1}^M\alpha_mG_m(x)) G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
- 误分类样本在下一轮学习中起更大的作用。不改变所给的训练数据,而不断改变训练数据权值的分布,使得训练数据在基本分类器的学习中起不同的作用, 这是AdaBoost的一个特点
- 利用基本分类器的线性组合构建最终分类器使AdaBoost的另一特点
AdaBoost算法的训练误差分析
- AdaBoost算法最终分类器的训练误差界为
1 N ∑ i = 1 N I ( G ( x i ) ≠ y i ) ≤ 1 N ∑ i exp ( − y i f ( x i ) ) = ∏ m Z m \frac{1}{N}\sum\limits_{i=1}\limits^N I(G(x_i)\neq y_i)\le\frac{1}{N}\sum\limits_i\exp(-y_i f(x_i))=\prod\limits_m Z_m N1i=1∑NI(G(xi)̸=yi)≤N1i∑exp(−yif(xi))=m∏Zm
这个的意思就是说指数损失是0-1损失的上界,这个上界使通过递推得到的,是归一化系数的连乘
AdaBoost算法的解释
- 模型为加法模型, 损失函数为指数函数, 学习算法为前向分步算法时的二分类学习方法。根据这些条件可以推导出AdaBoost
前向分步算法
-
输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) , x i ∈ X ⊆ R n , y i ∈ { − 1 , 1 } T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in X \sube \R^n, y_i\in \{-1, 1\} T=(x1,y1),(x2,y2),...,(xN,yN),xi∈X⊆Rn,yi∈{−1,1}, 损失函数 L ( y , f ( x ) ) L(y, f(x)) L(y,f(x)); 基函数集合 { b ( x ; γ ) } \{b(x;\gamma)\} {b(x;γ)}
-
输出:加法模型 f ( x ) f(x) f(x)
-
步骤:
-
初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
-
对 m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,⋯,M, 极小化损失函数
( β m , γ m ) = arg min β , γ ∑ i = 1 N L ( y i , f m − 1 ( x i ) + β b ( x i ; γ ) ) (\beta_m,\gamma_m)=\arg\min \limits_ {\beta,\gamma}\sum_{i=1}^NL(y_i, f_{m-1}(x_i)+\beta b(x_i;\gamma)) (βm,γm)=argβ,γmini=1∑NL(yi,fm−1(xi)+βb(xi;γ)) -
更新
f m ( x ) = f m − 1 ( x ) + β m b ( x ; γ m ) f_m(x)=f_{m-1}(x)+\beta _mb(x;\gamma_m) fm(x)=fm−1(x)+βmb(x;γm) -
得到加法模型
f ( x ) = f M ( x ) = ∑ m = 1 M β m b ( x ; γ m ) f(x)=f_M(x)=\sum_{m=1}^M\beta_m b(x;\gamma_m) f(x)=fM(x)=m=1∑Mβmb(x;γm)
提升树
- 提升树是以分类树或回归树为基本分类器的提升方法,被认为是统计学习中性能最好的方法之一
- 提升方法实际采用加法模型(即基函数的线性组合)与前向分步算法
提升树模型
- 以决策树为基函数的提升方法称为提升树
- 提升树模型可以表示成决策树的加法模型
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 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) , x i ∈ X ⊆ R n , y i ∈ Y ⊆ R T={(x_1,y_1),(x_2,y_2),...,(x_N, y_N)}, x_i \in X \sube \R^n,y_i \in Y \sube R T=(x1,y1),(x2,y2),...,(xN,yN),xi∈X⊆Rn,yi∈Y⊆R
-
输出:提升树 f M ( x ) f_M(x) fM(x)
-
步骤:
- 初始化 f 0 ( x ) = 0 f_0(x)=0 f0(x)=0
- 对
m
=
1
,
2
,
…
,
M
m=1,2,\dots,M
m=1,2,…,M
- 计算残差
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,\dots,N rmi=yi−fm−1(xi),i=1,2,…,N - 拟合残差 r m i r_{mi} rmi学习一个回归树,得到 T ( x ; Θ m ) T(x;\Theta_m) T(x;Θ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 ( x ) = f M ( x ) = ∑ m = 1 M T ( x ; Θ m ) f(x)=f_M(x)=\sum_{m=1}^MT(x;\Theta_m) f(x)=fM(x)=m=1∑MT(x;Θm)
梯度提升(GBDT)
输入: 训练数据集
T
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
,
(
x
N
,
y
N
)
,
x
i
∈
x
⊆
R
n
,
y
i
∈
y
⊆
R
T={(x_1,y_1),(x_2,y_2),\dots,(x_N,y_N)}, x_i \in x \sube \R^n, y_i \in y \sube \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)
步骤:
-
初始化
f 0 ( x ) = arg min c ∑ i = 1 N L ( y i , c ) f_0(x)=\arg\min\limits_c\sum_{i=1}^NL(y_i, c) f0(x)=argcmini=1∑NL(yi,c) -
对 m = 1 , 2 , ⋯   , M m=1,2,\cdots,M m=1,2,⋯,M
( a )对
i
=
1
,
2
,
⋯
 
,
N
i=1,2,\cdots,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}=-\left[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}\right]_{f(x)=f_{m-1}(x)}
rmi=−[∂f(xi)∂L(yi,f(xi))]f(x)=fm−1(x)
( b )对
r
m
i
r_{mi}
rmi拟合一个回归树,得到第
m
m
m棵树的叶节点区域
R
m
j
,
j
=
1
,
2
,
…
,
J
R_{mj}, j=1,2,\dots,J
Rmj,j=1,2,…,J
( c ) 对
j
=
1
,
2
,
…
,
J
j=1,2,\dots,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}=\arg\min_c\sum_{xi\in R_{mj}}L(y_i,f_{m-1}(x_i)+c)
cmj=argcminxi∈Rmj∑L(yi,fm−1(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)=fm−1(x)+j=1∑JcmjI(x∈Rmj) -
得到回归树
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=1∑Mj=1∑JcmjI(x∈Rmj)
习题解答
-
某公司招聘职员考查身体、业务能力、发展潜力这 3 项。身体分为合格1、不合格0两级,业务能力和发展潜力分为上1、中2、下3三级分类为合格1 、不合格-1两类。已知10个人的数据,如下表所示。假设弱分类器为决策树桩。.试用AdaBoost算法学习一个强分类器。
代码传送门 -
比较支持向量机、 AdaBoost 、逻辑斯谛回归模型的学习策略与算法。
- 支持向量机的学习策略是当训练数据近似线性可分时,通过软间隔最大化,学习一个线性分类器,其学习算法是SMO序列最小最优化算法
- AdaBoost的学习策略是通过极小化加法模型的指数损失,得到一个强分类器,其学习算法是前向分步算法
- 逻辑斯谛回归模型的学习策略是在给定的训练数据条件下对模型进行极大似然估计或正则化的极大似然估计,其学习算法可以是改进的迭代尺度算法(IIS),梯度下降法,牛顿法以及拟牛顿法