提升树与梯度提升树算法

简介: 我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。

我们对Boosting家族的Adaboost算法做了总结,本文就对Boosting家族中另一个重要的算法梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT)做一个总结。GBDT有很多简称,有GBT(Gradient Boosting Tree), GTB(Gradient Tree Boosting ), GBRT(Gradient Boosting Regression Tree), MART(Multiple Additive Regression Tree),其实都是指的同一种算法,本文统一简称GBDT。GBDT在BAT大厂中也有广泛的应用,假如要选择3个最重要的机器学习算法的话,个人认为GBDT应该占一席之地。
我们先来看看提升树:
提升树模型实际是将多个决策树简单的叠加起来,用数学模型可表示为

$$ f_M(x) = \sum_{m=1}^M T(x;\Theta_m) $$

其中,$T(x;\Theta_m)$表示决策树,$\Theta_m$ 表示决策树的参数;$M$ 为树的个数。
针对样本$D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}$,提升树模型的训练就是,选择决策树的参数$\Theta=\{\Theta_1,\Theta_2,...,\Theta_M\}$以最小化损失函数 $\sum L(y_i,f_M(x_i))$,即

$$ \arg \min_\Theta \sum_{i=1}^N L(y_i,f_M(x_i)) = \arg \min_\Theta \sum_{i=1}^N L\left(y_i, \sum_{m=1}^M T(x;\Theta_m)\right) $$

这里,损失函数用来反应“样本标签 $y_i$ ”与提升树的输出 $f_M(x_i)$ 之间的差别,这里可以选择平方误差损失函数:

$$ L(y, f(x))=\left( y-f(x) \right)^2 $$

提升树模型也可以表示为迭代过程

$$ f_m(x)=f_{m-1}(x)+T(x;\Theta_m),~ m=1,2,...,M $$

因此,提升树的训练也可以按照迭代的过程来完成,在 $m$次迭代中,生成一个新的决策树$T(x;\Theta_m)$
具体而言,首先初始化提升树 $f_0(x)=0$,第 $m$ 步确定第 $m$ 个决策树$T(x;\Theta_m)$,即选择合适的决策树参数 $\Theta_m$,使损失函数最小,即

$$ \hat{\Theta}_m = \arg \min_{\Theta_m} \sum_{i=1}^N L(y_i, f_{m-1}(x_i) + T(x_i;\Theta_m)) $$

对于上式的求解,即为提升树的关键所在。如果采用平方损失函数,则有

$$ \begin{eqnarray*} L(y_i,f_{m-1}(x_i)+T(x_i;\Theta_m)) &=& \left[\,y_i - f_{m-1}(x_i) - T(x_i;\Theta_m)\right]^2 \\ &=& \left[\,r_{m,i} - T(x_i;\Theta_m)\right]^2 \end{eqnarray*} $$

这里, $r_{m,i}=y_i-f_{m-1}(x_i)$ 表示模型$f_{m-1}(x)$拟合数据 $(x_i,y_i)$ 的残差。
就变成了选择合适的决策树参数$\Theta_m$,使得决策树的输出 $T(x_i;\Theta_m)$与 残差 $r_{m,i}$ 的误差尽可能小。因此,可以使用 $\{(x_i,r_{m,i})\}_{i=1,2,...,N}$来作为决策树$T(x;\Theta_m)$的样本集,按照常规的决策树生成过程获得参数的最优值$\hat{\Theta}_m$。
综上,我们可以得到提升树算法如下:

image


上面我们讲了提升树,在某些时候不方便求残差,梯度提升树则是用损失函数的负梯度方向值来近似拟合残差,下面来看看具体细节:

image
image

二元GBDT分类算法
对于二分类问题,比较常用的损失函数为

$$ L(y,f(x))=\log (1+\exp (-y \cdot f(x))) \tag{12} $$

其中 $y∈{−1,+1}$,此时的负梯度误差为

$$ r_{m,i} = -\left[ \frac{\partial L(y_i,f(x_i))}{\partial f(x_i)} \right]_{f(x)=f_{m-1}(x)} = \frac{y_i}{1+\exp (y_i f_{m-1}(x_i))} $$

对于生成决策树,其叶子节点的输出值为

$$ c_{m,j} = \arg \min_c \sum_{x_i\in R_{m,j}} \log (1+\exp (-y_i (f_{m-1}(x_i) + c))) $$

由于上式比较难优化,我们一般使用近似值代替

$$ c_{m,j} =\left. \sum_{x_i\in R_{m,j}} r_{m,i} \middle / \sum_{x_i\in R_{m,j}} |r_{m,i}|(1-|r_{m,i}|) \right. $$

多元GBDT分类算法
对于多分类问题,假设类别为$ K$,一般采用的损失函数为

$$ L(y,f(x)) = - \sum_{k=1}^K y_k log p_k(x) $$

其中,如果样本输出类别为 $k$ ,则 $y_k=1$ ;$p_k(x)$ 表示模型 $f(x)$判定 $x$属于第$k$ 类的概率,其表达式为

$$ p_k(x) = \frac{\exp (f_k(x))}{ \sum_{l=1}^K \exp(f_l(x))} $$

