1.提升的概念
提升是一个机器学习技术,可以用于分类和回归的问题,它每一步产生一个若预测模型(如决策树),并加权累加到总模型中;如果每一步的弱预测模型都是生成都是依据损失函数的梯度方向,称之为梯度提升。
梯度提升算法首先给定一个目标损失函数,他的定义域是所有可行的弱函数集合(基函数);提升算法通过迭代的选择一个负梯度方向上的基函数逐渐逼近极小值,这种函数域的梯度提升观点对机器学习的很多领域有深刻影响。如果一个问题存在弱分类器,则一定可以通过提升的方法得到强分类器。
2.提升算法
给定输入向量x和输出变量y组成的若干训练样本
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
n
,
y
n
)
(x_1,y_1),(x_2,y_2),\cdots,(x_n,y_n)
(x1,y1),(x2,y2),⋯,(xn,yn),目标是找到近似函数
F
^
(
x
⃗
)
\hat{F}(\vec{x})
F^(x),使得损失函数
L
(
y
,
F
(
x
)
)
L(y,F(\mathbf x))
L(y,F(x))的损失值最小
损失函数
L
(
y
,
F
(
x
)
)
L(y,F(\mathbf x))
L(y,F(x))的典型定义为
L
(
y
,
F
(
x
⃗
)
)
=
1
2
(
y
−
F
(
x
⃗
)
)
2
L
(
y
,
F
(
x
⃗
)
)
=
∣
y
−
F
(
x
⃗
)
∣
\begin{aligned} L(y,F(\vec{x}))=&\frac{1}{2}(y-F(\vec{x}))^2 \\ L(y,F(\vec{x}))=&|y-F(\vec{x})|\\ \end{aligned}
L(y,F(x))=L(y,F(x))=21(y−F(x))2∣y−F(x)∣
假定最右函数为
F
∗
(
x
⃗
)
F^*(\vec{x})
F∗(x),即:
F
∗
(
x
⃗
)
=
a
r
g
m
i
n
E
(
x
,
y
)
[
L
(
y
,
F
(
x
⃗
)
)
]
F^*(\vec{x})=arg\,min E_{(x,y)}[L(y,F(\vec{x}))]
F∗(x)=argminE(x,y)[L(y,F(x))]
假定
F
(
x
)
F(\mathbf x)
F(x)是一族基函数
f
i
(
x
)
f_i(\mathbf x)
fi(x)的加权和
F
(
x
⃗
)
=
∑
i
=
1
M
γ
i
f
i
(
x
)
+
c
o
n
s
t
F(\vec{x})=\sum_{i=1}^{M}\gamma_if_i(x)+const
F(x)=i=1∑Mγifi(x)+const
3.提升算法推导
梯度提升方法寻找最优解
F
(
x
)
F(x)
F(x),使得损失函数再训练集上的期望最小。方法如下:
首先,给定常函数
F
0
(
x
)
F_0(x)
F0(x):
F
0
(
x
⃗
)
=
a
r
g
m
i
n
∑
i
=
1
n
L
(
y
i
,
γ
)
F_0(\vec{x})=arg\,min\sum_{i=1}^{n}L(y_i,\gamma)
F0(x)=argmini=1∑nL(yi,γ)
以贪心的思路扩展得到
F
m
(
x
)
F_m(x)
Fm(x):
F
m
(
x
⃗
)
=
F
m
−
1
(
x
⃗
)
+
a
r
g
m
i
n
f
∈
H
∑
i
n
L
(
y
i
,
F
m
−
1
(
x
i
⃗
)
+
f
(
x
i
⃗
)
)
F_m(\vec{x})=F_{m-1}(\vec{x})+arg\,\mathop{min}\limits_{f\in H} \sum_i^{n}L(y_i,F_{m-1}(\vec{x_i})+f(\vec{x_i}))
Fm(x)=Fm−1(x)+argf∈Hmini∑nL(yi,Fm−1(xi)+f(xi))
贪心法在每次选择最优基函数时仍困难,使用梯度下降方法进行近似计算,将样本带入基函数
f
f
f得到
f
(
x
1
⃗
)
,
f
(
x
2
⃗
)
,
⋯
,
f
(
x
n
⃗
)
f(\vec{x_1}),f(\vec{x_2}),\cdots,f(\vec{x_n})
f(x1),f(x2),⋯,f(xn),从而L退化为向量
L
(
y
1
,
f
(
x
1
⃗
)
)
,
L
(
y
2
,
f
(
x
2
⃗
)
)
,
⋯
,
L
(
y
n
,
f
(
x
n
⃗
)
)
L(y_1,f(\vec{x_1})),L(y_2,f(\vec{x_2})),\cdots,L(y_n,f(\vec{x_n}))
L(y1,f(x1)),L(y2,f(x2)),⋯,L(yn,f(xn))
F
m
(
x
⃗
)
=
F
m
−
1
(
x
⃗
)
−
γ
m
∑
i
=
1
n
∇
f
L
(
y
i
,
F
m
−
1
(
x
⃗
)
)
F_m(\vec{x})=F_{m-1}(\vec{x})-\gamma_m\sum_{i=1}^{n}\nabla_fL(y_i,F_{m-1}(\vec{x}))
Fm(x)=Fm−1(x)−γmi=1∑n∇fL(yi,Fm−1(x))
上式中权值
γ
\gamma
γ为梯度下降的步长,使用线性搜索求最优步长:
γ
m
=
a
r
g
m
i
n
γ
∑
i
=
1
n
L
(
y
i
,
F
m
(
x
⃗
)
−
γ
⋅
∇
f
L
(
y
i
,
F
m
−
1
(
x
⃗
)
)
)
\gamma_m=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,F_m(\vec{x})-\gamma \cdot \nabla_fL(y_i,F_{m-1}(\vec{x})))
γm=argγmini=1∑nL(yi,Fm(x)−γ⋅∇fL(yi,Fm−1(x)))
4.提升算法
初始给定模型为常数
F
0
(
x
⃗
)
=
a
r
g
m
i
n
γ
∑
i
=
1
n
L
(
y
i
,
γ
)
F_0(\vec{x})=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,\gamma)
F0(x)=argγmin∑i=1nL(yi,γ)
对于m=1到M
计算伪残差
γ
i
m
=
[
∂
L
(
y
i
,
F
(
x
⃗
i
)
)
∂
F
(
x
⃗
i
)
]
F
(
x
⃗
)
=
F
m
(
x
⃗
)
i
=
1
,
2
,
⋯
,
n
\gamma_{im}=[\frac{\partial L(y_i,F(\vec{x}_i))}{\partial{F(\vec{x}_i)}}]_{F(\vec{x})=F_m(\vec{x})}\, i=1,2,\cdots,n
γim=[∂F(xi)∂L(yi,F(xi))]F(x)=Fm(x)i=1,2,⋯,n
使用数据计算
{
(
x
i
⃗
,
γ
i
m
)
}
i
n
\left\{ (\vec{x_i},\gamma_{im}) \right\}_i^n
{(xi,γim)}in的拟合残差基函数
f
m
(
x
⃗
)
f_m(\vec{x})
fm(x)
计算步长
γ
m
=
a
r
g
m
i
n
γ
∑
i
=
1
n
L
(
y
i
,
F
m
−
1
(
x
⃗
)
−
γ
⋅
F
m
(
x
⃗
)
)
)
\gamma_m=arg\,\mathop{min}\limits_{\gamma}\sum_{i=1}^{n}L(y_i,F_{m-1}(\vec{x})-\gamma \cdot F_{m}(\vec{x})))
γm=argγmin∑i=1nL(yi,Fm−1(x)−γ⋅Fm(x)))
更新模型
F
m
(
x
⃗
)
=
F
m
−
1
(
x
⃗
)
−
γ
m
⋅
f
m
(
x
⃗
)
F_m(\vec{x})=F_{m-1}(\vec{x})-\gamma_m\cdot f_m(\vec{x})
Fm(x)=Fm−1(x)−γm⋅fm(x)
梯度提升的典型基函数即决策树(尤其是CART)
5.提升算法总结
函数估计被认为是在函数空间而非参数空间的数值优化问题,而阶段性的加性扩展和梯度下降手段将函数估计转化为参数估计。
损失函数为最小均方误差和绝对值误差等,则为回归问题;而误差函数为多类别Logistic似然函数,则为分类问题。
对目标函数分解为若干基函数的加权和,是常见的技术手段,神经网络、径向基函数、傅立叶/小波变换、SVM都能看见它的影子。
6.XGBoost算法
(1)目标函数:
J
(
f
t
)
=
∑
i
=
1
n
L
(
y
i
,
y
i
^
(
t
−
1
)
+
f
t
(
x
⃗
)
)
+
Ω
(
f
t
)
+
C
J(f_t)=\sum_{i=1}^{n}L(y_i,\hat{y_i}^{(t-1)}\small +f_t(\vec{x}))+\Omega (f_t)+C
J(ft)=∑i=1nL(yi,yi^(t−1)+ft(x))+Ω(ft)+C
根据泰勒展开式:
f
(
x
+
Δ
x
)
≈
f
(
x
)
+
f
′
(
x
)
Δ
x
+
1
2
f
′
′
(
x
)
Δ
x
2
f(x+\Delta x)\approx f(x)+f'(x)\Delta x+\frac{1}{2} f''(x)\Delta x^2
f(x+Δx)≈f(x)+f′(x)Δx+21f′′(x)Δx2
令:
g
i
=
∂
L
(
y
i
,
y
^
i
(
t
−
1
)
)
∂
y
^
i
(
t
−
1
)
,
h
i
=
∂
2
L
(
y
i
,
y
^
i
(
t
−
1
)
)
∂
y
^
i
(
t
−
1
)
g_{i}=\frac{\partial L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)}{\partial \hat{y}_{i}^{(t-1)}}, \quad h_{i}=\frac{\partial^{2} L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)}{\partial \hat{y}_{i}^{(t-1)}}
gi=∂y^i(t−1)∂L(yi,y^i(t−1)),hi=∂y^i(t−1)∂2L(yi,y^i(t−1))
得:
J
(
f
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
)
]
+
Ω
(
f
t
)
+
C
J\left(f_{t}\right) \approx \sum_{i=1}^{n}\left[L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)+g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right)+C
J(ft)≈i=1∑n[L(yi,y^i(t−1))+gift(xi)+21hift2(xi)]+Ω(ft)+C
(2)决策树的描述
使用决策树对样本做分类(回归),是从根节点到叶子节点的细化过程;落在相同节点的样本的预测值是相同的;
假定某决策树的叶子节点数目为T,每个叶子节点的权值为
w
⃗
=
(
w
1
,
w
2
⋯
w
T
)
\vec{w}=\left(w_{1}, w_{2} \cdots w_{T}\right)
w=(w1,w2⋯wT),决策树的学习过程,就是构造如何使用特征得到划分,从而得到这些权值的过程;
样本x落在叶子节点q中,定义为:
f
t
(
x
)
=
w
q
(
x
)
f_{t}(x)=w_{q(x)}
ft(x)=wq(x),一个决策树的核心即"树结构"和”叶权值“。
举例:是否喜欢计算机游戏的例子
(3)正则项的定义
决策树的复杂度可以考虑叶节点数和叶权值,如使用叶节点总数和叶权值平方和的加权。
Ω
(
f
t
)
=
γ
⋅
T
t
+
λ
⋅
1
2
∑
j
=
1
T
w
j
2
\Omega\left(f_{t}\right)=\gamma \cdot T_{t}+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}\,\,
Ω(ft)=γ⋅Tt+λ⋅21j=1∑Twj2
(4)目标函数计算
J
(
f
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
)
]
+
Ω
(
f
t
)
+
C
=
∑
i
=
1
n
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
+
C
=
∑
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
+
C
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
=
I
j
h
i
)
w
j
2
]
+
γ
⋅
T
+
λ
⋅
1
2
∑
j
=
1
T
w
j
2
+
C
=
∑
j
=
1
T
[
(
∑
i
=
I
j
g
i
)
w
j
+
1
2
(
∑
i
=
I
j
h
i
+
λ
)
w
j
2
]
+
γ
⋅
T
+
C
\begin{aligned} J\left(f_{t}\right) & \approx \sum_{i=1}^{n}\left[L\left(y_{i}, \hat{y}_{i}^{(t-1)}\right)+g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right)+C \\ &=\sum_{i=1}^{n}\left[g_{i} f_{t}\left(x_{i}\right)+\frac{1}{2} h_{i} f_{t}^{2}\left(x_{i}\right)\right]+\Omega\left(f_{t}\right)+C \\ &=\sum_{i=1}^{n}\left[g_{i} w_{q\left(x_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(x_{i}\right)}^{2}\right]+\gamma \cdot T+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}+C \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i=I_{j}} h_{i}\right) w_{j}^{2}\right]+\gamma \cdot T+\lambda \cdot \frac{1}{2} \sum_{j=1}^{T} w_{j}^{2}+C \\ &=\sum_{j=1}^{T}\left[\left(\sum_{i=I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i=I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C \end{aligned}
J(ft)≈i=1∑n[L(yi,y^i(t−1))+gift(xi)+21hift2(xi)]+Ω(ft)+C=i=1∑n[gift(xi)+21hift2(xi)]+Ω(ft)+C=i=1∑n[giwq(xi)+21hiwq(xi)2]+γ⋅T+λ⋅21j=1∑Twj2+C=j=1∑T⎣⎡⎝⎛i∈Ij∑gi⎠⎞wj+21⎝⎛i=Ij∑hi⎠⎞wj2⎦⎤+γ⋅T+λ⋅21j=1∑Twj2+C=j=1∑T⎣⎡⎝⎛i=Ij∑gi⎠⎞wj+21⎝⎛i=Ij∑hi+λ⎠⎞wj2⎦⎤+γ⋅T+C
(5)目标函数继续简化
对于:
J
(
f
t
)
=
∑
j
=
1
T
[
(
∑
i
∈
I
j
g
i
)
w
j
+
1
2
(
∑
i
∈
I
j
h
i
+
λ
)
w
j
2
]
+
γ
⋅
T
+
C
J\left(f_{t}\right)=\sum_{j=1}^{T}\left[\left(\sum_{i \in I_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in I_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C
J(ft)=∑j=1T[(∑i∈Ijgi)wj+21(∑i∈Ijhi+λ)wj2]+γ⋅T+C
定义:
G
j
=
∑
i
∈
I
j
g
i
,
H
j
=
∑
i
∈
I
j
h
i
G_{j}=\sum_{i \in I_{j}} g_{i}, \quad H_{j}=\sum_{i \in I_{j}} h_{i}
Gj=i∈Ij∑gi,Hj=i∈Ij∑hi
从而:
J
(
f
t
)
=
∑
j
=
1
T
[
G
j
w
j
+
1
2
(
H
j
+
λ
)
w
j
2
]
+
γ
⋅
T
+
C
J\left(f_{t}\right)=\sum_{j=1}^{T}\left[G_{j} w_{j}+\frac{1}{2}\left(H_{j}+\lambda\right) w_{j}^{2}\right]+\gamma \cdot T+C
J(ft)=j=1∑T[Gjwj+21(Hj+λ)wj2]+γ⋅T+C
对w求偏导,得
∂
J
(
f
t
)
∂
w
j
=
G
j
+
(
H
j
+
λ
)
w
j
=
0
⇒
w
j
=
−
G
j
H
j
+
λ
\frac{\partial J\left(f_{t}\right)}{\partial w_{j}}=G_{j}+\left(H_{j}+\lambda\right) w_{j}=0 \Rightarrow w_{j}=-\frac{G_{j}}{H_{j}+\lambda}
∂wj∂J(ft)=Gj+(Hj+λ)wj=0⇒wj=−Hj+λGj
回代入目标函数,得
J
(
f
t
)
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
⋅
T
J\left(f_{t}\right)=-\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^{2}}{H_{j}+\lambda}+\gamma \cdot T
J(ft)=−21j=1∑THj+λGj2+γ⋅T
举例:
构造决策树的结构
J
(
f
t
)
=
−
1
2
∑
j
=
1
T
G
j
2
H
j
+
λ
+
γ
⋅
T
J\left(f_{t}\right)=-\frac{1}{2} \sum_{j=1}^{T} \frac{G_{j}^{2}}{H_{j}+\lambda}+\gamma \cdot T
J(ft)=−21j=1∑THj+λGj2+γ⋅T
枚举可行的分割点,选择增益最大的划分,继续同样的操作,直到满足某阈值或得到纯节点。
Gain
(
ϕ
)
=
1
2
[
G
L
2
H
L
+
λ
+
G
R
2
H
R
+
λ
−
(
G
L
+
G
R
)
2
H
L
+
H
R
+
λ
]
−
γ
\operatorname{Gain}(\phi)=\frac{1}{2}\left[\frac{G_{L}^{2}}{H_{L}+\lambda}+\frac{G_{R}^{2}}{H_{R}+\lambda}-\frac{\left(G_{L}+G_{R}\right)^{2}}{H_{L}+H_{R}+\lambda}\right]-\gamma
Gain(ϕ)=21[HL+λGL2+HR+λGR2−HL+HR+λ(GL+GR)2]−γ
(6)相对于传统的GBDT,XGBoost使用了二阶信息,可以更快的在训练集上收敛,XGBoost的实现中使用了并行/多核计算,因此训练速度更快,同时它的原生语言是C/C++,这是它速度快的实践原因。
7.Adaboost算法
(1)Adaboost描述:
设训练数据集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
…
(
x
N
,
y
N
)
}
\mathrm{T}=\left\{\left(\mathrm{x}_{1}, \mathrm{y}_{1}\right),\left(\mathrm{x}_{2}, \mathrm{y}_{2}\right) \ldots\left(\mathrm{x}_{\mathrm{N}}, \mathrm{y}_{\mathrm{N}}\right)\right\}
T={(x1,y1),(x2,y2)…(xN,yN)}
初始化训练的数据的权值分布
D
1
=
(
w
11
,
w
12
⋯
w
1
i
⋯
,
w
1
N
)
,
w
1
i
=
1
N
,
i
=
1
,
2
,
⋯
,
N
D_{1}=\left(w_{11}, w_{12} \cdots w_{1 i} \cdots, w_{1 N}\right), w_{1 i}=\frac{1}{N}, i=1,2, \cdots, N
D1=(w11,w12⋯w1i⋯,w1N),w1i=N1,i=1,2,⋯,N
对于
m
=
1
,
2
,
…
M
\mathrm{m}=1,2, \ldots \mathrm{M}
m=1,2,…M
使用具有权值分布
D
m
D_m
Dm的训练数据集学习,得到基本分类器
G
m
(
x
)
:
χ
→
{
−
1
,
+
1
}
G_{m}(x): \quad \chi \rightarrow\{-1,+1\}
Gm(x):χ→{−1,+1}
计算
G
m
(
x
)
G_m(x)
Gm(x)在训练数据集上的分类误差率
e
m
=
P
(
G
m
(
x
i
)
≠
y
i
)
=
∑
i
=
1
N
w
m
i
I
(
G
m
(
x
i
)
≠
y
i
)
e_{m}=P\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)=\sum_{i=1}^{N} w_{m i} I\left(G_{m}\left(x_{i}\right) \neq y_{i}\right)
em=P(Gm(xi)=yi)=i=1∑NwmiI(Gm(xi)=yi)
计算
G
m
(
x
)
G_m(x)
Gm(x) 的系数
α
m
=
1
2
log
1
−
e
m
e
m
\alpha_{m}=\frac{1}{2} \log \frac{1-e_{m}}{e_{m}}
αm=21logem1−em
更新训练数据集的权值分布
D
m
+
1
=
(
w
m
+
1
,
1
,
w
m
+
1
,
2
⋯
w
m
+
1
,
i
⋯
,
w
m
+
1
,
N
)
w
m
+
1
,
i
=
w
m
i
Z
m
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
,
i
=
1
,
2
,
⋯
,
N
\begin{array}{l} {D_{m+1}=\left(w_{m+1,1}, w_{m+1,2} \cdots w_{m+1, i} \cdots, w_{m+1, N}\right)} \\ {w_{m+1, i}=\frac{w_{m i}}{Z_{m}} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right), i=1,2, \cdots, N} \end{array}
Dm+1=(wm+1,1,wm+1,2⋯wm+1,i⋯,wm+1,N)wm+1,i=Zmwmiexp(−αmyiGm(xi)),i=1,2,⋯,N
这里,
Z
m
Z_m
Zm是规范化因子
Z
m
=
∑
i
=
1
N
w
m
i
exp
(
−
α
m
y
i
G
m
(
x
i
)
)
Z_{m}=\sum_{i=1}^{N} w_{m i} \exp \left(-\alpha_{m} y_{i} G_{m}\left(x_{i}\right)\right)
Zm=i=1∑Nwmiexp(−αmyiGm(xi))
构建基本分类器的线性组合
f
(
x
)
=
∑
m
=
1
M
α
m
G
m
(
x
)
f(x)=\sum_{m=1}^{M} \alpha_{m} G_{m}(x)
f(x)=m=1∑MαmGm(x)
得到最终分类器
G
(
x
)
=
sign
(
f
(
x
)
)
=
sign
(
∑
m
=
1
M
α
m
G
m
(
x
)
)
G(x)=\operatorname{sign}(f(x))=\operatorname{sign}\left(\sum_{m=1}^{M} \alpha_{m} G_{m}(x)\right)
G(x)=sign(f(x))=sign(m=1∑MαmGm(x))
(2)Adaboost举例
(3)Adaboost算法解释:
Adaboost算法是模型为加法模型,损失函数为指数函数,学习算法为前向
GBDT和Xgboost算法
最新推荐文章于 2021-05-20 09:22:51 发布