算法强化 —— XGBoost

XGBoost

xgboost也是使用提升树相同的前向分步算法。其区别在于:xgboost通过结构风险极小化来确定下一个决策参数 Θ m {\Theta}_{m}

Θ ^ m = arg min Θ m i = 1 N L ( y ~ i , f m ( x i ) ) + Ω ( h m ( x ) ) \hat{\Theta}_{m}=\arg \min _{\Theta_{m}} \sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)

其中 Ω ( h m ) \Omega(h_{m}) 为第m个决策树的正则化项。这是xgboost和GBT的一个重要区别。
L = i = 1 N L ( y ~ i , f m ( x i ) ) + Ω ( h m ( x ) ) \mathcal{L}=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right) 为目标函数

泰勒展开式

定义:
y ^ i < m 1 > = f m 1 ( x i ) , g i = L ( y ~ i , y ^ i < m 1 > ) y ^ i < m 1 > , h i = 2 L ( y ~ i , y ^ i < m 1 > ) 2 y ^ i < m 1 > \hat{y}_{i}^{<m-1>}=f_{m-1}\left(\overrightarrow{\mathbf{x}}_{i}\right), \quad g_{i}=\frac{\partial L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)}{\partial \hat{y}_{i}^{<m-1>}}, \quad h_{i}=\frac{\partial^{2} L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)}{\partial^{2} \hat{y}_{i}^{<m-1>}}
即:
g i g_i L ( y ~ i , y ^ i < m 1 > ) L(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}) y ^ i < m 1 > \hat{y}_{i}^{<m-1>} 的一阶导数
h i h_i L ( y ~ i , y ^ i < m 1 > ) L(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}) y ^ i < m 1 > \hat{y}_{i}^{<m-1>} 的二阶导数

对目标函数 L \mathcal{L} 执行二阶泰勒展开:
L = i = 1 N L ( y ~ i , f m ( x i ) ) + Ω ( h m ( x ) ) = i = 1 N L ( y ~ i , y ^ i < m 1 > + h m ( x i ) ) + Ω ( h m ( x ) ) i = 1 N [ L ( y ~ i , y ^ i < m 1 > ) + g i h m ( x i ) + 1 2 h i h m 2 ( x i ) ] + Ω ( h m ( x ) ) +  constant  \begin{aligned} \mathcal{L} &=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, f_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)=\sum_{i=1}^{N} L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}+h_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right)+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right) \\ & \simeq \sum_{i=1}^{N}\left[L\left(\tilde{y}_{i}, \hat{y}_{i}^{<m-1>}\right)+g_{i} h_{m}\left(\overrightarrow{\mathbf{x}}_{i}\right)+\frac{1}{2} h_{i} h_{m}^{2}\left(\overrightarrow{\mathbf{x}}_{i}\right)\right]+\Omega\left(h_{m}(\overrightarrow{\mathbf{x}})\right)+\text { constant } \end{aligned}

决策树改写

对一个决策树 h m ( x ) h_{m}(\overrightarrow{\mathbf{x}}) 假设不考虑复杂的推到过程,仅考虑决策树的效果
给定输入 x \overrightarrow{\mathbf{x}} 该决策树将该输入经过不断的划分,最终划分到某个叶结点上去。
给定一个叶节点,该叶节点有一个输出值

因此将决策树拆分成结构部分 q ( ) q() ,和叶节点权重部分 w = ( w 1 , w 2 , . . . w T ) \overrightarrow{w} = (w_1,w_2,...w_T) ,其中T为叶节点的数量
结构部分 q ( x ) q(\overrightarrow{x}) 的输出是叶节点编号d。它的作用是将输入的 x \overrightarrow{x} 映射到编号为d的叶节点
叶节点权重部分就是每个叶节点的值。它的作用是输出编号为d的叶节点的值 w d w_d
因此决策树改写为 h m ( x ) = w q ( x ) h_m(\overrightarrow{x}) = w_{q(\overrightarrow{x})}

