gbdt、xgb、lgb决策树模型

article/2025/10/4 12:50:59

目录

        • 1.决策树
            • 1.1 CART分类树
            • 1.2 CART回归树
        • 2.gbdt
        • 3.xgboost
        • 4.lightgbm
        • 5.模型对比
        • 6.参考文献

本文主要对决策树、gbdt、xgboost、lightgbm、catboost进行简述和整理,包括模型原理、优劣性等内容

1.决策树

决策树是一种通过对历史数据进行测算,对新数据进行分类和预测的算法,以此为依据,对新产生的数据结果进行预测的机器学习方法,由3个主要部分组成,分别为决策节点,分支和叶子节点,具体定义与数据结构中的树基本相同
构建决策树的方法有很多种,其中ID3、C4.5、CART树的构建方法比较常见,

决策树构建方法支持模型树结构连续值处理缺失值处理剪枝特征选择原理
ID3分类多叉树不支持不支持不支持信息增益用信息熵减条件熵得到信息增益,信息增益越大,说明使用此特征分类的信息“纯度”提升越大
C4.5分类多叉树支持支持支持信息增益率用信息增益除以分支数的信息熵,用以解决信息增益下出现的分支数越多,信息增益偏向越大的问题
CART分类 回归二叉树支持支持支持基尼系数 均方差从数据集中抽取两个样本不一样的概率,基尼系数越小,数据集的纯度越高
1.1 CART分类树

算法输入是训练集D,基尼系数的阈值,样本个数阈值
输出是决策树T
算法从根节点开始,用训练集递归的建立CART树
具体如下:
1.对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归
2.计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归
3.计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数,对于离散值和连续值都是寻找最佳切分点,通过计算基尼系数进行比较
4.在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2
5. 对左右的子节点递归的调用1-4步,生成决策树
6. 在预测阶段,加入样本a落入某个叶子节点中,节点里有多个训练样本,对于样本a的类别概率使用的是这个叶子节点里概率最大的类别,概率值为叶子中最大类别的数目/所有样本数目

1.2 CART回归树

算法输入是训练集D,均方差的阈值,样本个数阈值
输出是决策树T
算法从根节点开始,用训练集递归的建立CART树
具体如下:
1.对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归
2.计算样本集D的均方差,如果均方差小于阈值,则返回决策树子树,当前节点停止递归
3.计算当前节点现有的各个特征的各个特征值对数据集D的均方差,对于离散值和连续值都是寻找最佳切分点,通过计算均方差进行比较
4.在计算出来的各个特征的各个特征值对数据集D的均方差中,选择均方差最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2
5. 对左右的子节点递归的调用1-4步,生成决策树
6. 在预测阶段,加入样本a落入某个叶子节点中,节点里有多个训练样本,对于样本a的预测值使用的是这个叶子节点里各个训练样本的均值或者中位值

2.gbdt

GBDT是集成学习boosting的方法,可以看做是N棵树组成的加法模型,对应的公式如下:
在这里插入图片描述
x表示输入样本,c表示每棵决策树,I表示每棵树的权重
算法实现过程如下:
输入:训练数据集T,损失函数为L
输出:回归树F(x)
1.初始化
估计使损失函数极小化的常数值,它是只有一个根节点的树,一般平方损失函数为节点的均值,绝对损失函数为节点样本的中位数
在这里插入图片描述
2.对m=1,2…M(m表示迭代次数,即生成的弱学习器个数)
(a)对样本i=1,2…,N,计算损失函数的负梯度在当前模型的值,将它作为残差的估计,对于平方损失函数,它就是所说的残差,对于一般损失函数,就是残差的近似值
在这里插入图片描述
(b)对于输入样本拟合一个回归书,得到第m棵树的叶节点区域Rj,j表示每棵树的叶节点个数
©对j=1,2…J,利用线性搜索,估计叶节点区域的值,使损失函数最小化,计算
在这里插入图片描述
(d)更新
在这里插入图片描述
(3)得到最终的回归树
在这里插入图片描述
注:对于gbdt分类算法,损失函数为log损失,残差为真实label - softmax后输出的值

