决策【GDBT】在kaggle上的利器(三)

1,524 阅读2分钟

08 BDT(提升树)

我们先看下简单的提升树(Boosting Decision Tree),提升树是以 CART 决策树为基学习器的集成学习方法

image-20200625222758864

提升树实际上就是加法模型和前向分布算法,将其表示为

f_0(x)=0\\
f_m(x)=f_{m-1}+T(x,\Theta_m)\\
f_M=\sum_{m=1}^MT(x,\Theta_m)

在前向分布算法第 m 步时,给定当前的模型 f_{m-1}(x),求解

min(\sum_{i=1}^NL(y_i,f_{m-1}(x)+T(x,\Theta_m)))

得到第 m 棵决策树T(x,\Theta_m)。不同问题的提升树的区别在于损失函数的不同,如分类用指数损失函数,回归使用平方误差损失

当提升树采用平方损失函数时,第 m 次迭代时表示为

L(y,.f_{m-1}(x)+T(x,\Theta_m))=(y-f_{m-1}(x)-T(x,\Theta_m))^2\\
=(r-T(x,\Theta_m))^2

称 r 为残差,所以第 m 棵决策树T(x,\Theta_m)是对该残差的拟合。要注意的是提升树算法中的基学习器 CART 树是回归树

09 GBDT(梯度提升树)

GBDT 全称为:Gradient Boosting Decision Tree,即梯度提升决策树,理解为梯度提升+决策树。Friedman 提出了利用最速下降的近似方法,利用损失函数的负梯度拟合基学习器:

-[\frac{\partial L(y_i,F(x_i))}{\partial F(x_i)}]_{F(x)=F_{t-1}(x)}

为了求导方便,在损失函数前面乘以 1/2

L(y_i,F(x_i))=\frac{1}{2}(y_i-F(x_i))^2

对 F (Xi)求导,则有

\frac{\partial (y_i, F(x_i))}{\partial F(x_i)}=F(x_i)-y_i

残差是梯度的相反数,即

r_{ti}=y_i-F_{t-1}=-[\frac{\partial L(y_i,F(x_i))}{\partial F(x_i)}]_{F(x)=F_{t-1}(x)}

在BDT 中使用负梯度作为残差进行拟合。

GBDT 的梯度提升流程

输入:训练集:Data=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},y_i\in \{+1,-1\}

初始化:F_0(x)=argmin_{h_0}\sum_{i=1}^NL(y_i,h_0(x))

for t=1 to T do

  • 计算负梯度\widetilde{y_i}=-[\frac{\partial L(y_i,F(x)i)}{\partial F(x_i)}]_{F(x)=F_{t-1}(x)},i=1,2,3...,N
  • 拟合残差得到基学习器w_t=arg min_{w_t}\sum_{i=1}^N(\widetilde{y_i}-h_t(x;w_t))^2
  • 得到基学习的权重:\alpha_t=argmin_{\alpha_t}\sum_{i=1}^NL(y_i,f_{t-1}(x_i)+\alpha_t h_t(x;w_t))
  • 更新F_t(x)=F_{t-1}(x_i)+\alpha_th_t(x;w_t)

GBDT 与提升树的区别是残差使用梯度替代,而且每个基学习器有对应的参数权重

GBDT 的流程

GBDT 是使用梯度提升的决策树(CART), CART 树回归将空间划分为 K 个不相交的区域,并确定每个区域的输出 k,数学表达如下

f(X)=\sum_{k=1}^Kc_kI(X\in R_k)
GBDT 的流程(回归)

输入:训练集:Data=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},y_i\in \{+1,-1\}

初始化:F_0(x)=argmin_{h_0}\sum_{i=1}^NL(y_i,h_0(x))=argmin_c\sum_{i=1}^NL(y_i,c)

for t-1 to T do

  • 计算负梯度:\widetilde{y_i}=-[\frac{\partial L(y_i,F(x)i)}{\partial F(x_i)}]_{F(x)=F_{t-1}(x)},i=1,2,3...,N

  • 拟合残差得到回归树,得到第t颗树的叶节点区域h_t(x)=\sum_{k=1}^Kc_kI(X\in R_{tk})

  • 更新F_t(x)=F_{t-1}(x_i)+h_t(x)=F_{t-1}(x_i)+\sum_{k=1}^Kc_kI(X\in R_{tk})

得到加法模型F(X)=\sum_{t-1}^Th_t(x)

GBDT 的流程(分类)

GBDT 用于分类仍然使用 CART 回归树,使用 softmax 进行概率的映射,然后对概率的残差进行拟合。

F_{k0}(x)=0,k=1,K

For m=1 to M do:

  • p_k(x)=\exp(F_k(x))/\sum_{l=1}^K\exp(F_t(X)),k=1,K
  • For k=1 to K do:
    • \widetilde{y_{ik}}=y_{ik}-p_k(x_i),i=1,N
    • \{R_{jkm}\}_{j=1}^J=J-terminal nodetree(\{\widetilde{y_{ik}},x_i\}_1^N)
    • \gamma_{ikm}=\frac{K-1}{K}\frac{\sum_{x_i \in R_{jkm}}\widetilde{y_{ik}}}{s\sum_{x_i \in R_{jkm}}|\widetilde{y}_{ik}|(1-|\widetilde{y_{ik}}|)},j=1,N
    • F_{km}(x)=F_{k,{m-1}}(x)+\sum_{j=1}^J\gamma_{jkm}1(x\in R_{jkm})
  • endFor