GBDT 与 XGBoost

GBDT & XGBoost

回归树


单棵回归树可以表示成如下的数学形式

\[f(x) = \sum_j^Tw_j\mathbf{I}(x\in R_j) \]

其中\(T\)为叶节点的个数,\(\mathbf{I}\)为指示函数。

回归树的参数学习

当给定树的结构的时候,即知道哪些点划分到哪些叶节点后,可以直接优化下式来获得参数

\[\hat{R}(f) = \dfrac{1}{n}\sum_{i=1}^nL\left(y_i, \sum_{j=1}^Tw_j\mathbf{I}(x_i\in R_j)\right) \]

又有划分的区域是不相交的,所以可以最小化每个区域的损失来求得每个区域\(R_j\)对应的参数\(w_j\)

回归树的结构学习

上面给出了回归树的结构化损失函数

\[\hat{R}(\hat{f}) = \sum_j^T\sum_{i\in I_j}L(y_i,\hat{w}_j)=\sum_j^T\hat{L}_J \]

假设现在要对节点\(k\)进行分裂,那么有分裂之前的经验损失为

\[\hat{R}(\hat{f}_{before}) = \hat{L}_k+\sum_{j\not= k}\hat{L}_j \]

分裂之后的经验损失为

\[\hat{R}(\hat{f}_{after})=\hat{L}_L + \hat{L}_R+\sum_{j\not= k}\hat{L}_j \]

我们用增益来评价分裂的好坏,其计算如下

\[Gain = \hat{R}(\hat{f}_{before}) - \hat{R}(\hat{f}_{after}) = \hat{L}_k - (\hat{L}_L + \hat{L}_R) \]

上式本质上是比较划分之后相较于划分前,经验损失可以下降多少。也就是说下降得越多就越好,于是使得上式值最大的划分将会被采纳。


boosting 算法

boosting算法的基本形式如下

\[f(x) = \sum_{m=0}^Mf_m(x) \]

就是将多个弱学习器(基学习器)通过相加进行组合。可以写成如下的自适应形式

\[f(x) = \theta_0 + \sum_{m=1}^M\theta_m\phi_m(x) \]

boosting 算法的学习过程是串行的,不断去拟合残差。所以,在任意的第\(m\)步,其所需要优化和学习的东西可以表示成下式

\[\{\hat{\theta}_m, \hat{\phi}_m\}=\arg\min_{\{\theta_m, \phi_m\}}\sum_{i=1}^nL\left(y_i,\hat{f}^{(m-1)}(x_i) + \theta_m\phi_m(x_i)\right) \]


GBDT

GBDT中选取的弱学习器是回归树,增加树的目的纯粹是为了减少经验损失,所以会有

\[\sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i)) \ge \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i) + \theta_m\phi_m(x_i)) \]

为了使得上式成立,我们寻找得到的新的树\(\phi_m(x_i)\)必须是在\(L(y_i,\hat{f}^{(m-1)}(x_i))\)的负梯度方向,设\(L(y_i, \hat{f}^{(m-1)}(x_i))\)的负梯度为\(-\hat{g}_m(x_i)\),那么让新加入的弱学习器直接去拟合\(-\hat{g}_m\)即可,于是可得到基学习器的学习公式为

\[\hat{\phi}_m = \arg\min_{\phi\in\Phi}\dfrac{1}{2}\sum_{i=1}^n[-\hat{g}_m-\phi(x_i)]^2 \]

然后使用线性搜,得到

\[\hat{\rho}_m = \arg\min_\rho \sum_{i=1}^nL(y_i, \hat{f}_m^{(m-1)}(x_i)+\rho\hat{\phi}_m(x_i)) \]

最终得到

\[\hat{f}^{m}(x) = \eta\hat{\rho}_m\hat{\phi}_m(x) + \hat{f}^{(m-1)}(x) \]

下面介绍下如何优化损失函数得到\(\hat{\phi}_m(x)\)