3.xgboost

xgboost官方文档
xgboost是一种level-wise生长策略的集成树模型,相比于比较容易过拟合的gbdt,做了一些工作,具体如下
目标函数:
在这里插入图片描述
将目标函数进行泰勒展开,取前三阶,移除高阶小项,转化为如下函数:
在这里插入图片描述
上式中的第一项表示损失误差,第二项是正则项,控制树的负责督,防止过拟合
最优切分点分割算法
在这里插入图片描述

4.lightgbm

LightGBM 中文文档
lightgbm是一个基于leaf-wise的集成决策树模型,相比于xgboost,在速度上和内存消耗上有极大的改进,精度基本与xgboost相同,甚至有时可以超过xgboost,具体工作如下
LightGBM = XGBoost + Histogram + GOSS + EFB,即lightgbm主要的工作改进有结合直方图算法,GOSS算法,EFB算法
直方图算法
直方图算法是替代XGBoost的预排序(pre-sorted)算法的。
预排序算法首先将样本按照特征取值排序,然后从全部特征取值中找到最优的分裂点位,该算法的候选分裂点数量与样本数量成正比。
而直方图算法通过将连续特征值离散化到固定数量(如255个)的bins上,使得候选分为点位为常数个(num_bins -1).
此外,直方图算法还能够作直方图差加速。当节点分裂成两个时,右边叶子节点的直方图等于其父节点的直方图减去左边叶子节点的直方图。从而大大减少构建直方图的计算量。
在这里插入图片描述
GOSS算法
GOSS算法全称为Gradient-based One-Side Sampling,即基于梯度的单边采样算法,主要思想是通过对样本采样的方法来减少计算目标函数增益时候的复杂度
如果对全部样本进行随机采样,势必会对目标函数增益的计算精度造成较大的影响,GOSS算法的创新之处在于它只对梯度绝对值较小的样本按照一定比例进行采样,而保留了梯度绝对值较大的样本,由于目标函数增益主要来自于梯度绝对值较大的样本,因此这种方法在计算性能和计算精度之间取得了很好的平衡
EFB算法
EFB算法全称是Exclusive Feature Bundling,即互斥特征绑定算法,EFB算法可以有效减少用于构建直方图的特征数量,从而降低计算复杂度,尤其是特征中包含大量稀疏特征的时候
在许多应用场景下,数据集中会有大量的稀疏特征,这些稀疏特征大部分样本都取值为0,只有少数样本取值非0,通常可以认为这些稀疏特征是互斥的,即它们几乎不会同时取非零值,利用这种特性,可以通过对某些特征的取值重新编码,将多个这样互斥的特征捆绑成为一个新的特征
在这里插入图片描述

5.模型对比

.XGBoost的优缺点
与GBDT对比
1.GBDT的基分类器只支持CART树,而XGBoost支持线性分类器,此时相当于带有L1和L2正则项的逻辑回归(分类问题)和线性回归(回归问题)
2.GBDT在优化时只使用了一阶倒数,而XGBoost对目标函数进行二阶泰勒展开,此外,XGBoost支持自定义损失函数,只要损失函数二阶可导
3.XGBoost借鉴随机森林算法,支持列抽样和行抽样,这样即能降低过拟合风险,又能降低计算。
4.XGBoost在目标函数中引入了正则项,正则项包括叶节点的个数及叶节点的输出值的L2范数。通过约束树结构,降低模型方差,防止过拟合。
5.XGBoost对缺失值不敏感,能自动学习其分裂方向
6.XGBoost在每一步中引入缩减因子,降低单颗树对结果的影响,让后续模型有更大的优化空间,进一步防止过拟合。
7.XGBoost在训练之前,对数据预先进行排序并保存为block,后续迭代中重复使用,减少计算,同时在计算分割点时,可以并行计算

