Catboost

news2024/11/26 12:17:36

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

CatBoost简介

CatBoost是俄罗斯搜索巨头Yandex在2017年开源的机器学习库,是Boosting算法的一种,CatBoost和XGBoost,Lightgbm并称为GBDT三大主流神器,都是在GBDT算法框架下的一种改进实现,XGBoost是被广泛应用于工业界,LightGBM有效的提升了GBDT的计算效率,而Yandex的CatBoost号称是比XGBoost和LightGBM在算法准确率等方面表现更为优秀的算法
CatBoost是一种基于对称决策树,为基学习器实现的参数较少,支持类别性变量和高准确性的GBDT框架,主要解决的痛点时高效合理的处理类别型特征。这一点从其的名字中可以看出来,CatBoost是由Categorical和Boosting组成。此外CatBoost还解决了梯度偏差以及预测偏移的问题。
从而减少过拟合的发生,进而提高算法的准确性和泛化能力。
域XGBoost、LightGBM相比, CatBoost的创新点有:

  • 嵌入了自动将类别型特征处理为数值型特征的创新算法,首先对categorical features做一些统计,计算某个类别特征出现的概率,之后加上超参数,生成新的数值型特征 n u m e r i c a l f e a t u r e s numerical features numericalfeatures.
  • CatBoost是使用了组合类别特征,可以利用特征之间的关系,极大的丰富了特征的维度。
  • 采用排序提升的算法对抗训练集中的噪声点,从而避免梯度估计偏差,进而解决梯度预偏移的问题。
  • 采用了完全对称树作为基模型

类别型特征

类别型特征相关工作

所谓类别型特征,即这类特征不是数值型特征,而是离散的集合,比如省份名山东、山西、河北等),城市名(北京、上海、深圳等),学历(本科、硕士、博士等)。在梯度提升算法中,最常用的是将这些类别型特征转换为数值型特征处理,一般类别型特征转换为一个或多个数值型特征

如果某个类别型特征基础比较低,low-cardinality features,即改特征的所有值去重后构成的集合元素个数比较少,一般利用one-hot编码方式将特征转换为数值型,one-hot编码可以在数据预处理时候完成,也可以在模型训练时候完成,从训练时间的角度,后一种方式实现更为高效,CatBoost对于基数较低的类别型特征也是采用后一种实现
显然,在高基础类别型特征,high cardinality features。当中,比如user ID,这种编码方式会产生大量的新特征,造成维度灾难,一种折中的办法是可以将类别分组成有限个的群体再进行One-hot编码。一种常被使用的方法是根据目标变量统计(Target Statistics,以下简称TS**)进行分组**,目标变量统计用于估算每个类别的目标变量期望值。甚至有人直接用TS作为一个新的数值型变量来代替原来的类别型变量。重要的是,可以通过对TS数值型特征的阈值设置,基于对数损失、基尼系数或者均方差,得到一个对于训练集而言将类别一分为二的所有可能划分当中最优的那个。在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:

  • 增加计算时间,因为需要对每一个类别型特征,在迭代的每一步,都需要对GS进行计算。
  • 增加存储需求,对于一个类别型变量,需要存储每一次分离每个节点的类别。
    为了克服这些缺点,LightGBM以损失部分信息为代价将所有的长尾类别归为一类,作者声称这样处理高基数类别型特征时比One-hot编码还是好不少。不过如果采用TS特征,那么对于每个类别只需要计算和存储一个数字
    因此,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛应用在点击预测任务当中,这个场景当中的类别型特征有用户、地区、广告、广告发布者等。接下来我们着重讨论TS,暂时将One-hot编码和GS放一边

目标变量统计

CatBoost算法的设计初衷是为了更好的处理GBDT特征中的categorical features。在处理 GBDT特征中的categorical features的时候,最简单的方法是用 categorical feature 对应的标签的平均值来替换。在决策树中,标签平均值将作为节点分裂的标准。这种方法被称为 Greedy Target-based Statistics , 简称 Greedy TS,用公式来表达就是:

这种方法有一个显而易见的缺陷,就是通常特征比标签包含更多的信息,如果强行用标签的平均值来表示特征的话,当训练数据集和测试数据集数据结构和分布不一样的时候会出条件偏移问题

一个标准的改进Greedy TS方式都是添加先验分布项。这样可以减少噪声和低频率类别型数据对于数据分布的影响。
在这里插入图片描述
在这里插入图片描述

