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

CATBOOST算法总结


特殊点:
1.处理类别特征时,CatBoost引入了基于排序的目标编码(order-based target encoding)方法,避免了常见的类别特征高维问题和过拟合风险
排序数据:将数据按照某种顺序排列(如样本索引的顺序或时间戳顺序)。
递增计算均值:对于每一个类别,按顺序递增地计算其目标变量的均值。(只计算在这个排序之前的)
添加噪声:在计算均值时引入一定的噪声,以减少过拟合的风险。

优点:
防止目标泄漏:通过有序递增地计算均值,当前样本的目标变量不被用于其自身的编码,这有效地防止了目标泄漏。
减少过拟合:通过引入噪声,目标编码变得更加稳健,可以有效减少过拟合的风险。
适应类别特征:对于高基数的类别特征,这种方法尤其有效,因为它避免了one-hot编码导致的高维问题。

叶节点权重、分裂节点的计算方法也有更新

2.对称树(Symmetric Trees)结构,使得模型训练和预测更加高效,同时降低了内存消耗。

即所有的节点按照相同的规则进行分裂,确保树的结构对称。这种对称性使得树的结构更加规则和可预测。SymmetricTree特点如下:

对称结构:所有层的分裂点都相同,树的结构对称。
高效计算:对称结构使得计算过程更高效,因为可以进行向量化运算。
内存利用率高:由于结构固定,对称树的存储更加简洁,内存利用率高。

Depthwise 策略是一种逐层生长的方法,即每次扩展树的一层,选择当前层的所有节点进行分裂,也就是XGB的生长策略。这种方法通过在每层选择最优的分裂点,逐步增加树的深度。Depthwise特点如下:
逐层分裂:每一层的所有节点都参与分裂。
全局最优:每次选择全局最优的分裂点,逐层构建树。

Lossguide 策略是一种基于损失函数指导的生长方法。与Depthwise方法不同,Lossguide策略每次选择对整体损失函数影响最大的节点进行分裂,而不是逐层分裂。也就是LGBM的生长策略。Lossguide特点:

模型收缩:
模型收缩(Model Shrinkage)是CatBoost用于控制模型复杂度的一种技术,通过逐步减少模型中某些参数的影响,从而防止过拟合并提高模型的泛化能力。在CatBoost中,模型收缩涉及对叶节点权重的调整,通过设置model_shrink_rate和model_shrink_mode参数来实现。
model_shrink_rate
定义:model_shrink_rate 是一个控制模型收缩速率的参数。它表示每次迭代中,叶节点权重将按一定比例进行缩减。
model_shrink_mode
定义:model_shrink_mode 是一个控制模型收缩模式的参数。
可选值:
'Constant':以固定比例进行收缩。
'Decreasing':按逐渐减少的比例进行收缩。
默认值:默认为 'Constant'。

3.具有处理数据偏序问题的独特能力,能够在训练数据中有效防止目标泄漏(target leakage)
4.内置了多种损失函数
5.提供了丰富的特征重要性评估方法,便于用户进行特征解释和筛选。

catboost pool API:
封装数据的高效数据结构。它将特征数据、标签以及元数据信息(如类别特征、权重等)封装在一起,使得数据处理和模型训练更加高效和简便。Pool对象提供了一种结构化的方式来管理数据,特别是在处理包含大量类别特征的数据集时显得尤为重要。
使用场景:
高效数据传输和处理:Pool对象通过将数据和元数据信息封装在一起,减少了在训练和预测过程中数据传输的开销,提高了数据处理效率。
处理类别特征:CatBoost对类别特征的处理有独特的优化,Pool对象允许用户方便地指定和管理类别特征,从而提高模型的训练速度和预测准确性。
内存管理:在处理大规模数据集时,Pool对象通过高效的内存管理和数据存储方式,减少了内存占用,提高了训练和预测的效率,特别是在使用GPU加速时。

交叉验证功能:
from catboost import cv
核心参数如下:
pool: Pool对象,包含数据和标签。
params: 字典,包含模型参数设置。
nfold: 整数,与fold_count相同,是交叉验证的折数。
inverted: 布尔值,是否返回每次折叠的交叉验证结果。
stratified: 布尔值,是否进行分层抽样。
shuffle: 布尔值,是否在交叉验证之前对数据进行随机打乱。
partition_random_seed: 整数,数据分区的随机种子。
seed: 整数,与partition_random_seed相同,是数据分区的随机种子。
metric_period: 整数,评估指标计算的周期。
verbose: 布尔值,是否打印详细信息。
 

http://www.xdnf.cn/news/1274.html

相关文章:

  • vscode如何多行同时编辑,vscode快速选中多行快捷键
  • 使用 JUnit 4在 Spring 中进行单元测试的完整步骤
  • 【数据结构入门训练DAY-21】信息学奥赛一本通T1334-围圈报数
  • 深入剖析TCP协议(内容二):从OSI与TCP/IP网络模型到三次握手、四次挥手、状态管理、性能优化及Linux内核源码实现的全面技术指南
  • 基于cubeMX的hal库STM32实现MQ2烟雾浓度检测
  • 软考软件设计师30天备考指南
  • 升级xcode16之后react-native-zip-archive不兼容,unsupported option ‘-G‘
  • The backpropagation and the brain
  • Java与C语言核心差异:从指针到内存管理的全面剖析
  • Node.js学习
  • WT2000T专业录音芯片:破解普通录音设备信息留存、合规安全与远程协作三大难题
  • 【k8s系列7-更新中】kubeadm搭建Kubernetes高可用集群-三主两从
  • .NET 6 WPF 利用CefSharp.Wpf.NETCore显示PDF文件
  • 什么是 GLTF/GLB? 3D 内容创建的基本数据格式说明,怎么下载GLB/GLTF格式模型
  • HarmonyOS 是 Android 套壳嘛?
  • 【C语言】动态内存的常见错误
  • Git远程操作与标签管理
  • Linux权限
  • 数据结构:栈
  • Multi-View Stereo for Community Photo Collections
  • 云原生--CNCF-1-云原生计算基金会介绍(云原生生态的发展目标和未来)
  • C语言学习记录(17)编译和链接
  • 硬件工程师面试常见问题(5)
  • C语言教程(十一):C 语言中四种主要作用域及作用域嵌套遮蔽
  • 2023蓝帽杯初赛内存取证-8
  • 【Dart语言】八、并发
  • 宏函数 和 C++ 内联函数
  • java知识点
  • Swoole-添加自定义路由实现控制器访问
  • 互联网三高-高性能之IO网络技术底层机制