注意此处,对于多分类问题,回归树训练时,会为每一个类别训练一个决策树。
由此,我们可以计算出第 $m$ 轮的第$i$个样本对应类别$ l$的负梯度误差为

$$ r_{m,i,l} = -\left[ \frac{\partial L(y_i,f(x_i))}{\partial f(x_i)} \right]_{f(x)=f_{m-1,l}(x)} = y_{i,l} - p_{m,l}(x_i) $$

观察上式可以看出,其实这里的误差就是样本$i$对应类别$l$ 的真实概率和$m−1$ 轮预测概率的差值。
对于生成的决策树,对应第$l$类别的决策树的叶节点输出为

$$ c_{m,l,j} = \arg \min_c \sum_{x_i \in R_{m,l,j}} L(y_{i,l}, f_{m-1,l}(x_i) + c) $$

类似的,我们用近似值代替

$$ c_{m,l,j} = \frac{K-1}{K} \frac{\sum\limits_{x_i \in R_{m,l,j}}r_{m,i,l}}{ \sum\limits_{x_i \in R_{m,l,j}} |r_{m,i,l}|(1-|r_{m,i,l}|) } $$

GBDT 的正则化

  • 第一种是和Adaboost类似的正则化项,即使用步长(learning rate),定义为 αα 。常规的提升回归树的迭代为

$$ f_m(x) = f_{m-1}(x) + T(x;\Theta_m) $$

引入正则化后,其迭代过程为

$$ f_m(x) = f_{m-1}(x) + \alpha T(x;\Theta_m) $$

其中,$0<α≤1$。对于同样的训练集学习效果,较小的 αα 意味着我们需要更多的弱学习器的迭代次数。通常我们用步长和迭代最大次数一起来决定算法的拟合效果。

  • 第二种正则化的方式是通过子采样比例(subsample)。取值为(0,1]。注意这里的子采样和随机森林不一样,随机森林使用的是放回抽样,而这里是不放回抽样。如果取值为1,则全部样本都使用,等于没有使用子采样。如果取值小于1,则只有一部分样本会去做GBDT的决策树拟合。选择小于1的比例可以减少方差,即防止过拟合,但是会增加样本拟合的偏差,因此取值不能太低。推荐在[0.5, 0.8]之间。
    使用了子采样的GBDT有时也称作随机梯度提升树(Stochastic Gradient Boosting Tree, SGBT)。由于使用了子采样,程序可以通过采样分发到不同的任务去做boosting的迭代过程,最后形成新树,从而减少弱学习器难以并行学习的弱点。
  • 第三种称为 Regularized Learning Objective,将树模型的复杂度作为正则项显式地加进优化目标里,这也是XGBoost实现的独到之处。其具体实现可以参考文献[7],在这里列出其加入正则化后的优化目标

$$ L_{r}(y,f(x)) = L(y,f(x)) + \sum_{m} \Omega(T(x;\Theta_m)) \\ \mathrm{where} ~~ \Omega(T(x;\Theta_m)) = \gamma T_{leaf} + \frac12 \lambda \| w \|^2 $$

其中,$L(y,f(x))$ 为常规的损失函数;$\Omega(T(x;\Theta_m))$表示决策树的复杂度,$T_{leaf}$为树叶节点个数,$w$ 为叶节点的固定输出值$c_m$组成的向量;$γ,λ$为相应的系数。

  • 最后还有一种就是类 似DeepLearning 的 Dropout ,其具体可以参考文献[8]。通俗地讲,每次新加一棵树,这棵树要拟合的并不是之前全部树ensemble后的残差,而是随机抽取的一些树ensemble。

摘自:https://www.cnblogs.com/zengzhen94/p/8744970.html

目录
相关文章
|
1月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
151 4
|
4月前
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
130 2
|
6月前
|
存储 机器学习/深度学习 算法
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty 敏感词
KMP、Trie树 、AC自动机‌ ,三大算法实现 优雅 过滤 netty  敏感词
|
6月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
181 17
|
6月前
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
170 7
|
5月前
|
机器学习/深度学习 算法 搜索推荐
决策树算法如何读懂你的购物心理?一文看懂背后的科学
"你为什么总能收到刚好符合需求的商品推荐?你有没有好奇过,为什么刚浏览过的商品就出现了折扣通知?
|
8月前
|
人工智能 算法 语音技术
Video-T1:视频生成实时手术刀!清华腾讯「帧树算法」终结闪烁抖动
清华大学与腾讯联合推出的Video-T1技术,通过测试时扩展(TTS)和Tree-of-Frames方法,显著提升视频生成的连贯性与文本匹配度,为影视制作、游戏开发等领域带来突破性解决方案。
276 4
Video-T1:视频生成实时手术刀!清华腾讯「帧树算法」终结闪烁抖动
|
8月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
229 3
 算法系列之数据结构-Huffman树
|
10月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
439 3
|
算法
树的遍历算法有哪些?
不同的遍历算法适用于不同的应用场景。深度优先搜索常用于搜索、路径查找等问题;广度优先搜索则在图的最短路径、层次相关的问题中较为常用;而二叉搜索树的遍历在数据排序、查找等方面有重要应用。
289 2

热门文章

最新文章

下一篇
oss云网关配置