赞
踩
何为集成方法?
集成学习是一种机器学习范式。在集成学习中,我们会训练多个弱分类器解决相同的问题,并将它们结合起来以获得更好的结果。最重要的假设是:当弱模型被正确组合时,我们可以得到更精确或更鲁棒的模型。在大多数情况下,这些基本模型本身的性能并不是非常好,这要么是因为它们具有较高的方差或者偏差。
集成方法的思想是通过将这些弱学习器的偏置和/或方差结合起来,从而创建一个强学习器,从而获得更好的性能。根据弱学习器的性质,又分为同质和异质学习器。
梯度提升算法,类比于梯度下降参数更新,将优化目标从模型参数到模型函数(可以类比泛函空间,此时的泛函就是L(y,F(x))),此时求解最优的模型(函数),就要求解使Loss函数最小时的f(x)。同时,可以从迭代函数来看,Gradient Boosting生成新的模型,而不是取代之前的弱分类器。
其中,设最优函数为: F 0 ( x ) = f 0 ( x ) F_{0}(x)=f_{0}(x) F0(x)=f0(x)为初始的模型函数,我们的优化目标为 F ∗ ( x ) F^{*}(x) F∗(x)。在泛函上的定义上来说, f ( x ) f(x) f(x)为总量, F ( x ) F(x) F(x)为泛函,我们的优化过程就是不断地求出泛函的梯度,使其向 F ∗ ( x ) F^{*}(x) F∗(x)转化,即求出极小值,这个极小值就是 f ∗ ( x ) f^{*}(x) f∗(x),最优的模型函数。
关于GBDT,建议看这篇文章:https://www.zybuluo.com/yxd/note/611571
GBDT算法可以看成是由K棵树组成的加法模型:
y
i
^
=
Σ
k
=
1
K
f
k
(
x
i
)
,
f
k
∈
F
(0)
\hat{y_i} = {\Sigma}_{k=1}^Kf_k(x_i),f_k\in F \tag{0}
yi^=Σk=1Kfk(xi),fk∈F(0)
其中每一个预测值都是来自于K棵树的叠加:
下面是我们的优化目标函数:
O
b
j
=
Σ
i
=
1
n
L
o
s
s
(
y
i
,
y
i
^
)
(1)
Obj = {\Sigma}_{i=1}^n Loss(y_i,\hat{y_i}) \tag{1}
Obj=Σi=1nLoss(yi,yi^)(1)
其中,我们的目标就是在n个样本的总体预测损失,这里我们省去了正则项:
因为学习的是加法模型,如果能够从前往后,每一步只学习一个基函数及其系数(结构),逐步逼近优化目标函数,那么就可以简化复杂度。这一学习过程称之为Boosting。具体地,我们从一个常量预测开始,每次学习一个新的函数,过程如下
y
^
i
0
=
0
y
^
i
1
=
f
1
(
x
i
)
=
y
^
i
0
+
f
1
(
x
i
)
y
^
i
2
=
f
1
(
x
i
)
+
f
2
(
x
i
)
=
y
^
i
1
+
f
2
(
x
i
)
⋯
y
^
i
t
=
∑
k
=
1
t
f
k
(
x
i
)
=
y
^
i
t
−
1
+
f
t
(
x
i
)
(2)
如何决定我们加入的函数
f
f
f,也就是如何决定下一颗树的参数呢?
那就要通过优化当前的目标函数,假设我们现在到了第
t
t
t棵树需要生成,我们的优化函数为,通过最小化这个函数,我们得到下一棵树的参数:
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
t
−
1
+
f
t
(
x
i
)
)
+
c
o
n
s
t
a
n
t
(3)
如果我们将平方损失函数MSE作为标准,那么(3)就变成:
O
b
j
(
t
)
=
∑
i
=
1
n
(
y
i
−
(
y
^
i
t
−
1
+
f
t
(
x
i
)
)
)
2
+
c
o
n
s
t
a
n
t
=
∑
i
=
1
n
[
2
(
y
^
i
t
−
1
−
y
i
)
f
t
(
x
i
)
+
f
t
(
x
i
)
2
]
+
c
o
n
s
t
a
n
t
(4)
根据泰勒公式:
我们将(4)式进行二阶泰勒展开变成(去掉常量,因为常量在梯度优化中不起作用):
O
b
j
(
t
)
≈
∑
i
=
1
n
[
l
(
y
i
,
y
^
i
t
−
1
)
+
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
(5)
Obj^{(t)} \approx \sum_{i=1}^n \left[ l(y_i, \hat{y}_i^{t-1}) + g_if_t(x_i) + \frac12h_if_t^2(x_i) \right] \tag 5
Obj(t)≈i=1∑n[l(yi,y^it−1)+gift(xi)+21hift2(xi)](5)
其中:
我们只需要最小化公式(5),就可以得到我们的目标函数 f t ( x ) f_t(x) ft(x)。
上述是我们需要的下一课子树的目标函数,但是我们需要确定子树内部的节点,将叶子节点的公式带入式(5)得:
O
b
j
(
t
)
≈
∑
i
=
1
n
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
=
∑
i
=
1
n
[
g
i
w
q
(
x
i
)
+
1
2
h
i
w
q
(
x
i
)
2
]
+
γ
T
+
1
2
λ
∑
j
=
1
T
w
j
2
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
T
(6)
其中:
T为叶子节点个数, q i ( x ) q_i(x) qi(x)为特征向量x到子节点索引 {1,2…T} 映射, q : R d → { 1 , 2 , ⋯ , T } q:R^d \to \{1,2,\cdots,T\} q:Rd→{1,2,⋯,T}
ω ∈ R T \omega \in R^T ω∈RT,其中ω是叶子节点的向量集合,特征向量: x ( R d ) → q ( R 1 ) → ω ( R T ) x(R^d) \rightarrow q(R^1) \rightarrow \omega(R^T) x(Rd)→q(R1)→ω(RT)
Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega(f_t)=\gamma T + \frac12 \lambda \sum_{j=1}^T w_j^2 Ω(ft)=γT+21λ∑j=1Twj2为第t个子树的正则参数,包括对于叶子节点的数量和叶子节点的参数;
O
b
j
(
t
)
=
∑
j
=
1
T
[
G
i
w
j
+
1
2
(
H
i
+
λ
)
w
j
2
]
+
γ
T
(7)
Obj^{(t)} = \sum_{j=1}^T \left[G_iw_j + \frac12(H_i + \lambda)w_j^2 \right] + \gamma T \tag 7
Obj(t)=j=1∑T[Giwj+21(Hi+λ)wj2]+γT(7)
将上述式子对ω*求导得函数的最小值:
w
j
∗
=
−
G
j
H
j
+
λ
(8)
w_j^*=-\frac{G_j}{H_j+\lambda} \tag 8
wj∗=−Hj+λGj(8)
将
ω
j
∗
\omega{j}^*
ωj∗其待入目标函数得:
O
b
j
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
T
(9)
Obj = -\frac12 \sum_{j=1}^T \frac{G_j^2}{H_j+\lambda} + \gamma T \tag 9
Obj=−21j=1∑THj+λGj2+γT(9)
所以,用语言描述确定某个最佳子树的整个过程为:
整体来说:
4. 算法每次迭代生成一颗新的决策树
5. 在每次迭代开始之前,计算损失函数在每个训练样本点的一阶导数和二阶导数
6. 通过贪心策略生成新的决策树,通过等式(8)计算每个叶节点对应的预测值
7. 把新生成的决策树添加到模型中;
https://blog.csdn.net/u9Oo9xkM169LeLDR84/article/details/
https://zhuanlan.zhihu.com/p/337413526
https://baijiahao.baidu.com/s?id=1633580172255481867&wfr=spider&for=pc
https://zhuanlan.zhihu.com/p/41809927
http://t.csdn.cn/kIMHZ
https://www.zybuluo.com/yxd/note/611571
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。