GBDT详解

1.参数空间的最优化(引出梯度)

典型损失函数\(\hat{x}=\arg \min\limits _{x} f(x)\)

对于该优化问题,可以使用Steepest Gradient Descent,梯度下降法进行求解

在这里插入图片描述

其实就是给定起点后,贪心寻找最优解。这里的贪心是指每步都是在上一步的基础上往函数下降最快的方向走。寻得的解可以表示为:

Screenshot_2019-08-20_20-41-36.png

2.函数空间的最优化(借鉴梯度)

机器学习任务常见的是构建非参数回归或分类模型

有数据集\(\{x,y\}_{i=1}^N\),\(x=(x^1,...,x^d)\),d为变量维度,通过损失函数构建一个函数估计\(\hat{f(x)}\),描述\(x\longrightarrow y\)的映射关系

\(\widehat{f}(x)=y\)

\(\widehat{f}(x)=\arg \min\limits _{f(x)} \Psi(y, f(x))\)

此阶段对真实函数依赖关系\(f(x)\)和函数估计\(\hat{f(x)}\)的形式没有进行任何假设

如果根据期望重写估计问题,则有等价公式为最小化期望损失函数\(E_y(\Psi[y,f(x)]|x)\),以观测数据x为条件

\(\hat{f}(x)=\arg \min\limits _{f(x)} \underbrace{E_{x}[\overbrace{E_{y}(\Psi[y, f(x)])}^{\text {expected y loss }} | x]}_{\text {expectation over the whole dataset }}(2)\)

联系到论文里,既是非参估计,最小化损失函数

\(F^{*}=\arg \min\limits _{F} E_{y, x} L(y, F(x))=\arg \min _{F} E_{x}\left[E_{y}(L(y, F(x))) | x\right]\)

把函数作为参数,可参考参数空间最优化求解,求解函数估计问题本身也是一个寻优的过程,只不过我们寻找的结果是最优函数估计,而不是最优点估计,可以构造弱分类器\(\{f_1,f_2,...,f_m\}\),类比成梯度下降的\(\{x_1,x_2,...,x_m\}\)

迭代求:

\(f_{m}=f_{0}+\rho_{1} * g_{1}+\ldots+\rho_{i} * g_{i}+\ldots+\rho_{m} * g_{m}, 其中 g_{i}=-\frac{\partial L}{\partial F} | _{F=F_{i-1}}\)

存在函数对函数求解,函数对函数求导很困难,我们采取另一种方法,将函数\(F_{i-1}\)表示成由所有样本点在该函数上的离散值构成。即:\([F_{i-1}(x_1),F_{i-1}(x_2),...,F_{i-1}(x_N)]\)为N维向量

计算:

\(\hat{g}_{i}\left(x_{k}\right)=-\left.\frac{\partial L}{\partial F\left(x_{k}\right)}\right|_{F=F_{i-1}},\) for \(k=1,2,3, \ldots, N\)

上式是函数对向量的求导,得到的也是一个梯度向量。这里求导过程,首先是求\(F(x_k)\),即每个样本点的F函数值,然后再根据具体的损失函数,来计算损失函数对\(F(x_k)\)函数值的导数,而不是对函数的导数。

上述过程的最终目的是求\(F^*\),最终形式即为:

\(F^{*}(x)=\sum\limits_{m=0}^{M} f_{m}(x)\)

\(f_0(x)\)是初始估计,\(\{f_m(x)\}_{i=1}^M\)是提升估计。参考梯度下降法

\(f_{m}(x)=-\rho_{m} g_{m}(x)\)

其中:

\(g_{m}(x)=\left[\frac{\partial \phi(F(x))}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}=\left[\frac{\partial E_{y}[L(y, F(x)) | x]}{\partial F(x)}\right]_{F(x)=F_{m-1}(x)}\)

\(\quad F_{m-1}(x)=\sum\limits_{i=0}^{m-1} f_{i}(x)\)

假设有某种规则可以交换微分和积分的顺序,则:

