2020机器学习GBDT(2)

作者: zidea | 来源:发表于2020-03-29 19:51 被阅读0次
machine_learning.jpg

课前甜点

现在年轻人工作压力都比较大,所以难免用一些饮料和小甜品来带走压力排出体外,当然也会多少影响身体健康。但是想起他排压功效我们难免会用一点。


coffee.jpg

提升树我们这里解释一下,我们知道所有模型都类似于一个函数来反应数据输入和输出之间的关系 x\rightarrow y,在 GDBT 中我们可以将每颗决策树也可以看出函数 T 。

  • T_1(x) \rightarrow y_1 所产生的残差 y_1 - y
  • T_2(x) \rightarrow y_2 这里的 y_2y_1 - y 做对比找到残差为 y_2 + y_1 - y,那么我们这里 y_2 要去拟合不是 y 而是 y_1 没有拟合上的那部分,也就是 y_1 所产出残差
  • T_3(x) \rightarrow y_3 所产生的残差为 y_3 + y_2 + y_1 - y

只有大家把这个这个过程理解好了,从上面过程我们不难发现每一次生成树数据 x 没有发生变化而 y 发生了变化,每一次输入都是上一次的残差和 x 组合作为下一颗决策树的训练数据。

这里值得注意如果我们使用损失函数是平方损失,那么我们对观测值求梯度也就是等于求观察值的残差,这一点我们想验证一下???。如何我们损失函数不是平方差损失时,需要使用梯度来代替求残差方式来做损失函数。

  • 加法模型
    怎么理解什么是加法模型

\begin{aligned} \hat{y}^{(0)} = 0 \\ \hat{y}^{(1)} = f_1(x) = \hat{y}^{(0)} + f_1(x) \\ \hat{y}^{(2)} = f_1(x) + f_2(x)= \hat{y}^{(1)} + f_2(x) \\ \hat{y}^{(3)} = f_1(x) + f_2(x) + f_3(x)= \hat{y}^{(2)} + f_3(x) \\ \end{aligned}

上面过程大家想必已经很清楚了,我们可以通过不断增加 f(x) 到模型增,将所有 f(x) 求和得到新的估计值
GDBT = \hat{y}_n = \sum_{i=1}^n f_i(x) = \hat{y}^{n-1} + f_n(x)

h(x) = \sum_{m=1}^M \beta_m f_m(x)
这里暂时可以忽略\beta_m 就和下面提升树模型是一样,其实 T(决策树)可以看成一个函数
f_M(x) = \sum_{m=1}^M T(x,\theta_m)

  • 损失函数
    接下拉我们就可以定义损失函数,
    \sum_{i=1}^N L(y_i,h(x)) = \sum_{i=1}^N L(y_i,\sum_{m=1}^M f_m(x))
    我们可以将 h(x) 替换为\sum_{m=1}^M f_m(x) 这表示 h(x) 是由 M 分类器不断拟合上一次残差的函数所组成。我们接下就是今天重点也就是如何使用梯度来做这件事情
    \sum_{i=1}^N L(y_i,h(x)) = \sum_{i=1}^N L(y_i,h_{m-1}(x_i) + f_m(x_i))

  • 推导

    • 初始化 h_0(x) = 0 我们初始化h_0
    • 定义损失函数 我们一共 M 树在梯度提升树中,m = 1,2, \dots , M 那么损失函数就是
      \sum_{i=1}^N L(y_i,h_{m-1} + f_m(x))
    • 转换
      我们通过下面损失函数进行一阶泰勒展开,这里理解还有有点难度,希望大家停下来思考几分钟,细细品味如何实现泰勒展开
      L(y_i,h_{m-1} + f_m(x)) \approx L(y_i,h_{m-1}(x_i)) + \frac{\partial L(y_i,h_{m-1}(x_i))}{\partial h_{m-1}(x_i)} \times f_m(x)
      如何假设 f_m(x) = - \frac{\partial L(y_i,h_{m-1}(x_i))}{\partial h_{m-1}(x_i)}
      条件成立前提下就有下面不等式成立
      L(y_i,h_{m-1} + f_m(x)) = L(y_i,h_{m-1}(x_i)) - f^2_m(x)
      L(y_i,h_{m-1} + f_m(x)) \le L(y_i,h_{m-1}(x_i))

    那么梯度提升树,f_m(x) 就是上一个损失函数的梯度即可,无需求具体决策树,求出梯度加进去就可以了。那么也就是我们可以一直去求梯度然后加上去就可以得到想要的模型。
    我们现在用g_i = \frac{\partial L(y_i,h_{m-1}(x_i))}{\partial h_{m-1}(x_i)} 然后倒入到上面式子

L(y_i,h_{m-1} + f_m(x)) = L(y_i,h_{m-1}(x_i)) + f_m(x_i)g_i
f_m(x_i) 代表是一颗决策树,当我们输入 x_i 到这颗决策树后,x_i 最后就会落到某一个叶子节点,那么如果假设决策树有 T 个叶节点,我们用C_t\, t\in \{1,2,\dots,T\} 来表示每一个叶节点。那么现在我们可以将损失函数进一步进行变换
L(y_i,h_{m-1} + f_m(x)) = L(y_i,h_{m-1}(x_i)) + C_tg_i \, C_t \, t \in \{1,2,\dots,T\}
现在我们把求和带回到这个式子
\sum_{i=1}^N \left[ L(y_i,h_{m-1}(x_i)) + C_tg_i \right]
在 m 损失函数中(y_i,h_{m-1}(x_i)) 是上一个决策树的值与当前损失函数没有关系可以看成固定值,与损失函数最小值没有关系。
\sum_{i=1}^N C_t g_i 最小时我们损失函数就达到最小值。上面是按样本进行求和
\sum_{t=1}^T (\sum_{x_i \in I_t} g_i)C_t

屏幕快照 2020-03-29 下午4.40.34.png

而这里是按决策树叶节点来进行求和,\sum_{x_i \in I_t} 表示落在同一 t 节点上的样本数,也就是将样本根据其落在决策树哪一个叶节点进行分类求和后,在去对所有叶节点进行进行求和来替换掉原有按样本进行求和。我们用G_t = \sum_{x_i \in I_t} g_i 来进行替换上式得到下面式子
\sum_{t=1}^T G_tC_t
通过就可以进行划分,通过对 G_tC_t 进行划分我们的两个叶节点然后分别计算G_LC_LG_RC_R 来计算有点类似信息增益。然后可以根据样本特征来分别计算划分找到 Gain 最大的情况来决定根据哪个特征进行分类。

Gain = G_tC_t - (G_LC_L + G_RC_R)

屏幕快照 2020-03-29 下午4.40.02.png

缺点

并非是真的拟合残差,只是拟合梯度,如果使用平方损失时,拟合梯度就是拟合残差。

最后希望大家关注我们微信公众号


wechat.jpeg

相关文章

网友评论

    本文标题:2020机器学习GBDT(2)

    本文链接:https://www.haomeiwen.com/subject/xkouuhtx.html