结构分

定义出具体的正则项
定义一个决策树的复杂度为 Ω ( h m ( x ) ) = γ T + 1 2 λ j = 1 T w j 2 \Omega\left(h_{m}(\overrightarrow{\mathrm{x}})\right)=\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}
其中:T为叶节点的个数, w j w_j 为每个叶节点的输出值, γ , λ 0 \gamma,\lambda \geq 0 为系数,控制这两个部分的比重。
叶节点越多,则决策树越复杂
每个叶节点输出值的绝对值越大,则决策树越复杂。
L 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 +  constant  \mathcal{L} \simeq \sum_{i=1}^{N}\left[g_{i} w_{q\left(\overrightarrow{\mathbf{x}}_{i}\right)}+\frac{1}{2} h_{i} w_{q\left(\overrightarrow{\mathbf{x}}_{i}\right)}^{2}\right]+\gamma T+\frac{1}{2} \lambda \sum_{j=1}^{T} w_{j}^{2}+\text { constant }
对于每个样本 x i \overrightarrow{{x}}_i ,它必然被划分到树 h m h_m 的某个叶节点。定义划分到叶节点j的样本的集合为: I j = { i q ( x i ) = j } \mathbb{I}_{j}=\left\{i | q\left(\overrightarrow{\mathbf{x}}_{i}\right)=j\right\} ,则有:
L j = 1 T [ ( i I j g i ) w j + 1 2 ( i I j h i + λ ) w j 2 ] + γ T +  constant  \mathcal{L} \simeq \sum_{j=1}^{T}\left[\left(\sum_{i \in \mathbb{I}_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in \mathbb{I}_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }

进一步化简
定义 G j = i I j g i , H j = i I j h i \mathbf{G}_{j}=\sum_{i \in \mathbb{I}_{j}} g_{i}, \mathbf{H}_{j}=\sum_{i \in \mathbb{I}_{j}} h_{i}
G j G_j 刻画了隶属于叶节点j的那些样本的一阶偏导数之和
H j H_j 刻画了隶属于叶节点j的那些样本的二阶偏导数之和

L j = 1 T [ ( i I j g i ) w j + 1 2 ( i I j h i + λ ) w j 2 ] + γ T +  constant  \mathcal{L} \simeq \sum_{j=1}^{T}\left[\left(\sum_{i \in \mathbb{I}_{j}} g_{i}\right) w_{j}+\frac{1}{2}\left(\sum_{i \in \mathbb{I}_{j}} h_{i}+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }
转化为
L j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T +  constant  \mathcal{L} \simeq \sum_{j=1}^{T}\left[G_j w_{j}+\frac{1}{2}\left(H_j+\lambda\right) w_{j}^{2}\right]+\gamma T+\text { constant }
此时如果 w j w_j 和T, G J , H j G_J,H_j 都无关的话,那么损失函数实质上是一个关于 w j w_j 的一元二次方程
对于一元二次方程 a x 2 + b x + c = 0 ax^2+bx+c = 0 当x= -b/2a时去极值,因而有 w j = G j H j + λ w_{j}^{*}=-\frac{\mathbf{G}_{j}}{\mathbf{H}_{j}+\lambda}
带回原式可得
L = 1 2 j = 1 T G j 2 H j + λ + γ T \mathcal{L}^{*}=-\frac{1}{2} \sum_{j=1}^{T} \frac{\mathbf{G}_{j}^{2}}{\mathbf{H}_{j}+\lambda}+\gamma T

上一步的简化, w j w_j 和T, G j , H j G_j,H_j 都无关, w j w_j 表示树的叶子节点,所以实质是在假设已知树的结构,而事实上损失函数与T是相关的,甚至和树的结构相关,所以定义L*为一种scoring function,来衡量已知树结构情况下目标函数的最小值。

发布了110 篇原创文章 · 获赞 3 · 访问量 4083

猜你喜欢

转载自blog.csdn.net/qq_33357094/article/details/105073018