\(g_{m}(x)=E_{y}\left[\frac{\partial L(y, F(x))}{\partial F(x)} | x\right]_{F(x)=F_{m-1}(x)}\)

\(\rho_{m}=\arg \min \limits_{\rho} E_{y, x} L\left(y, F_{m-1}(x)-\rho g_{m}(x)\right)\)

y可以来自不同的分布,使用训练集的\(E_y[\cdot|x]\),可能不是真实分布估计,就算是,也只是训练集上的真实分布,无法泛化到其他数据上。即当前​的梯度\(g_m(x)\)不适合直接使用。想想线性回归,如果直接可以使用训练集的数据,就不需要拟合一个模型了。如果可以直接使用\(P(x,y)\),也就不需要拟合一个概率模型了。

3.函数估计问题(拟合梯度)

通常解函数估计的方法是把函数\(F(x)\)限制为参数化函数\(F(x;P),\ P={P_1,P_2,...}\)再从参数空间中搜寻参数

实际上这是将函数估计问题转化成了参数估计问题。

如果每一步的函数定义为\(h(x;a_m)\),则\(F^*\)的形式为\(F\left(x ;\left\{\beta_{m}, \alpha_{m}\right\}_{1}^{M}\right)=\sum\limits_{m=1}^{M} \beta_{m} h\left(x ; a_{m}\right)\)

\(h(x)\)可以理解为基函数,\(a_m\)是基函数的参数,\(\beta_m\)是基函数的权值,则最小化损失函数变为

\(\left\{\beta_{m}, \alpha_{m}\right\}_{1}^{M}=\arg \min \limits_{\left\{\beta_{m}^{\prime}, \alpha_{m}^{\prime}\right\}_{1}^{M}} \sum\limits_{i=1}^{N} L\left(y_{i}, \sum\limits_{m=1}^{M} \beta_{m}^{\prime} h\left(x ; \alpha_{m}^{\prime}\right)\right)\)

上述问题仍然是难以求解的。难以求解的原因是,我们要一次性同时找出所有的\(\{\beta_{m}, \alpha_{m}\}_{1}^{M}\)(注意看min下标),也就是找出所有基函数\(h(x)\)\(\beta\)的一个最优序列,每次有新的分类器加入,还需要调整之前的分类器。

对此采用贪心算法的思想,采用Greedy Stagewise方法,对\(m=1,2,...,M\)

\(\left(\beta_{m}, \alpha_{m}\right)=\arg \min\limits _{\beta, \alpha} \sum\limits_{i=1}^{N} L\left(y_{i}, F_{m-1}\left(x_{i}\right)+\beta h\left(x_{i} ; \alpha\right)\right)\)

然后更新:

\(F_{m}(x)=F_{m-1}(x)+\beta_{m} h\left(x ; a_{m}\right)\)

可以看出这是一种分步加和扩展的方式(注意min的下标),即每次只训练一个弱分类器,当新分类器被加入模型的时候,不调整原来得到的分类器\(F_{m-1}(x)\), 实际上是一种贪心策略。

这时变成一个参数优化问题,通常不容易求解,采用迭代求解,目的是求\(h(x;a)\),最接近于负梯度\(g_m(x)\)

直观理解就是产生了个子问题,去拟合负梯度

样本负梯度如下:

\(-g_{m}\left(x_{i}\right)=-\left[\frac{\partial L\left(y_{i}, F\left(x_{i}\right)\right)}{\partial F\left(x_{i}\right)}\right]_{F(x)=F_{m-1}(x)}\)

对N维空间\(F_{m-1}(x)\)上的函数负梯度可以表示为\(-g_m={-g_m(x_i)}_{1}^N\)。但就如上述所说,这只是对于训练集而言。

总结下上面思路:

  • 最小化目标函数,需要L对\(F(x)\)求梯度
  • 函数对函数梯度难求,通过样本在\(F(x)\)的取值的梯度\(-g_m\)近似替代L对\(F(x)\)的梯度
  • 泛化到其他数据上,要根据训练集在\(F(x)\)取值的梯度集合拟合出L对\(F(x)\)的梯度

