机器学习树模型之GBDT

  • Gradient Boost的算法流程

     机器学习树模型之GBDT_第1张图片

备注:这里\Psi (y_i,\rho )表示损失函数,\rho表示样本在相对于决策面(后续分析回归问题和分类问题)的得分。

  • logloss

      对于二类分任务而言,常常采用logloss:

      \Psi(y,F(x))) = -ylog(p)-(1-y)log(1-p),其中p = 1/( 1+exp(-F(x)))

      与算法流程相对应,\rho这里为了便于后续推导方便,对logloss进行化简:      

                                       机器学习树模型之GBDT_第2张图片

不难得到,\Psi (y,F(x))关于F(x)的二阶导非负,因此\Psi {}''(y,F(x))\geqslant 0.

     首先来看,如果采用logloss后使用GBDT关于二分类任务的算法:

     机器学习树模型之GBDT_第3张图片

  • GBDT-logloss算法中一些公式的推导

                                         机器学习树模型之GBDT_第4张图片

在第m轮的学习中,CART的第j个叶子节点\gamma _{mj}的得分的推导公式:   

                              机器学习树模型之GBDT_第5张图片

  • 算例

表1给出了示例数据集:

x_{i} 1 2 3 4 5 6 7 8 9 10
y_{i} 0 0 0 1 1 0 0 0 1 1

参数的设置:

loss函数:log-loss;

回归树的分裂准则:MSE;

树的深度:1(即决策树桩)

学习率:0.1;

下面运行算法,首先初始化算法,计算 F_{0}

F_0 = log(4/6)=-0.4055

得到F_{0}后,可以利用GBDT-logloss算法中step-2的子步骤a计算其关于loss的负梯度 :

                                                         

得到表2:

x_{i} 1 2 3 4 5 6 7 8 9 10
\widetilde{y}_{i} -0.4 -0.4 -0.4 0.6 0.6 -0.4 -0.4 -0.4 0.6 0.6

下面根据MSE的分裂准则拟合第一棵树(m=1),表3给出了以不同取值作为分裂点时决策树桩的MSE:

分裂点 1 2 3 4 5 6 7 8 9 10
   mse 0.2469 0.2500 0.2449 0.4375 0.4800 0.4722 0.4263 0.1875 0.2222 0.2400

易知,最优划分点为split_point = 8,从而得到如下的决策树桩:

机器学习树模型之GBDT_第6张图片

计算左、右两侧叶子的预测值,由公式:

                                 

可得\gamma_{11} = -1.2/1.92=-0.625 ; \gamma_{12} = 1.2/0.48 = 2.5。更新F_{1}(x):

这里\eta表示学习率,学习率过小,导致算法收敛过慢;反之,则容易导致算法在迭代过程中产生震荡,容易陷入局部最优。这里我们取,得到表4所示的F_{1}(x)对数据集的预测得分为:

x_{i} 1 2 3 4 5 6 7 8 9 10
F_{1}(x) -0.468 -0.468 -0.468 -0.468 -0.468 -0.468 -0.468 -0.468 -0.1555 -0.1555

接下来,我们计算logloss关于F_{1}(x)的负梯度,得到表5:

x_{i} 1 2 3 4 5 6 7 8 9 10
\widetilde{y}_{i} -0.3851 -0.3851 -0.3851 0.6149 0.6149 -0.3851 -0.3851 -0.3851 0.5388 0.5388

对上述数据集根据MSE分裂准则来拟合第二棵树(m=2),得到表6:

分裂点 1 2 3 4 5 6 7 8 9 10
mse 0.2291 0.2321 0.2274 0.4134 0.4449 0.4356 0.3938 0.1875 0.2115

0.2227

对应的最优划分点为split_point = 8,得到如第一步中相同的决策树桩。进一步得到左、右两侧叶子的预测值为:

\gamma_{21} = -1.0808/1.8944=-0.5705 ; \gamma_{22} = 1.0776/0.4970 = 2.168.

得到F_{2}(x)对数据集的预测得分为:

x_{i} 1 2 3 4 5 6 7 8 9 10
F_{2}(x_i) -0.5251 -0.5251 -0.5251 -0.5251 -0.5251 -0.5251 -0.5251 -0.5251 0.0613 0.0613

类似地,我们得到F_{3}(x)对数据集的预测得分为:

x_{i} 1 2 3 4 5 6 7 8 9 10
F_{3}(x_i) -1.0461 -1.0461 -1.0461 -1.0461 -1.0461 -1.0461 -1.0461 -1.0461 2.0018 2.0018

转换为概率为:

x_{i} 1 2 3 4 5 6 7 8 9 10
p(x_i) 0.2600 0.2600 0.2600 0.2600 0.2600 0.2600 0.2600 0.2600 0.8810 0.8810

 

Inference

[1] . https://blog.csdn.net/qq_22238533/article/details/79199605

[2]. https://blog.csdn.net/zpalyq110/article/details/79527653

 

你可能感兴趣的:(GBDT,机器学习,#,分类任务)