特征组合

CatBoost另外一种对类别特征处理方法的创新在于可以构建任意几个类别型特征的任意组合为新的特征。比如说用户ID和广告主题之间的联合信息。如果单纯地将二者转换为数值特征,二者之间的联合信息可能就会丢失掉。CatBoost则考虑将这两个分类特征进行组合构成新的分类特征。但组合的数量会随着数据集中类别型特征的数量成指数增长,因此不可能考虑所有的组合。

所以,CatBoost在构建新的分裂节点时,会采用贪心的策略考虑特征之间的组合。CatBoost将当前树的所有组合、类别型特征与数据集中的所有类别型特征相结合,并将新的类别组合型特征动态地转换为数值型特征

预偏移和梯度提升

CatBoost另一大创新点在于提**出使用排序提升(Ordered Boosting)的方法解决预测偏移(Prediction Shift)**的问题

预测偏移

所谓预测偏移,即训练样本的分布与测试样本的分布之间产生的偏移

CatBoost首次揭示了梯度提升中的预测偏移问题。认为预测偏移就像是TS处理方法一样,是由一种特殊的特征target leakage和梯度偏差造成的,我们来看一下在梯度提升过程中这种预测偏移是这么传递的

设前一轮训练得到强学习器为,当前损失函数为,则本轮迭代则要拟合的弱学习器为:

进一步的梯度表达为:

排序提升

CatBoost采用基于Ordered TS的Ordered Boosting方法来处理预测偏移问题。排序提升算法流程如下图所示。
在这里插入图片描述
在这里插入图片描述
对于训练数据,排序提升先生成一个随机排列,随机配列用于之后的模型训练,即在训练第个模型时,使用排列中前个样本进行训练。在迭代过程中,为得到第个样本的残差估计值,使用第个模型进行估计
但是这种训练个模型的做法会大大增加内存消耗和时间复杂度,实际上可操性不强,因此,CatBoost在以决策树为基学习器的梯度提升算法的基础上,对这种排序提升算法进行了改进。
CatBoost提供了两种Boosting模式,Ordered和Plain。Plain就是在标准的GBDT算法上内置了排序TS操作。而Ordered模式则是则排序提升算法上做出了改进。
完整的Ordered模式描述如下:CatBoost对训练集产生个独立随机序列用来定义和评估树结构的分裂,用来计算分裂所得到叶子节点的值。CatBoost采用对称树作为基学习器,对称意味着在树的同一层,其分裂标准都是相同的。对称树具有平衡、不易过拟合并能够大大减少测试时间的特点。CatBoost构建树的算法流程如下图所示。
在这里插入图片描述

经验

  • 先利用集成学习进行打比赛。慢慢的会将集成学习全部都研究彻底,将其全部都搞定都行啦的理由与打算。
  • 会清楚的知道使用什么库去打比赛。

CatBoostClassifier参数详解

在这里插入图片描述

通用参数

  • loss_function 损失函数,支持的有RMSE, Logloss, MAE, CrossEntropy, * *Quantile, LogLinQuantile, Multiclass, MultiClassOneVsAll, MAPE,Poisson。默认RMSE。
  • custom_metric 训练过程中输出的度量值。这些功能未经优化,仅出于信息目的显示。默认None。
  • eval_metric 用于过拟合检验(设置True)和最佳模型选择(设置True)loss function,用于优化。
  • iterations 最大树数。默认1000。
  • learning_rate 学习率。默认0.03。
    random_seed 训练时候的随机种子
  • l2_leaf_reg L2正则参数。默认3
  • bootstrap_type 定义权重计算逻辑,可选参数:Poisson (supported for GPU only)/Bayesian/Bernoulli/No,默认为Bayesian
    bagging_temperature 贝叶斯套袋控制强度,区间[0, 1]。默认1。
    subsample 设置样本率,当bootstrap_type为Poisson或Bernoulli时使用,默认66
  • sampling_frequency设置创建树时的采样频率,可选值PerTree/PerTreeLevel,默认为PerTreeLevel
  • random_strength 分数标准差乘数。默认1。
    use_best_model 设置此参数时,需要提供测试数据,树的个数通过训练参数和优化loss function获得。默认False。
  • best_model_min_trees 最佳模型应该具有的树的最小数目。
    depth 树深,最大16,建议在1到10之间。默认6。
    ignored_features 忽略数据集中的某些特征。默认None。
    one_hot_max_size 如果feature包含的不同值的数目超过了指定值,将feature转化为float。默认False
  • has_time 在将categorical features转化为numerical
    features和选择树结构时,顺序选择输入数据。默认False(随机)
    rsm 随机子空间(Random subspace method)。默认1。
    nan_mode处理输入数据中缺失值的方法,包括Forbidden(禁止存在缺失),Min(用最小值补),Max(用最大值补)。默认Min。
    fold_permutation_block_size数据集中的对象在随机排列之前按块分组。此参数定义块的大小。值越小,训练越慢。较大的值可能导致质量下降。
    leaf_estimation_method 计算叶子值的方法,Newton/ Gradient。默认Gradient。
  • leaf_estimation_iterations 计算叶子值时梯度步数
    leaf_estimation_backtracking 在梯度下降期间要使用的回溯类型
    fold_len_multiplier folds长度系数。设置大于1的参数,在参数较小时获得最佳结果。默认2。
  • approx_on_full_history 计算近似值,False:使用1/fold_len_multiplier计算;True:使用fold中前面所有行计算。默认False。
    class_weights 类别的权重。默认None。
  • scale_pos_weight 二进制分类中class 1的权重。该值用作class 1中对象权重的乘数。
    boosting_type 增压方案
  • allow_const_label 使用它为所有对象训练具有相同标签值的数据集的模型。默认为False

