当前位置: 首页 > article >正文

机器学习:CatBoost模型(高级版)——高效且强大的树形模型

        作为梯度提升决策树(GBDT)家族的一员,CatBoost具有高效、精确和低调参的特点,广泛应用于分类、回归等任务。CatBoost的核心原理与传统的GBDT相似,但它通过一些创新的方法来提升效率和处理类别特征的能力,尤其是对类别特征的处理。与XGBoost 和 LightBMG一样,都是目前被主流的树形模型,CatBoost 有自己独特的优势。

基于 GBDT 的框架

        GBDT是一种集成学习方法,它通过不断训练新的树来拟合前一轮的残差。每棵树都试图减少预测误差。算法的核心是通过优化一个损失函数来最小化误差,常见的损失函数包括均方误差(MSE)或对数损失等。

        GBDT 的基本原理可以参考文章A。若要深入了解CatBoost的实现原理,可以先看看XGBoost这篇文章,再来看该本文章,他们都利用了二阶泰勒展开的梯度和二阶海森矩阵来近似计算,但在其它某些方面,他们还是有很大的差别。

CatBoost的创新点与特点

(1) 均值编码 与 Ordered Boosting

在传统的机器学习算法中,类别特征通常通过两种常见的方法进行处理:

  • 独热编码:将每一个类别特征值转化为一个二进制向量,表示类别的存在与否。

  • 目标编码:将类别特征的每个类别用该类别的目标变量均值替代。例如,回归问题中可能使用全部数据中每个类别的目标均值来代替类别C

然而,独热编码在处理类别特征时可能会导致维度爆炸,尤其是在类别非常多的情况下。而目标编码方法容易导致 数据泄露,即在模型训练时使用了测试集信息,从而引发过拟合。

        CatBoost 通过引入 均值编码 和 Ordered Boosting 技术来处理类别特征,避免了过拟合和数据泄露问题。具体来说,CatBoost 对每个类别特征采用了一种基于 累计统计量 的编码方式。

CatBoost的均值编码:

  • 假设类别特征 C 有 k 个类别 c1,c2,...,ck,每个类别 ci​ 对应一个均值编码。对于类别 ci​,CatBoost 在计算其均值时,并不会使用整个数据集中的信息,而是根据训练过程中的顺序,避免使用测试数据的标签信息,从而避免数据泄露。 

  • 具体来讲,我们在对第 i 个样本的类别特征C进行编码使,我们使用的是前 i−1 个样本中同类别(类别与ci相同)的目标值均值对 ci 进行编码,避免使用 i-1 之后的样本。

有序提升(Ordered Boosting):

CatBoost 在处理连续特征时,还采用了一种叫做 有序提升(Ordered Boosting) 的技术,来避免数据泄露和过拟合。

        在传统的梯度提升方法中,每次分裂计算时都会使用整个训练集的梯度和目标值。然而,在有序提升方法中,CatBoost 确保在训练过程中计算的每个分裂点增益时,只有当前样本之前的数据才参与计算。这意味着在每次增益计算时,只使用 历史样本的梯度信息,而不是当前分裂点的数据,这有助于防止数据泄露和过拟合。

  • 历史数据的使用:当选择分裂点时,CatBoost 不会使用当前树的所有数据(包括当前样本),而是只使用到当前样本之前的数据。这确保了训练过程中的信息不会泄漏到模型的未来预测中。

  • 增益计算时的有序性:在每次分裂时,CatBoost 会基于 历史数据 的梯度和二阶海森矩阵来计算增益,确保每次分裂点的选择是“无未来数据”的。

(2) 对称树结构

        CatBoost 使用 对称树结构来构建每一棵决策树,这是其与其他树形模型的一个显著区别。其他树形模型使用非对称树结构,即每棵树的每个节点都可以有不同的分裂方式和深度。相比之下,CatBoost 的对称树结构确保每一层的所有节点都采用相同的分裂规则,从而提高了训练效率并减少了计算复杂度。具体来讲,对称树结构要求同一层必须使用相同的分裂特征和分裂条件。

CatBoost 的主要优势

1. 对类别特征的处理

  • CatBoost的一个显著优势是其在处理类别特征时的表现。与XGBoost和LightGBM相比,CatBoost能够自动识别并有效处理类别特征,而无需进行复杂的预处理或手动编码(如独热编码或标签编码)。这意味着对于包含大量类别变量的数据集,CatBoost的使用更加便捷且更具优势。

  • XGBoost和LightGBM通常需要对类别特征进行编码(如独热编码、标签编码等),这可能导致模型训练的时间增加,且在某些情况下编码不当可能影响模型性能。

2. 算法的稳定性和精度

        CatBoost使用一种被称为“ordered boosting”的技术,它通过顺序地处理样本来减少偏差,从而改善模型的稳定性和预测的精度。相比之下,XGBoost和LightGBM虽然也非常强大,但它们在某些情况下可能更容易出现过拟合,尤其是在数据特征复杂或噪声较多的情况下。

3. 超参数调优的简便性

        CatBoost在超参数调优上相对较为简便,因为它在默认参数下通常能获得不错的性能,减少了对参数调节的需求。相比之下,XGBoost和LightGBM可能需要更多的参数调优,以获得最佳的性能,尤其是在不同数据集上的表现差异较大时。

4. 内存和计算效率

        这个要具体情况具体分析,涉及大规模数据集还是小规模数据集,是否是稀疏数据集等。

 

三大主流模型对比

#  文章内容来源于各渠道整理。若对大噶有帮助的话,希望点个赞支持一下叭!

#  文章如有错误,欢迎大噶指正!

 

 


http://www.kler.cn/a/395176.html

相关文章:

  • Spark RDD中常用聚合算子源码层面的对比分析
  • 3588 yolov8 onnx 量化转 rknn 并运行
  • Wireshark中的length栏位
  • K8S单节点部署及集群部署
  • Windows C++ TCP/IP 两台电脑上互相传输字符串数据
  • Springboot配置全局异常通用返回
  • 深度学习知识点5-马尔可夫链
  • 等保测评怎么做?具体流程是什么?
  • 鸿蒙UIAbility
  • 基于微信小程序的在线疫苗预约的设计与实现,LW+源码+讲解
  • 搜维尔科技:Haption力触觉交互,虚拟机械装配验证
  • 【K8S问题系列 | 9】如何监控集群CPU使用率并设置告警?
  • C++《继承》
  • SpringBoot -- 自动化装配源码
  • 江协科技之STM32驱动1.3寸/0.96寸/0.91寸OLED显示屏介绍
  • js中import引入一个export值可以被修改。vue,react
  • 【计网】计算机网络概述笔记
  • 使用frp工具实现内网穿透
  • 基于yolov8、yolov5的车型检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • Scala的迭代器
  • javaWeb小白项目--学生宿舍管理系统
  • C语言不创建中间变量交换2个数
  • win32 / WTL 开发多线程应用,子线程传递大对象给UI线程(主窗口)的方法
  • vite + vue3 + ts解决别名引用@/api/user报错找不到相应的模块
  • 前端系统设计面试题(二)Javascript\Vue
  • 从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112