\[\begin{split} J_m(\theta_m) &= \dfrac{1}{2}\sum_{i=1}^n[-\hat{g}_m-\phi_m(x_i)]^2\\ &= \dfrac{1}{2}\sum_{i=1}^n\hat{g}_m^2(x_i) + \phi_m^2(x_i) + 2\hat{g}_m(x_i)\phi_m(x_i)\\ &= \dfrac{1}{2}\sum_{i=1}^n\sum_{j=1}^Tw_{jm}^2I(x_i\in R_{jm}) + 2\hat{g}_m(x_i)w_{jm}I(x_i\in R_{jm}) + constant\\ &= \dfrac{1}{2}\sum_{j=1}^T\sum_{i\in I_{jm}}w_{jm}^2 + 2\hat{g}_m(x_i)w_{jm} + constant\\ &= \sum_{j=1}^T\dfrac{1}{2}n_{jm}w_{jm}^2+G_{jm}w_{jm} + constant \end{split} \]

其中\(n_{jm}\)为第\(j\)个节点的样本数量。对\(w_{jm}\)进行求导并使得导函数为0,解得

\[\hat{w}_{jm} = -\dfrac{G_{jm}}{n_{jm}} \]

回代得到

\[\hat{J}_m(\hat{\theta}) = -\dfrac{1}{2}\sum_{j=1}^T\dfrac{G_{jm}^2}{n_{jm}} \]

那么有分裂时的信息增益为

\[Gain = \dfrac{1}{2}\left[\dfrac{G_L^2}{n_L} + \dfrac{G_R^2}{n_R} - \dfrac{G_{jm}^2}{n_{jm}}\right] \]


XGBoost

XGBoost与GBDT根本不同在于XGBoost使用了损失函数的泰勒二阶展开。同上,我们有

\[J_m(\theta_m) = \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i) + \phi_m(x_i)) \]

对其进行泰勒二阶展开,于是有

\[J_m(\theta_m) = \sum_{i=1}^nL(y_i, \hat{f}^{(m-1)}(x_i)) + \hat{g}_m(x_i)\phi_m(x_i) + \dfrac{1}{2}\hat{h}_m(x_i)\phi_m(x_i)^2 \]

其中

\[\begin{split} \hat{g}_m(x_i) &= \left[\dfrac{\partial L(y_i,f(x_i))}{\partial f(x_i)}\right]_{f(x)=\hat{f}^{(m-1)}(x)}\\ \hat{h}_m(x_i) &= \left[\dfrac{\partial^2 L(y_i,f(x_i))}{\partial f(x_i)^2}\right]_{f(x)=\hat{f}^{(m-1)}(x)}\\ \end{split} \]

于是有

\[\begin{split} J_m(\theta_m) &= \sum_{i=1}^n\left[\hat{g}_m\phi_m(x_i) + \dfrac{1}{2}\hat{h}_m(x_i)\phi_m(x_i)^2\right] + constant\\ &= \sum_{i=1}^n\left[\hat{g}_m(x_i)\sum_{j=1}^Tw_{jm}I(x_i\in R_{jm}) + \dfrac{1}{2}\hat{h}_m(x_i)\sum_{j=1}^Tw_{jm}^2I(x_i\in R_{jm})\right] + constant\\ &= \sum_{j=1}^T\sum_{i\in I_{jm}}[\hat{g}_m(x_i)w_{jm} + \dfrac{1}{2}\hat{h}_m(x_i)w_{jm}^2] + constant\\ &= \sum_{j=1}^T[G_{jm}w_{jm} + \dfrac{1}{2}H_{jm}w_{jm}^2] + constant \end{split} \]

上式对\(w_{jm}\)求导,使其等于0,得到

\[\hat{w}_{jm} = -\dfrac{G_{jm}}{H_{jm}} \]

回代得到

\[\hat{J}_m(\hat{\theta}) = -\dfrac{1}{2}\sum_{j=1}^T\dfrac{G_{jm}^2}{H_{jm}} \]

那么有分裂时的信息增益为

\[Gain = \dfrac{1}{2}\left[\dfrac{G_L^2}{H_L} + \dfrac{G_R^2}{H_R} - \dfrac{G_{jm}^2}{H_{jm}}\right] \]

上面的操作可以得到

\[\hat{f}^{(m)}(x) = \hat{f}^{(m-1)}(x) + \eta\sum_{j=1}^T\hat{w}_{jm}I(x\in R_{jm}) \]

posted @ 2018-11-06 14:48  狂徒归来  阅读(281)  评论(0编辑  收藏  举报