默认参数

‘iterations’: 1000,
‘learning_rate’:0.03,
‘l2_leaf_reg’:3,
‘bagging_temperature’:1,
‘subsample’:0.66,
‘random_strength’:1,
‘depth’:6,
‘rsm’:1,
‘one_hot_max_size’:2
‘leaf_estimation_method’:’Gradient’,
‘fold_len_multiplier’:2,
‘border_count’:128,

性能参数

  • thread_count=-1:训练时所用的cpu/gpu核数
  • used_ram_limit=None:CTR问题,计算时的内存限制
  • gpu_ram_part=None:GPU内存限制

参数调优

采用 G i r d S e a r c h C V 方法 GirdSearchCV方法 GirdSearchCV方法自动搜索最优参数。

经验

  • 会将各种的集成学习全部都将其搞定,慢慢的研究一波都行啦的回事与打算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177876.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用jstack解决线程爆满问题

问题发现生产应用现存在问题,影响到系统的使用,前端页面只配置了35个派生指标,后台任务生成20000多线程任务,占用了全部资源,导致其他系统也没资源可用,指标工厂也无法进一步使用,今天上午发的死…

Email Signature Manager 9.3 Crack

概述 Email Signature Manager为所有用户创建和部署电子邮件签名 包括合并的联系方式、公司徽标、社交媒体图标 和链接,甚至个性化内容,如用户照片 创建和附加电子邮件活动,向所有人介绍奖项, 活动或促销,或设置运行的…

基于STM32的FreeRTOS开发(1)----FreeRTOS简介

为什么使用freertos FreeRTOS 是一个免费和开源的实时操作系统,它主要用于嵌入式系统。它非常轻量级,可以在很小的硬件资源上运行,因此非常适合在限制硬件资源的嵌入式系统中使用。 FreeRTOS提供了一组简单的任务管理功能,可以让…

基于Springboot vue前后端分离在线培训考试系统源码

# 云帆培训考试系统 管理账号:admin/admin 学员账号:person/person # 介绍 一款多角色在线培训考试系统,系统集成了用户管理、角色管理、部门管理、题库管理、试题管理、试题导入导出、考试管理、在线考试、错题训练等功能,考…

C++:运算符重载与类的赋值运算符重载函数

目录 章节知识架构 一.运算符重载 1. 运算符重载的基本概念 代码段1 2.关于运算符重载的重要语法细则 二.运算符重载在类中的使用 三.类的默认成员函数:重载函数(赋值运算符重载) 1.自定义重载函数 代码段2 2.编译器默认生成的重载函数 四.前置(--)和后置…

Facebook小组与主页:哪个更适合SEO?

在 SEO中,对于优化人员来说有两种策略:一种是在 Facebook组上投放广告;另一种则是在主页上投放广告。那么,这两种策略哪种更好呢?对于 SEO来说又有什么影响呢?如果你已经在 Facebook上进行了一些优化工作&a…

Python---文件操作

专栏:python 个人主页:HaiFan. 专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 文件操作思维导图前言文件是什么文件路径文件操…

SpringBoot基础回顾:场景启动器