拟合一个\(h_m\{x,a_m\}\),使\(\{h_m(x_i;a_m)\}_1^N\)\(-g_m \in R^N\)最接近,这是一个典型的函数拟合问题,可以使用平方误差损失在样本上进行拟合

\(\alpha_{m}=\arg \min\limits _{\alpha, \beta} \sum\limits_{i=1}^{N}\left[-g_{m}\left(x_{i}\right)-\beta h\left(x_{i} ; \alpha\right)\right]^{2}\)

这个损失误差是用来拟合负梯度的。

得到负梯度拟合函数\(h(x_i;a_m)\)后,使用线性搜索在负梯度方向上搜索\(\rho_m\)

\(\rho_{m}=\arg \min\limits _{\rho} \sum\limits_{i=1}^{N} L\left(y_{i}, F_{m-1}\left(x_{i}\right)+\rho h\left(x_{i} ; \alpha_{m}\right)\right)\)

更新模型:

\(F_m(x)=F_{m-1}(x)+\rho_mh(x;a_m)\)

最终算法如下:

在这里插入图片描述

4.不同损失函数和基函数

4.1平方损失

损失函数为:\(L(y,F)=(y-F)^2/2\)

  • 第3步\(\tilde y=y_i-F_{m-1}(x_i)\)
  • 第4步使用\(\beta h(x_i;a)\)拟合当前数据残差
  • 第5步线性搜索令\(\rho_m = \beta_m\),\(\beta_m\)就是第4步的\(\beta\)

\(\rho_m=\beta_m\)的原因如下

总的优化函数为 \(L\left(F_{m}\right)=\sum\limits_{i=1}^{N} L\left(F_{m-1}\left(x_{i}\right)+\rho_{m} h_{m}(x), y_{i}\right)=\sum\limits_{i=1}^{N}\left(y_{i}-F_{m-1}\left(x_{i}\right)-\rho_{m} h_{m}(x)\right)^{2}=\sum\limits_{i=1}^{N}\left(\tilde{y}_{i}-\rho_{m} h_{m}(x)\right)^{2}\)

第四步的优化目标为\(\alpha_{m}=\arg \min\limits _{\alpha, \beta} \sum\limits_{i=1}^{N}\left[\tilde{y}_{i}-\beta h\left(x_{i} ; \alpha\right)\right]^{2}\)

可以看出两个优化目标完全一致,对负梯度的拟合结果得到的\(\beta\),直接就是\(\rho_m\)了,不需要第五步中的线性搜索。

4.2绝对损失

损失函数为:\(L(y,F)=|y-F|\)

  • 第3步 \(\tilde{y}_{i}=-\left[\frac{\partial L\left(y_{i}, F\left(x_{i}\right)\right)}{\partial F\left(x_{i}\right)}\right]_{F(x)=F_{m-1}(x)}=\operatorname{sign}\left(y_{i}-F_{m-1}\left(x_{i}\right)\right), i=1,2,3, \dots, N\)

  • 第4步 \(h(x;a)\)拟合\(sign(residuals)\)

  • 第5步 线性搜索为 \(\begin{aligned} \rho_{m} &=\arg \min _{\rho} \sum_{i=1}^{N}\left|y_{i}-F_{m-1}\left(\mathbf{x}_{i}\right)-\rho h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)\right| \\ &=\arg \min _{\rho} \sum_{i=1}^{N}\left|h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)\right| \cdot\left|\frac{y_{i}-F_{m-1}\left(\mathbf{x}_{i}\right)}{h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)}-\rho\right| \\ &=\operatorname{median}_{W}\left\{\frac{y_{i}-F_{m-1}\left(\mathbf{x}_{i}\right)}{h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)}\right\}_{1}^{N}, \quad w_{i}=\left|h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)\right| \end{aligned}\)

4.3回归树

考虑基学习器为J-terminal node的回归树

回归树模型为: \(h(x;\{b_j,R_j\}_1^J)=\sum\limits_{j=1}^Jb_jI(x\in R_j)\)

