XGBoost推导

输入样本集\(\{(x_1,y_1),\cdots ,(x_N,y_N)\}\),对于每个样本,其损失函数为

$$L(F_m(x_i),y_i)$$

其中\(F_m(x_i)\)表示已经学习到的\(m\)棵树对\(y_i\)的预测。

考虑所有样本的损失

$$L_m=\sum_{i=1}^N L(F_m(x_i),y_i) + \gamma \left |T\right | + \lambda \Omega (f)$$

现在要求第\(m+1\)棵树,即求得一颗树\(f_{m+1}\)使得以下目标函数最小,

$$L_{m+1} =\sum_{i=1}^N L(F_m(x_i)+f_{m+1}(x_i),y_i)+\gamma T +\lambda \sum_{i=1}^T w_i^2$$

对该目标函数在\(F_m(x_i)\)处进行二阶泰勒展开

$$\sum_{i=1}^N L(F_m(x_i)+f_{m+1}(x_i),y_i) = \sum_{i=1}^N L(F_m(x_i),y_i)+g_if_{m+1}(x_i)+\frac{1}{2}h_if_{m+1}^2(x_i) +\gamma T +\lambda \sum_{i=1}^T w_i^2$$

其中\(g_i=\frac{\partial L_{m+1}}{\partial F_m(x)}|_{x=x_i}\), \(h_i=\frac{\partial^2 L_{m+1}}{\partial F_m^2(x)}|_{x=x_i}\) ,\(T\)表示叶子节点的数目,\(w_j\)表示第\(i\)个叶子节点值。

因为每个样本点都被映射到了唯一一个叶子节点,令\(I_j\)表示映射到第\(j\)个节点的样本序号的集合,上式可以转换为对叶子节点的求和。

扫描二维码关注公众号,回复: 3065850 查看本文章

$$L_{m+1}=\sum_{i=1}^N L(F_m(x_i)+f_{m+1}(x_i),y_i)=\sum_{j=1}^T (\sum_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum_{i\in I_j}h_i)w_j^2+\gamma T+\lambda w_j^2+constant$$

求上述目标函数关于\(w_j\)的导数

$$\frac{\partial L_{m+1}}{\partial w_j}=\sum_{i\in I_j}g_i+(\sum_{i\in I_j}h_i+2\lambda) w_j=0$$

$$w_j^*=-\frac{\sum_{i\in I_j}g_i}{\sum_{i\in I_j}h_i+2\lambda}$$

将\(w_j^*\)代入原目标函数得

$$L_{m+1}=-\frac{1}{2}\sum_{j=1}^T \frac{(\sum_{i\in I_j})^2}{\sum_(i\in I_j)+2\lambda}+\gamma T$$

XGBoost在寻找最优分裂点时是寻找能够使得目标函数减少最多的分裂点。

猜你喜欢

转载自blog.csdn.net/Xafter0/article/details/81126278