与LightGBM对比
1.XGBoost采用预排序,在迭代之前,对结点的特征做预排序,遍历选择最优分割点,数据量大时,贪心法耗时,LightGBM方法采用histogram算法,占用的内存低,数据分割的复杂度更低,但是不能找到最精确的数据分割点。同时,不精确的分割点可以认为是降低过拟合的一种手段。
2.LightGBM借鉴Adaboost的思想,对样本基于梯度采样,然后计算增益,降低了计算
3.LightGBM对列进行合并,降低了计算
4.XGBoost采样level-wise策略进行决策树的生成,同时分裂同一层的节点,采用多线程优化,不容易过拟合,但有些节点分裂增益非常小,没必要进行分割,这就带来了一些不必要的计算;LightGBM采样leaf-wise策略进行树的生成,每次都选择在当前叶子节点中增益最大的节点进行分裂,如此迭代,但是这样容易产生深度很深的树,产生过拟合,所以增加了最大深度的限制,来保证高效的同时防止过拟合。

6.参考文献

1.决策树算法原理(上)
2.决策树算法原理(下)
3.决策树分类和预测算法的原理及实现
4.梯度提升树(GBDT)原理小结
5.GBDT基本原理及算法描述
6.《Greedy Function Approximation:A Gradient Boosting Machine》
7.XGBoost原理
8.GDBT模型、XGBoost和LightGBM之间的区别与联系


http://chatgpt.dhexx.cn/article/Sd9RcwaJ.shtml

相关文章

树模型与线性模型的融合模型(Python实现)

目录 一、树模型与线性模型的融合模型 二、Python sklearn实现GBDTLR融合模型 一、树模型与线性模型的融合模型 树模型GBDT原理:https://blog.csdn.net/woniu201411/article/details/83114226 线性模型LR原理:https://blog.csdn.net/woniu201411/art…

机器学习理论与实战(九)回归树和模型树

前一节的回归是一种全局回归模型,它设定了一个模型,不管是线性还是非线性的模型,然后拟合数据得到参数,现实中会有些数据很复杂,肉眼几乎看不出符合那种模型,因此构建全局的模型就有点不合适。这节介绍的树回归就是为了解决这类问题,它通过构建决策节点把数据数据切分成…

决策树模型

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 决策树模型的建树依据主要用到的是基尼系数的概念。基尼系数(gini)用于计算一个系统中的失序现象,即系统的混乱程度。基尼系数越高,系统的混乱程度就越高&#x…

新版HyperMesh的Assemblies中调出下拉菜单查看Component(装配关系模型树)

新版HyperMesh的Assemblies中调出下拉菜单查看Component(装配关系模型树) 从Altair更新的2019版本开始,在Model模型树中找不到Assemblies了,这样导致好多用户一直在用14或者17版本,其实这次更新不是把这个功能取消掉了…

Cesium bim模型加载并与模型树关联(分层加载)

很久都没写文章了,最近实在是太忙了,向各位关注我的小伙伴致个歉! 最近没事儿写了个模型树和模型关联的功能,处理工具是用的cesiumlab。 说明一下为什么要用cesiumlab: 网上现在有很多的模型转换工具,如…

举例讲清楚模型树和回归树的区别

根据上面图中的一个例子,我们来分析下,假设A、B两点是曲线上的噪声点。 模型树的叶子节点是一个分段线性函数[1]。 回归树的叶子节点是取一个区间的平均(一个常数值)。 上述图中AB区间的均值是一个暗点。 所以: 对于节点A而言,模…

[Ansys Workbench] Mechanical 界面显示模型树窗口和详细信息窗口

根据这个回答才找到的……我之前也没注意,别人问我我才去想的 https://forum.ansys.com/discussion/8740/workbench-tree-outline 一般的方法是在 主页 - 布局 - 管理 里面选择显示哪个视窗 如果就是想显示模型树窗口和详细信息窗口,可以使用快捷键 Ctr…

creo文件如何检入服务器,CREO模型树配置的保存与检索