\(\{R_j\}_1^J\)为不想交的结点区域,回归树叶节点划分出来的区域。

第6步 \(F_{m}(x)=F_{m-1}(x)+\rho_{m} \sum\limits_{j=1}^{J} b_{j m} I\left(x \in R_{j m}\right)\)

\(\{R_{jm}\}_1^J\)是第m次迭代时,回归树叶节点划分出来的区域,用来拟合负梯度\(\{\tilde {y_i}\}_1^N\),即每次迭代使用回归树来拟合负梯度。

\(\{b_{jm}\}\)是相应的最小二乘系数 ,由于使用的是平方损失\(b_{jm}=avg_{x_i \in R_{jm}}\tilde y_i\)\(\rho_m\)使用线性搜索求解

第6步可改写为 \(F_{m}(x)=F_{m-1}(x)+\sum\limits_{j=1}^{J} \gamma_{j m} I\left(x \in R_{j m}\right), \quad \gamma_{j m}=\rho_{m} b_{j m}是叶子结点的取值\)

第4,5步合并为 \(\left\{\gamma_{j m}\right\}_{1}^{J}=\arg \min \limits_{\left\{\gamma_{j}\right\}_{1}^{J}} \sum\limits_{i=1}^{N} L\left(y_{i}, F_{m-1}\left(\mathbf{x}_{i}\right)+\sum\limits_{j=1}^{J} \gamma_{j} I\left(\mathbf{x} \in R_{j m}\right)\right)\)

由于回归树划分的区域是不相交的,即如果\(x\in R_{jm}\),则\(h(x)=\gamma_j\)

\(\left\{\gamma_{j m}\right\}=\arg \min\limits _{\gamma} \sum\limits_{x_{i} \in R_{j m}} L\left(y_{i}, F_{m-1}(x)+\gamma\right)\)

4.4损失函数为平方误差

\(L(y,F)=(y-F)^2/2\)

叶子结点取值为 \(\gamma_{j m}=\operatorname{ave}_{x_{i} \in R_{i m}} \tilde{y}_{i}\)

算法为

Screenshot_2019-08-21_22-42-04.png

损失函数为绝对损失

\(L(y,F)=|y-F|\)

负梯度为

Screenshot_2019-08-22_09-48-06.png叶子节点取值为 \(\gamma_{j m}=\operatorname{median}_{\mathbf{x}_{i} \in R_{j m}}\left\{y_{i}-F_{m-1}\left(\mathbf{x}_{i}\right)\right\}\)

损失函数为Huber loss

叶子结点取值为 \(\gamma_{j m}=\tilde{r}_{j m}+\frac{1}{N_{j m}} \sum_{\mathbf{x}_{i} \in R_{j m}} \operatorname{sign}\left(r_{m-1}\left(\mathbf{x}_{i}\right)-\tilde{r}_{j m}\right) \cdot \min \left(\delta_{m}, a b s\left(r_{m-1}\left(\mathbf{x}_{i}\right)-\tilde{r}_{j m}\right)\right)\)

4.5分类树

损失函数为二项式对数似然(二类逻辑回归和分类)

损失函数为 \(L(y, F)=\log (1+\exp (-2 y F)), \quad y \in\{-1,1\}\)

其中 \(F(\mathbf{x})=\frac{1}{2} \log \left[\frac{\operatorname{Pr}(y=1 | \mathbf{x})}{\operatorname{Pr}(y=-1 | \mathbf{x})}\right]\),类似逻辑回归,这里反过来求对应概率的值​,\(ln \frac{p}{1-p}=w^Tx+b\)

负梯度为 \(\tilde{y}_{i}=-\left[\frac{\partial L\left(y_{i}, F\left(\mathbf{x}_{i}\right)\right)}{\partial F\left(\mathbf{x}_{i}\right)}\right]_{P(\mathbf{x})=F_{m-1}(\mathbf{x})}=2 y_{i} /\left(1+\exp \left(2 y_{i} F_{m-1}\left(\mathbf{x}_{i}\right)\right)\right)\)

