1、前言
提升(boosting)是一种常用的统计学习方法,是集成学习的一种。它通过改变训练样本的权重(概率分布),学习多个弱分类器(基本分类器),并将这些分类器线性组合来构成一个强分类器提高分类性能。
2、提升方法AdaBoost算法
强可学习:在概率近似正确(PCA)学习的框架中,一个概念,如果存在一个多项式的学习算法能够学习他,并且正确率很高,那么就称这个概念是强可学习的。
弱可学习:一个概念,如果存在一个多项式的学习算法能够学习它,学习的正确率仅比随机猜测略好,那么就成这个概念是弱可学习的。
一个概念是强可学习的充分必要条件是这个概念是弱可学习的。
提升方法就是从弱学习算法出发,反复学习,得到一系列弱分类器,然后组合这些弱分类器,构成一个强分类器。
2.1AdaBoost算法
AdaBoost提高那些被前一轮弱分类器错误分类样本的权值,降低那些被正确分类样本的权值,然后采用甲醛多数表决的方法组合弱分类器。
(1)初始化训练数据的权值分布,均匀分布D1
(2)使用具有权值分布Dm的训练数据集学习,得到基本分类器Gm(x)
(3)计算Gm在训练数据集上的分类误差率和系数
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)!=y_i)}=\sum_{i=1}^Nw_{mi}I(G_m(x_i)!= y_i)
em=i=1∑NP(Gm(xi)!=yi)=i=1∑NwmiI(Gm(xi)!=yi)
α
m
=
1
2
log
1
−
e
m
e
m
{\alpha}_m=\frac{1}{2}\log{\frac{1-e_m}{e_m}}
αm=21logem1−em
(4)更新训练数据集的权值
Dm+1=(wm+1,)
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
Z_m
Zm是规范化因子
Z
m
=
∑
i
=
1
N
w
m
i
e
x
p
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_m=\sum_{i=1}^N{w_{mi}exp(-{\alpha}_my_iG_m(x_i))}
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
它使Dm+1成为一个概率分布。
重复上述操作M次后得到M个弱分类器,构建线性组合得到最终分类器
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=1∑MαmGm(x))
2.2 前向分步算法
AdaBoost算法也可以理解为模型为加法模型,损失函数为指数函数,学习算法为前向分步算法的二类分类算法。
考虑加法模型
f
(
x
)
=
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
f(x)=\sum_{m=1}^M{{\beta}_mb(x;{\gamma}_m)}
f(x)=∑m=1Mβmb(x;γm),其中
b
(
x
;
γ
m
)
b(x;{\gamma}_m)
b(x;γm)为基函数,
β
\beta
β为基函数的系数,在给定损失函数L(y,f(x))的条件下,学习加法模型就是求解损失函数极小化的问题
m
i
n
:
∑
i
=
1
N
L
(
y
i
,
∑
m
=
1
M
β
m
b
(
x
;
γ
m
)
)
min:\sum_{i=1}^N{L(y_i,\sum_{m=1}^M{{\beta}_mb(x;{\gamma}_m)})}
min:i=1∑NL(yi,m=1∑Mβmb(x;γm))
前向分步算法求解的想法是,从前往后,每一步只学习一个基函数及其系数,优化得到参数
β
γ
\beta \gamma
βγ,更新f(x),逐步逼近优化目标,最终得到加法模型。
3、提升树
提升树模型是加法模型,算法为前向分步算法,基函数为决策树。分类问题决策树是二叉分类数,回归问题决策树是二叉回归树。
第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),通过经验风险最小化确定下一棵决策树的参数
θ
^
m
=
a
r
g
m
i
n
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
θ
m
)
)
\hat{\theta}_m=arg min\sum_{i=1}^N{L(y_i,f_{m-1}(x_i)+T(x_i;{\theta}_m))}
θ^m=argmini=1∑NL(yi,fm−1(xi)+T(xi;θm))
不同问题的提升树学习算法主要区别在于使用的损失函数不同,包括用平方误差损失函数的回归问题,用指数损失函数的分类问题。
3.1二分类问题
只需将AdaBoost算法中的基本分类器限制为二类分类数即可。
3.2回归问题
如果将输入空间划分为J个互不相交的区域,并且在每个区域上确定输出的常量Cj,树可以表示为
T
(
x
;
θ
)
=
∑
j
=
1
J
c
j
I
T(x;\theta)=\sum_{j=1}^J{c_jI}
T(x;θ)=∑j=1JcjI
回归问题提升树使用以下前向分步算法
f
0
(
x
)
=
0
f_0(x)=0
f0(x)=0
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)=\sum_{m=1}^M{T(x;{\theta}_m)}
fM(x)=m=1∑MT(x;θm)
在前向分布算法的第m步,给定当前模型fm-1(x),需求解
θ
^
m
=
a
r
g
m
i
n
∑
i
=
1
N
L
(
y
i
,
f
m
−
1
(
x
i
)
+
T
(
x
i
;
θ
m
)
)
\hat{\theta}_m=arg min\sum_{i=1}^N{L(y_i,f_{m-1}(x_i)+T(x_i;{\theta}_m))}
θ^m=argmini=1∑NL(yi,fm−1(xi)+T(xi;θm)),即第m棵树的参数
当采用平方误差损失函数时
L
(
y
,
f
(
x
)
)
=
(
y
−
f
(
x
)
)
2
=
[
r
−
T
(
x
;
θ
m
)
]
2
L(y,f(x))=(y-f(x))^2=[r-T(x;{\theta}_m)]^2
L(y,f(x))=(y−f(x))2=[r−T(x;θm)]2
r
=
y
−
f
m
−
1
(
x
)
r=y-f_{m-1}(x)
r=y−fm−1(x)
其中r是当前模型拟合数据的残差,每一步都只需要拟合残差学习一个回归树即可
3.3梯度提升(GBDT)
对于平方损失和指数损失函数来说,每一步优化很简单,但是对于一般损失函数而言,每一步优化并不那么容易,梯度提升算法利用最速下降法的近似方法,关键是利用损失函数的负梯度在当前模型的值 r m i = − [ ∂ L ( y , f ( x i ) ∂ f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{mi}=-[\frac{\partial L(y,f(x_i)}{\partial f(x_i)}]_{f(x)=f_{m-1}(x)} rmi=−[∂f(xi)∂L(y,f(xi)]f(x)=fm−1(x)作为回归问题提升树算法中的残差的近似值,拟合一个回归树。