GBDT

1.GBDT算法流程

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

  1. 初始化弱学习器
    一般用所有训练样本的标签值的均值

\[f_0(x)=argmin_c\sum\limits_{i=1}^{N}L(y_i,h_0(x)) \]

  1. for t=1 to T do
  • \(计算负梯度:\tilde y_i=-[\frac{\partial L(y_i,F(x_i))}{\partial F(x_i)}]_{F(x)=F_{t-1}(x)},i=1,2,...,N\)
  • \(拟合残差得到基学习器\)

\[\omega_t=argmin_{\omega_t}\sum\limits_{i=1}^{N}(\tilde y_i-h_t(x;W_t)) \]

  • \(得到基学习器的权重\)

\[\alpha_t=argmin_{\alpha_t}\sum\limits_{i=1}{N}L(y_i,f_{t-1}(x_i)+\alpha_th_t(x;W_t)) \]

  • \(更新\)

\[F_t(x)=F_{t-1}(x_i)+\alpha_th_t(x;W_t) \]

2.GBDT回归的流程

  1. 初始化弱学习器
    \(初始化取所有训练样本标签值的均值,c=\frac{1.1+1.3+1.7+1.8}{4}=1.475\)
    \(得到初始学习器:f_0(x)=1.475\)
  2. \(计算负梯度=y_i-c,也就是计算残差,因为求导=\frac{\partial 1/2(y_i-c)^2}{\partial c}=c-y_i\)

3.令数据集中的标签值替换为残差

4.遍历回归树中的最佳划分点,两个循环遍历,一层是特征,一层是特征下面的每个切分点
分别计算分裂后的两组数据的平方损失,找到\(SE_l+SE_r最小的那个划分节点,(SE_l,SE_r代表左右两组残差的方差)\)
所以就是

for 所有特征值
     for 所有样本的划分点
          计算划分后左右两边的均值mu_l,mu_r
          计算左右两边的方差SE_l,SE_r
找到SE_l+SE_r 最小的特征和对应的划分点

上面的案例有两个最小值,随机取一个,选上面的年龄;21

5.依次对上面的左右两个数据集循环上面的1-4步

6.得到分类树

从上面的案例可以知道,GBDT的本质还是CART树,只不过在划分的过程中,将平方和误差损失中的\(y_i\)替换为了残差

注意事项

3.GBDT分类的流程

同回归树一样,但在第二步中的梯度要改变下,要增加一层sigmoid函数
2. \(计算负梯度=y_i-sigmoid(c)\)
\(因为有\)

\[L=-(y_i \log p+(1-y_i )\log (1-p))),y_i\in \{0,1\},p=\frac{1}{1+e^{-F(x_i)}} \]

\[\frac{\partial L}{\partial F(x)}=y_i-\frac{1}{1+e^{-F(x_i)}} \]

posted @ 2022-05-03 21:39  筷点雪糕侠  阅读(163)  评论(0编辑  收藏  举报