\(\rho_m\)线性搜索为 \(\rho_{m}=\arg \min \limits_{\rho} \sum\limits_{i=1}^{N} \log \left(1+\exp \left(-2 y_{i}\left(F_{m-1}\left(\mathbf{x}_{i}\right)+\rho h\left(\mathbf{x}_{i} ; \mathbf{a}_{m}\right)\right)\right)\right)\)

如果基学习器为决策树,则叶子节点的值为

\(\gamma_{j m}=\arg \min\limits _{\gamma} \sum\limits_{\mathbf{x}_{i} \in R_{j m}} \log \left(1+\exp \left(-2 y_{i}\left(F_{m-1}\left(\mathbf{x}_{i}\right)+\gamma\right)\right)\right)\)

上述值不容易计算,可以使用Newton-Raphson近似:

\(\gamma_{j m}=\sum\limits_{\mathbf{x}_{i} \in R_{j m}} \tilde{y}_{i} / \sum\limits_{\mathbf{x}_{i} \in R_{j m}}\left|\tilde{y}_{i}\right|\left(2-\left|\tilde{y}_{i}\right|\right)\)

算法如下:

image-20200305163318108

\(F_m(x)\)的预测值为\(ln \frac{p}{1-p}\),是一个连续值,可以转换为概率p

\(p_{+}(\mathbf{x})=\widehat{\operatorname{Pr}}(y=1 | \mathbf{x})=1 /\left(1+e^{-2 F_{M}(\mathbf{x})}\right)\)

\(p_{-}(\mathbf{x})=\widehat{\operatorname{Pr}}(y=-1 | \mathbf{x})=1 /\left(1+e^{2 F_{M}(\mathbf{x})}\right)\)

p用来分类

\(\hat{y}(\mathbf{x})=2 \cdot I\left[c(-1,1) p_{+}(\mathbf{x})>c(1,-1) p_{-}(\mathbf{x})\right]-1\)

1预测为-1的成本大于-1预测为为1的成本,那就为1

简单理解就是为1的概率更大时预测为1

影响调整

二类逻辑回归损失函数在第m此迭代的经验损失函数为

\(\phi_{m}(\rho, \mathbf{a})=\sum\limits_{i=1}^{N} \log \left[1+\exp \left(-2 y_{i} F_{m-1}\left(\mathbf{x}_{i}\right)\right) \cdot \exp \left(-2 y_{i} \rho h\left(\mathbf{x}_{i} ; \mathbf{a}\right)\right)\right]\)

如果\(y_iF_{m-1}(x_i)\)很大,则\(exp(-2y_iF_{m-1}(x_i))\)接近于0,\(\rho h(x_i;a)\)大小对结果没有影响,则第i个数据\((y_i,x_i)\)对损失函数几乎没有影响,求解 \((\rho_m,a_m)=arg \min\limits_{\rho,a} \phi_m(\rho,a)\)

这意味着在第m此迭代,如果\(y_iF_{m-1}(x_i)\)非常非常大,那么几乎可以把所有数据点的信息删除,对结果几乎没有影响。把 \(w_i=exp(-2y_iF_{m-1}(x_i))\)看作是第i个观测值的估计\(\rho_m h(x;a_m)\)的影响因子或权重

更一般的,在非参估计中,作为参数的是函数值\(\{F_{x_i}\}_1^N\),权重可以看做是对函数值的二阶导

\(w_i=|\tilde {y_i}|(2-|\tilde {y_i}|)\)

权重小于\(w_{l(a)}\)的数据可以删除,从\(\sum\limits_{i=1}^{l(\alpha)} w_{(i)}=\alpha \sum\limits_{i=1}^{N} w_{i}\)中求解\(l(a)\)

\(\{w_{i}\}_1^N\)\(\{w_i\}_1^N\)的升序排序,\(\alpha\)的值一般为\(\alpha \in [0.05,0.2]\)

多类逻辑回归和分类

训练k类分类器,损失函数为

\(L\left(\left\{y_{k}, F_{k}(\mathbf{x})\right\}_{1}^{K}\right)=-\sum\limits_{k=1}^{K} y_{k} \log p_{k}(\mathbf{x})\) ,\(y_k=1 \in \{0,1\},p_k(x)=Pr(y_k=1|x)\)