上一章我们回顾了 SpringBoot 的自动装配,以及承载自动装配的核心——自动配置类。自动配置类的定义位置通常在每个场景的 jar 包中,配置 spring.factories 文件中 EnableAutoConfiguration 的位置通常在相应的 autoconfigure jar 包下。本章会着重回顾和…

SpringMVC简介

SpringMVC简介什么是MVC?MVC的工作流程什么是SpringMVC?HelloWorld创建maven工程配置web.xml创建请求控制器配置springMVC.xml配置文件什么是MVC? MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分 M:Model,模型层,指工程中的javaBean,作用是是处理数…

恶意代码分析实战 9 隐蔽的恶意代码启动

9.1 Lab12-1 分析 查看程序的导入函数。 通过这几个函数,可以推断出是远程线程注入。 使用ProMon检测,并没有看到什么有用的信息。 使用Proexproer检查。 也没有什么有用的信息。 拖入IDA中分析一下。 将这几个字符串重命名,便于识别。 …

【MyBatis】| MyBatis使用⼩技巧

目录 一:MyBatis使用⼩技巧 1. #{}和${} 2. typeAliases 3. mappers 4. IDEA配置⽂件模板 5. 插⼊数据时获取⾃动⽣成的主键 一:MyBatis使用⼩技巧 1. #{}和${} #{}:先编译sql语句,再给占位符传值,底层是Prepar…

【C语言进阶】一文带你学会C语言文件操作

前言 我们前面学习结构体时,写了通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下次运行通讯录…

Python---自动生成二维码

专栏:python 个人主页:HaiFan. 专栏简介:本专栏主要更新一些python的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 自动生成二维码 二维码的本质上,就…

人工智能学习06--pytorch05--torchvision中的数据集使用DataLoader的使用

torchvision中的数据集使用 test_set的class属性 把数据集每一部分都变成tensor类型 现在输出的就是tensor数据类型了 DataLoader的使用 batch_size 一摞牌中,每次抓几张shuffle 打乱,第二次打牌前,牌的顺序要跟第一次不一样&#xff0…

【JavaSE】一文看懂构造器/构造方法(Cunstructor)

🌱博主简介:大一计科生,努力学习Java中!热爱写博客~预备程序媛 📜所属专栏:Java冒险记【从小白到大佬之路】 ✈往期博文回顾: 【JavaSE】保姆级教程|1万字10张图学会类与对象–建议收藏 🕵️‍♂️近期目标…

CSS边框、边距、轮廓(边框宽度/颜色/各边/简写属性/圆角边框/内外边距/高度宽度/框模型/轮廓宽度/颜色/属性/偏移)——万字长文|一文搞懂

目录 CSS边框 CSS 边框属性 CSS 边框样式 实例 CSS 边框宽度 实例 特定边的宽度 实例 CSS 边框颜色 实例 特定边框的颜色 实例 HEX 值 实例 RGB 值 实例 HSL 值 实例 CSS 边框 - 单独的边 实例 不同的边框样式 实例 它的工作原理是这样的: …

ROS学习寄录1

1 创建ROS工作空间 1.1 创建工作空间 (1)创建工作空间 mkdir catkin_ws (2)进入catkin_ws文件夹,然后创建一个src文件夹 cd catkin_ws mkdir src (3)进入src文件夹,生成CMakeL…

「自控原理」4.2 根轨迹法分析与校正

本节介绍利用根轨迹法分析系统性能发热方法 本节介绍根轨迹校正 文章目录利用根轨迹分析系统性能主导极点法增加零极点对系统的影响根轨迹校正串连超前校正原理与步骤超前校正例题串连滞后校正附加开环偶极子的作用原理与步骤滞后校正例题利用根轨迹分析系统性能 利用根轨迹分…

Oracle cloud vps实例配置访问

Oracle cloud vps实例配置访问创建一个免费配置的实例,并配置访问创建实例时,系统映像选择创建实例时候的ssh密钥配置子网,打开22端口使用工具登录服务器配置多个公钥,支持多个ssh私钥来登录登录vps实例修改登录用户和身份验证方式…

【接口】接口超时原因分析

接口超时的原因: 一、网络抖动 有可能是你的网络出现抖动、网页请求API接口、接口返回数据给网页丢包了。 二、被带宽占满 用户量暴增,服务器网络带宽被占满。 服务器带宽:一定时间内传输数据的大小,如:1s传输10M…