保存模型树配置 (1)单击 然后单击“保存设置文件”(Save Settings File)。“保存模型树配置”(Save Model Tree Configuration) 对话框打开。 (2)接受默认文件名 tree.cfg 或键入新名称。 (3)单击“保存”(Save)。 手动检索模型树配置 (1)单击 然后单击“打开设置文件”(Open S…

Graphviz绘制模型树2——XGBoost模型的可解释性

从二分类模型中的树重新理解XGBoost算法 一.对绘制的树简单解释1.1类别判断1.2树的最大层级1.3效果较差情况 二.从数据来解释一棵树2.1EXCEL构建第1颗树2.2第1棵树的数据解释2.3效果较差的节点解释 三.N颗树如何预测样本3.1样本22数据3.2样本22落入叶子情况3.3样本22的总结 四.…

决策树(二):回归树和模型树

下面介绍的回归树和另一篇文章介绍的分类树,都属于决策树范畴。分类树的模型是每个非叶子节点都是一个分类特征,按照该分类特征的不同取值,将数据集分为多少个子集;并且分类树模型我们要找的是测试数据集的最终分类结果&#xff0…

模型树——就是回归树的分段常数预测修改为线性回归 对于非线性回归有较好的预测效果...

说完了树回归,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小。如果把叶子节点换成分段线性函数,那么就变成了模型树,如(图六)所示: &…

《机器学习实战》9.3树回归之模型树和项目案例

《机器学习实战》9.3树回归之模型树和项目案例 搜索微信公众号:‘AI-ming3526’或者’计算机视觉这件小事’ 获取更多人工智能、机器学习干货 csdn:https://blog.csdn.net/baidu_31657889/ github:https://github.com/aimi-cn/AILearners 本文出现的所有…

模型树–M5

模型树–M5 模型树推广了回归树的概念,它与回归树的2个重要不同在于: 叶节点上不是常量,而是一个线性函数模型。分割空间的标准不是降低平方误差,而是降低样本标准差。 相比于回归树,模型树的优点在于:回…

机器学习——模型树

和回归树(在每个叶节点上使用各自的均值做预测)不同,模型树算法需要在每个叶节点上都构建出一个线性模型,这就是把叶节点设定为分段线性函数,这个所谓的分段线性(piecewise linear)是指模型由多…

深度学习人脸检测与人脸识别

一、概述 1. 基本概念 人脸是个人重要的生物特征,业界很早就对人脸图像处理技术进行了研究。人脸图像处理包括人脸检测、人脸识别、人脸检索等。人脸检测是在输入图像中检测人脸的位置、大小;人脸识别是对人脸图像身份进行确认,人脸识别通常…

各类人脸识别算法的总体分析

一、人脸识别算法之特征脸方法(Eigenface) 1、原理介绍及数据收集 特征脸方法主要是基于PCA降维实现。 详细介绍和主要思想可以参考 http://blog.csdn.net/u010006643/article/details/46417127 上述博客的人脸数据库打不开了,大家可以去下…

人脸识别算法初次了解

人脸识别算法初次了解 这是转载别人的帖子,觉得好,大家一块学习http://www.cnblogs.com/guoyiqi/archive/2011/07/28/2129300.html 前言 在写此文之前,先扯点东西。我一直在找一个东西,让我思考,让我久久的深陷其…

深扒人脸识别技术,原理、算法深度解析

在深度学习出现后,人脸识别技术才真正有了可用性。这是因为之前的机器学习技术中,难以从图片中取出合适的特征值。轮廓?颜色?眼睛?如此多的面孔,且随着年纪、光线、拍摄角度、气色、表情、化妆、佩饰挂件等…

基于特征脸的人脸识别算法概述

基于特征脸的人脸识别算法概述 —— 才疏学浅, 难免有错误和遗漏, 欢迎补充和勘误. 特征脸识别算法(EigenFaceRecognizer)是一种在主成分分析(PCA)中进行人脸辨识的技术。基于特征脸的驾驶人身份识别流程图为: 图1 …

人脸检测与识别

人脸检测( Face Detection )和人脸识别技术是深度学习的重要应用之一。本章首先会介绍MTCNN算法的原理, 它是基于卷积神经网络的一种高精度的实时人脸检测和对齐技术。接着,还会介绍如何利用深度卷积网络提取人脸特征,…