学习k个强分类器 \(F_{k}(\mathbf{x})=\log p_{k}(\mathbf{x})-\frac{1}{K} \sum\limits_{l=1}^{K} \log p_{l}(\mathbf{x})\)

等价的 \(p_{k}(\mathbf{x})=\exp \left(F_{k}(\mathbf{x})\right) / \sum\limits_{l=1}^{K} \exp \left(F_{l}(\mathbf{x})\right)\)

负梯度为 \(\tilde{y}_{i k}=-\left[\frac{\partial L\left(\left\{y_{i l}, F_{l}\left(\mathbf{x}_{i}\right)\right\}_{l=1}^{K}\right)}{\partial F_{k}\left(\mathbf{x}_{i}\right)}\right]_{\left\{F_{l}(\mathbf{x})=F_{l_{2} m-1}(\mathbf{x})\right\}_{1}^{K}}=y_{i k}-p_{k, m-1}\left(\mathbf{x}_{i}\right)\)

叶子节点值为 \(\left\{\gamma_{j k m}\right\}=\arg \min _{\left\{\gamma_{j k}\right\}} \sum\limits_{i=1}^{N} \sum\limits_{k=1}^{K} \phi\left(y_{i k,}, F_{k, m-1}\left(\mathbf{x}_{i}\right)+\sum\limits_{j=1}^{J} \gamma_{j k} 1\left(\mathbf{x}_{i} \in R_{j m}\right)\right)\)

同样使用Newton-Raphson近似 \(\gamma_{j k m}=\frac{K-1}{K} \frac{\sum\limits_{\mathbf{x}_{i} \in R_{j k m}} \tilde{y}_{i k}}{\sum\limits_{\mathbf{x}_{i} \in R_{j k m}}\left|\tilde{y}_{i k}\right|\left(1-\left|\tilde{y}_{i k}\right|\right)}\)

算法

image-20200305214357694

5.正则化

正则化通过约束训练过程来减轻过拟合。对于加和扩展模型,一种正则化思想是控制模型\(\{h(x;a_m)\}_1^M\)的数量M, 可以使用交叉验证来选择。另一种正则化思想是使用收缩因子来控制拟合过程,即学习速率。如下:

\(F_{m}(\mathbf{x})=F_{m-1}(\mathbf{x})+\nu \cdot \rho_{m} h\left(\mathbf{x} ; \mathbf{a}_{m}\right), \quad 0<\nu \leq 1\)

这两者存在一定的关系,减少学习速率意味着收敛速度降低,需要更多次迭代,则会增加模型的数量M。\(v-M\)实际上是一种权衡。

6.模型解释

变量重要性

\(I_{j}=\left(E_{\mathbf{x}}\left[\frac{\partial \hat{F}(\mathbf{x})}{\partial x_{j}}\right]^{2} \cdot \operatorname{var}_{\mathbf{x}}\left[x_{j}\right]\right)^{1 / 2}\)

对于决策树产生的分段常数逼近,它并不严格存在,必须通过反映其属性的替代度量来逼近

\(\hat{I}_{j}^{2}(T)=\sum\limits_{t=1}^{J-1} \hat{\imath}_{t}^{2} 1\left(v_{t}=j\right)\)

也可直接用特征J在单棵树中重要度的平均值

\(\hat{I}_{j}^{2}=\frac{1}{M} \sum\limits_{m=1}^{M} \hat{I}_{j}^{2}\left(T_{m}\right)\)

M是树的数量,特征J在单颗树中的重要度的如下

\(\hat{J}_{j}^{2}(T)=\sum\limits_{t=1}^{L-1} i_{t}^{2} 1\left(v_{t}=j\right)\)

L为树的叶子节点数量,\(\hat {i_t^2}\)是节点\(t\)分裂之后平方损失的减少量

posted @ 2020-05-22 20:47  yueqiudian  阅读(608)  评论(0)    收藏  举报