Adboost
原理
Adboost是利用前一轮弱学习器的误差率来更新训练集的权重,这样一轮轮的迭代下去,简单的说是Boosting框架+任意基学习器算法+指数损失函数。它是加法模型,学习的是前向分布学习算法,损失函数为指数函数的分类问题;另外,其基分类器可以为任何学习器,使用最广泛的是决策树和神经网络;对于决策树,使用CART分类回归树
目标函数
损失函数为指数函数,即定义损失函数为:
L
=
a
r
g
m
i
n
⏟
a
,
G
∑
i
=
1
m
e
x
p
(
−
y
i
f
k
(
x
)
)
−
−
−
(
1
)
L = \underset{a,G}{ \underbrace{arg min}}\sum_{i=1}^mexp(-y_if_k(x)) ---(1)
L=a,G
argmini=1∑mexp(−yifk(x))−−−(1)
其中,
f
k
(
x
)
f_k(x)
fk(x)为第k轮的学习器
f
k
(
x
)
=
∑
i
=
1
k
α
i
G
i
(
x
)
f_{k}(x) = \sum\limits_{i=1}^{k}\alpha_iG_{i}(x)
fk(x)=i=1∑kαiGi(x), G(x)为基分类器,
α
\alpha
α为每个基分类器的权重,m为样本数。
建立第k个基分类器时:
(
α
k
,
G
k
(
x
)
)
=
a
r
g
m
i
n
⏟
α
,
G
∑
i
=
1
m
e
x
p
[
(
−
y
i
)
(
f
k
−
1
(
x
)
+
α
G
(
x
)
)
]
=
a
r
g
m
i
n
⏟
α
,
G
∑
i
=
1
m
w
k
i
′
e
x
p
[
−
y
i
α
G
(
x
)
]
(\alpha_k, G_k(x)) = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}exp[(-y_i) (f_{k-1}(x) + \alpha G(x))] \\ = \underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}w_{ki}'exp[-y_i\alpha G(x)]
(αk,Gk(x))=α,G
argmini=1∑mexp[(−yi)(fk−1(x)+αG(x))]=α,G
argmini=1∑mwki′exp[−yiαG(x)]
注意此时对于单个基分类器
G
k
(
x
)
G_k(x)
Gk(x)而言,对任意的
α
\alpha
α有
G
k
(
x
)
=
a
r
g
m
i
n
⏟
G
∑
i
=
1
m
w
k
i
′
I
(
y
i
≠
G
(
x
i
)
)
−
−
−
(
2
)
G_k(x) = \underbrace{arg\;min\;}_{G}\sum\limits_{i=1}^{m}w_{ki}'I(y_i \neq G(x_i)) --- (2)
Gk(x)=G
argmini=1∑mwki′I(yi=G(xi))−−−(2)
继续公式(adboost-1)
a
r
g
m
i
n
⏟
α
,
G
∑
i
=
1
m
w
k
i
′
e
x
p
[
−
y
i
α
G
(
x
)
]
=
a
r
g
m
i
n
⏟
α
∑
y
i
=
G
k
w
k
i
′
e
−
α
+
∑
y
i
≠
G
k
w
k
i
′
e
α
=
(
e
α
−
e
−
α
)
∑
i
=
1
m
w
k
i
′
I
(
y
i
≠
G
(
x
i
)
)
+
e
−
α
∑
i
=
1
m
w
k
i
′
\underbrace{arg\;min\;}_{\alpha, G}\sum\limits_{i=1}^{m}w_{ki}'exp[-y_i\alpha G(x)]\\ =\underbrace{arg\;min\;}_{\alpha}\sum\limits_{y_i=G_k}w_{ki}'e^{-\alpha} + \sum\limits_{y_i\neq G_k}w_{ki}'e^{\alpha}\\ =(e^{\alpha}-e^{-\alpha})\sum_{i=1}^mw_{ki}'I(y_i \neq G(x_i)) + e^{-\alpha }\sum_{i=1}^mw_{ki}'
α,G
argmini=1∑mwki′exp[−yiαG(x)]=α
argminyi=Gk∑wki′e−α+yi=Gk∑wki′eα=(eα−e−α)i=1∑mwki′I(yi=G(xi))+e−αi=1∑mwki′
将求得的
G
k
(
x
)
G_k(x)
Gk(x)代入上式,并对
α
\alpha
α求导,使之为0,即得到
α
k
=
1
2
l
o
g
1
−
e
k
e
k
\alpha_k = \frac{1}{2}log\frac{1-e_k}{e_k}
αk=21logek1−ek
其中,
e
k
e_k
ek即为我们前面的分类误差率。
e
k
=
∑
i
=
1
m
w
k
i
′
I
(
y
i
≠
G
(
x
i
)
)
∑
i
=
1
m
w
k
i
′
=
∑
i
=
1
m
w
k
i
I
(
y
i
≠
G
(
x
i
)
)
e_k = \frac{\sum\limits_{i=1}^{m}w_{ki}^{'}I(y_i \neq G(x_i))}{\sum\limits_{i=1}^{m}w_{ki}^{'}} = \sum\limits_{i=1}^{m}w_{ki}I(y_i \neq G(x_i))
ek=i=1∑mwki′i=1∑mwki′I(yi=G(xi))=i=1∑mwkiI(yi=G(xi))
利用
f
k
(
x
)
=
f
k
−
1
(
x
)
+
α
k
G
k
(
x
)
f_{k}(x) = f_{k-1}(x) + \alpha_kG_k(x)
fk(x)=fk−1(x)+αkGk(x)和
w
k
i
′
=
e
x
p
(
−
y
i
f
k
−
1
(
x
)
)
w_{ki}^{'} = exp(-y_if_{k-1}(x))
wki′=exp(−yifk−1(x))更新得到权重:
w
k
+
1
,
i
′
=
w
k
i
′
e
x
p
[
−
y
i
α
k
G
k
(
x
)
]
w_{k+1,i}^{'} = w_{ki}^{'}exp[-y_i\alpha_kG_k(x)]
wk+1,i′=wki′exp[−yiαkGk(x)]
由上可知,指数损失函数(1) 和 基分类器(2) 的选择,决定了样本权重的更新 w k + 1 , i w_{k+1,i} wk+1,i和弱学习器的权重系数 α k \alpha_k αk。
GBDT
原理
相比于adboost,GBDT也是迭代,也使用了前向分布算法,但是弱学习器限定了只能使用CART回归树模型,同时迭代思路和Adaboost也有所不同,简单的说Boosting框架+CART回归树模型+任意损失函数。
目标函数
对于GBDT,其要优化的目标函数进行一阶泰勒展开:
L
(
y
0
,
y
t
−
1
+
f
(
x
)
)
=
L
(
y
0
,
y
t
−
1
)
+
L
′
(
y
0
,
y
t
−
1
)
f
(
x
)
L(y_0,y^{t-1}+f(x))=L(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x)
L(y0,yt−1+f(x))=L(y0,yt−1)+L′(y0,yt−1)f(x)
利用上式无法直接求得极小值,GBDT使用损失函数的负梯度来拟合,得到CART回归树
- 负梯度为 r t i = − ∂ L ( y 0 , y i t − 1 ) ∂ y i t − 1 r_{ti}=-\frac{\partial L(y_0,y^{t-1}_i)}{\partial y^{t-1}_i} rti=−∂yit−1∂L(y0,yit−1)
- 利用 ( x i , r t i ) ( i = 1 , 2 , . . . m ) (x_i,r_{ti})(i=1,2,...m) (xi,rti)(i=1,2,...m),拟合第t颗回归树
通过损失函数的负梯度来拟合,我们找到了一种通用的拟合损失误差的办法,这样无轮是分类问题还是回归问题,我们通过其损失函数的负梯度的拟合,就可以用GBDT来解决我们的分类回归问题。区别仅仅在于损失函数不同导致的负梯度不同而已。
算法流程
输入是训练集 T = { ( x , y 1 ) , ( x 2 , y 2 ) , . . . ( x m , y m ) } T=\{(x_,y_1),(x_2,y_2), ...(x_m,y_m)\} T={(x,y1),(x2,y2),...(xm,ym)},最大迭代次数T,损失函数为L.
输入是强学习器f(x)
-
以 ( x i , y i 0 ) ( i = 1 , 2 , 3 , . . . m ) (x_i,y^0_i)\ (i=1,2,3,...m) (xi,yi0) (i=1,2,3,...m)拟合得到CART回归树 f 0 ( x ) f_0(x) f0(x)
-
计算负梯度
r t i = − ∂ L ( y 0 , y i t − 1 ) ∂ y i t − 1 r_{ti}=-\frac{\partial L(y_0,y^{t-1}_i)}{\partial y^{t-1}_i} rti=−∂yit−1∂L(y0,yit−1) -
以 ( x i , r t i ) ( i = 1 , 2 , 3 , . . . m ) (x_i,r_{ti})\ (i=1,2,3,...m) (xi,rti) (i=1,2,3,...m),拟合下一颗CART树
-
将所有树汇总
F ( x ) = ∑ t f t ( x ) F(x) = \sum_tf^t(x) F(x)=t∑ft(x)
XGBOOST
原理
类似于GBDT,但将其目标函数展开到二次,并且直接加入正则化项,构成结构风险函数;Boosting框架+树模型+任意损失函数。 这里树模型分裂方式不同于CART采样gini系数或均方差,而是自定义的增益规则。
目标函数
O b j = L ( y 0 , y t − 1 + f ( x ) ) = L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) + 1 2 L ′ ′ ( y 0 , y t − 1 ) f 2 ( x ) Obj = L(y_0,y^{t-1}+f(x))=L(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) Obj=L(y0,yt−1+f(x))=L(y0,yt−1)+L′(y0,yt−1)f(x)+21L′′(y0,yt−1)f2(x)
加上正则化项,以及所有的样本有,结构风险最小目标
O b j = ∑ i = 1 n L ( y 0 , y t − 1 ) + L ′ ( y 0 , y t − 1 ) f ( x ) + 1 2 L ′ ′ ( y 0 , y t − 1 ) f 2 ( x ) ) + γ ∗ T + 1 2 λ ∑ j = 1 T w j 2 \begin {aligned} Obj = & \\ & \sum_{i=1}^nL(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) ) + \gamma*T + \frac{1}{2}\lambda \sum_{j=1}{T}w_j^2 \end{aligned} Obj=i=1∑nL(y0,yt−1)+L′(y0,yt−1)f(x)+21L′′(y0,yt−1)f2(x))+γ∗T+21λj=1∑Twj2
继续处理,其中w即是f(x)
∑
i
=
1
n
L
(
y
0
,
y
t
−
1
)
+
L
′
(
y
0
,
y
t
−
1
)
f
(
x
)
+
1
2
L
′
′
(
y
0
,
y
t
−
1
)
f
2
(
x
)
)
+
γ
∗
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
G
w
j
+
1
2
(
H
+
λ
)
w
j
2
]
+
γ
∗
T
\begin {aligned} & \sum_{i=1}^nL(y_0,y^{t-1}) + L'(y_0,y^{t-1})f(x) + \frac{1}{2}L''(y_0,y^{t-1})f^2(x) ) + \gamma*T + \frac{1}{2}\lambda \sum_{j=1}{T}w_j^2 \\ & = \sum_{j=1}^T[Gw_j + \frac{1}{2}(H+\lambda )w_j^2] + \gamma *T \end{aligned}
i=1∑nL(y0,yt−1)+L′(y0,yt−1)f(x)+21L′′(y0,yt−1)f2(x))+γ∗T+21λj=1∑Twj2=j=1∑T[Gwj+21(H+λ)wj2]+γ∗T
将其最小化,有
w
j
∗
=
−
G
j
H
j
+
λ
O
b
j
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
\begin {aligned} & w_j^* = -\frac{G_j}{H_j+\lambda}\\ &Obj=-\frac{1}{2}\sum_{j=1}^T\frac{G_j^2}{H_j+\lambda} + \gamma T \end{aligned}
wj∗=−Hj+λGjObj=−21j=1∑THj+λGj2+γT
对于下一颗树的学习,即寻找结点使得下式最大
G
a
i
n
=
1
2
[
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
]
−
γ
Gain=\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}] - \gamma
Gain=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ
问题
- 对比xgboost中可有目标函数得到分裂规则,gbdt由公式(1)怎样推导出使用负梯度来拟合的,为什么使用负梯度?
当损失函数是平方损失和对数损失时,每一步的优化是很简单的,但是对于一般的损失函数而言,往往每一步的优化不是那么容易,使用负梯度代替残差,从梯度下降考虑,可认为每一颗树拟合的是 δ L ′ \delta L' δL′,其中 δ \delta δ为1,也可以为其他值;对比xgboost,该方式类似于梯度下降求解,而xgboost类似于牛顿法的优化。
GBDT整个求解可分为两部分,一是求解真实值与前t-1颗树差异,这里即负梯度过程;二是利用负梯度拟合CART树,然后针对回归问题,使用均方差,针对分类问题使用Gini系数。
而XGBOOST直接将上述两部分结合在一起:一是该真实值与前t-1颗树差异可认为是 w ∗ w^* w∗;二是直接利用公式来求最佳分裂点,而不利用均方差或者Gini系数。
- AdaBoost算法 关于回归模型怎样处理的,怎样处理多分类的,注意的点?
-
统计学习方法:AdaBoost算法是模型为加法模型、损失函数为指数函数、学习算法为前向分步算法时的二类学习方法。
-
对于 回归问题,可使用 加法模型,前向分步算法,损失上为平方误差损失函数,该算法称为提升树算法。
-
多分类问题,参考文献,其每个分类器的权重需要变化。
-
损失函数最小和具体的弱分类器无关, 我们根据由不同的样本权重和弱分类器的类型计算得到弱分类器,然后 α \alpha α通过最小化全局损失函数,得到当前的弱学习器的系数。
-
adaboost和其他boosting算法最大的差异在于其利用梯度来更新权重,而其他(gbdt) 是将梯度作为学习目标。
Ref:
- https://www.cnblogs.com/pinard/p/6140514.html
- https://www.zhihu.com/search?type=content&q=gbdt
欢迎关注公众号:

本文详细介绍了Adaboost、GBDT和XGBoost的原理,特别是它们的目标函数。Adaboost通过指数损失函数和基分类器权重更新样本权重。GBDT使用负梯度来拟合CART回归树,适用于各种损失函数。XGBoost则引入正则化项,优化二次目标函数,实现更高效训练。文章探讨了为何GBDT采用负梯度和XGBoost的分裂规则,并提及了回归和多分类问题的处理方法。
1359

被折叠的 条评论
为什么被折叠?



