CatBoost中的预测偏移和排序提升
在 CatBoost 中,预测偏移(Prediction Shift) 和 排序提升(Ordered Boosting) 是其关键概念和创新点。CatBoost 通过引入 排序提升 解决了梯度提升决策树(GBDT)算法中常见的 预测偏移问题,从而提高了模型的稳定性和性能。以下是对这两个概念的详细解释:
1. 预测偏移(Prediction Shift)
概念
预测偏移是指在梯度提升决策树(GBDT)训练过程中,由于在模型训练阶段同时使用特征和目标变量可能会导致未来信息泄漏,从而影响模型性能和稳定性。
-
原因:
在标准 GBDT 算法中,训练样本的目标变量会被用来更新模型,而同时目标变量也会被用于特征变换(如目标统计编码)。这种特征变换过程中可能会使用目标变量的全局信息,从而导致未来样本的信息被泄漏到当前训练样本中。 -
结果:
- 训练误差较低,但在测试集上表现较差(过拟合)。
- 对目标变量统计不准确,尤其是分类特征的目标统计编码可能引入偏差。
示例
假设有一个分类特征 x x x 和目标变量 y y y:
| 样本 i i i | 分类特征 x i x_i xi | 目标变量 y i y_i yi |
|---|---|---|
| 1 | A | 1 |
| 2 | A | 0 |
| 3 | A | 1 |
如果在第 3 个样本训练过程中使用整个数据集的目标统计均值(包括第 3 个样本本身的 y 3 = 1 y_3 = 1 y3=1),则会导致信息泄漏。例如:
目标统计编码:
编码值 = 总目标值 总样本数 = 1 + 0 + 1 3 = 0.67 \text{编码值} = \frac{\text{总目标值}}{\text{总样本数}} = \frac{1 + 0 + 1}{3} = 0.67 编码值=总样本数总目标值=31+0+1=0.67
这会将第 3 个样本的目标变量泄漏到其特征变换中。
2. 排序提升(Ordered Boosting)
概念
排序提升是 CatBoost 提出的用于解决 预测偏移问题 的方法。其核心思想是在每一轮训练中,严格按照样本的时间或排列顺序,只使用当前样本之前的数据计算特征变换(如目标统计编码),避免了未来信息泄漏。
Ordered Boosting 的实现原理
CatBoost 的 排序提升 使用了一种特殊的数据划分和特征计算方式:
-
样本顺序化:
- 假设样本被排列为 ( x σ 1 , y σ 1 ) , ( x σ 2 , y σ 2 ) , … , ( x σ n , y σ n ) (x_{\sigma_1}, y_{\sigma_1}), (x_{\sigma_2}, y_{\sigma_2}), \dots, (x_{\sigma_n}, y_{\sigma_n}) (xσ1,yσ1),(xσ2,yσ2),…,(xσn,yσn),其中 σ \sigma σ 表示样本的排列顺序。
- 在训练第 i i i 个样本时,仅使用前 i − 1 i-1 i−1 个样本的数据来计算特征值。
-
目标统计的顺序计算:
- 对于分类特征,目标统计值的计算严格遵循样本顺序。例如,计算第 i i i 个样本的目标统计值 T S ( x i ) TS(x_i) TS(xi) 时,仅基于样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x i − 1 , y i − 1 ) (x_1, y_1), (x_2, y_2), \dots, (x_{i-1}, y_{i-1}) (x1,y1),(x2,y2),…,(xi−1,yi−1) 的目标变量 y j y_j yj。
- 避免了将当前样本 y i y_i yi 或未来样本的目标值泄漏到统计值中。
-
模型更新的顺序化:
- CatBoost 使用排序提升算法训练决策树时,每棵树的分裂决策仅基于当前模型状态和之前的数据更新。
排序提升算法的伪代码
如下图 14-2 中描述的伪代码:
- 对训练样本 ( x , y ) (x, y) (x,y) 按顺序排列为 ( x σ 1 , y σ 1 ) , ( x σ 2 , y σ 2 ) , … , ( x σ n , y σ n ) (x_{\sigma_1}, y_{\sigma_1}), (x_{\sigma_2}, y_{\sigma_2}), \dots, (x_{\sigma_n}, y_{\sigma_n}) (xσ1,yσ1),(xσ2,yσ2),…,(xσn,yσn)。
- 初始化模型 M 0 M_0 M0。
- 对于每个样本 i i i:
- 根据模型状态 M i − 1 M_{i-1} Mi−1 和前 i − 1 i-1 i−1 个样本的目标变量 y σ j y_{\sigma_j} yσj 计算目标统计值。
- 更新模型状态 M i = M i − 1 + Δ M M_i = M_{i-1} + \Delta M Mi=Mi−1+ΔM,其中 Δ M \Delta M ΔM 是模型的增量更新(如一棵树的增量效果)。
- 输出最终模型 M n M_n Mn。
排序提升的优点
-
避免信息泄漏:
- 通过按顺序计算特征值和模型更新,确保每个样本的特征计算只依赖于之前的样本信息。
- 解决了传统梯度提升算法中的预测偏移问题。
-
提高模型鲁棒性:
- 排序提升能够更好地适应分类特征中高基数、稀疏类别的情况。
- 即使样本数量有限,也能生成稳定的特征统计值。
-
改进模型性能:
- 避免了模型过拟合,提升了测试集上的性能。
排序提升的一个例子
假设训练样本如下:
| 样本 i i i | 分类特征 x i x_i xi | 目标变量 y i y_i yi |
|---|---|---|
| 1 | A | 1 |
| 2 | B | 0 |
| 3 | A | 1 |
| 4 | B | 1 |
目标统计值的计算:
对于分类特征 x x x,计算目标统计值 T S ( x i ) TS(x_i) TS(xi) 时:
-
第 1 行:
- T S ( x 1 ) TS(x_1) TS(x1):没有之前的样本,所以使用全局均值 p p p。
-
第 2 行:
- T S ( x 2 ) TS(x_2) TS(x2):类别 B B B 的目标统计值基于之前样本:
T S ( x 2 ) = p TS(x_2) = p TS(x2)=p
- T S ( x 2 ) TS(x_2) TS(x2):类别 B B B 的目标统计值基于之前样本:
-
第 3 行:
- T S ( x 3 ) TS(x_3) TS(x3):类别 A A A 的目标统计值基于第 1 行:
T S ( x 3 ) = y 1 1 = 1 TS(x_3) = \frac{y_1}{1} = 1 TS(x3)=1y1=1
- T S ( x 3 ) TS(x_3) TS(x3):类别 A A A 的目标统计值基于第 1 行:
-
第 4 行:
- T S ( x 4 ) TS(x_4) TS(x4):类别 B B B 的目标统计值基于第 2 行:
T S ( x 4 ) = y 2 1 = 0 TS(x_4) = \frac{y_2}{1} = 0 TS(x4)=1y2=0
- T S ( x 4 ) TS(x_4) TS(x4):类别 B B B 的目标统计值基于第 2 行:
总结
-
预测偏移(Prediction Shift):
- 是由于目标变量泄漏到特征变换中引起的模型训练问题,导致过拟合和不稳定性。
-
排序提升(Ordered Boosting):
- 是 CatBoost 的核心创新,通过严格按照时间或排列顺序训练模型,避免了预测偏移问题。
- 在分类特征处理、目标统计值计算和模型更新中都有应用。
相关文章:
CatBoost中的预测偏移和排序提升
在 CatBoost 中,预测偏移(Prediction Shift) 和 排序提升(Ordered Boosting) 是其关键概念和创新点。CatBoost 通过引入 排序提升 解决了梯度提升决策树(GBDT)算法中常见的 预测偏移问题&#x…...
python: postgreSQL using psycopg2 or psycopg
psycopg2 # encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 許可資訊查看:言語成了邀功的功臣,還需要行爲每日來值班嗎? # 描述: pip install --upgrade pip PostgreSQL database adapter for Python # pip install…...
从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化20241112
🎯 从 MySQL 5.7 到 8.0:理解 GROUP BY 的新规则与实战优化 🔎 引言 随着 MySQL 的不断升级,从 5.7 到 8.0,不仅性能得到提升,其对 SQL 标准的严格执行也显著提高。GROUP BY 的行为变化就是一个典型例子。…...
npm完整发包流程(亲测可验证)
1. 准备工作 (1) 在npm官网上注册一个账号 (2) 注册成功之后,npm会发送一封邮件给你,点击邮件里面的链接,做确认关联操作(必需) 2. 创建自己的npm包 (…...
学习threejs,使用JSON格式保存和加载模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE toJSON()方法 二、&a…...
中国首部《能源法》正式问世,它的亮点有哪些呢?
2024年11月8日,《中华人民共和国能源法》经十四届全国人大常委会第十二次会议审议通过,正式出台,将于明年1月1日起施行。 中国首部《能源法》正式问世,它的亮点有哪些呢? 一、填补立法空白,完善能源法律体…...
【外包】软件行业的原始形态,项目外包与独立开发者
【外包】互联网软件行业的原始形态,项目外包与独立开发者 本科期间写的一些东西,最近整理东西看到了,大致整理一下放出来,部分内容来自其他文章,均已引用。 文章目录 1、互联网软件行业的原始形态2、项目订单ÿ…...
工程数学线性代数(同济第七版)附册课后习题答案PDF
《线性代数附册 学习辅导与习题全解》是与同济大学数学科学学院编《工程数学 线性代数》第七版教材配套的教学辅导书,由同济大学作者团队根据教材内容和要求编写而成。本书在《工程数学 线性代数》第六版附册(即辅导书)的基础上修改而成。全书…...
【Ubuntu24.04】部署服务(基础)
目录 0 背景1 设置静态IP2 连接服务器3 部署服务3.1 安装JDK3.2 下载并安装MySQL8.43.2.1 从官网下载 APT Repository 配置文件3.2.2 安装 MySQL8.43.2.3 配置远程连接 3.3 下载并配置Redis3.4 上传jar包并部署应用3.5 开放端口 4 总结 0 背景 在成功安装了Ubuntu24.04操作系统…...
Linux符号使用记录
~ 账户 home 目录,如果是 root 账户就是 /root . 当前目录 .. 上层目录 | 管道符 & 后台工作,放在完整指令列的最后端,表示将该指令列放入后台中工作。 > 输出重定向,重新…...
初阶C++之C++入门基础
大家好!欢迎来到C篇学习,这篇文章的内容不会很难,为c的引入,c的重点内容将在第二篇的文章中讲解,届时难度会陡然上升,请做好准备! 我们先看网络上的一个梗:21天内⾃学精通C 好了&am…...
ODOO学习笔记(7):模块化架构(按需安装)
一、Odoo模块化架构概述 Odoo是一个功能强大的企业资源规划(ERP)系统,其模块化架构是它的核心优势之一。这种架构允许系统通过添加、移除或修改不同的模块来灵活地适应企业的各种业务需求。 核心模块与自定义模块: Odoo本身带有一…...
Java的dto,和多表的调用
1理论 需求是新增菜品eg:菜名:豆腐脑;口味:甜口,咸口, 菜单表:dish;口味表dish_flavor; 1dto:数据传输对象 新建一个dishDto对象有两个表里的属性 2用到两个表,dish,d…...
时序数据库TimescaleDB安装部署以及常见使用
文章目录 一、时序数据库二、TimescaleDB部署1、repository yum仓库配置2、yum在线安装3、插件配置4、TimescaleDB使用登录pg创建插件使用超表 一、时序数据库 什么是时序数据库?顾名思义,用于处理按照时间变化顺序的数据的数据库即为时序数据库&#x…...
MG算法(英文版)题解
翻译: 考虑一个加法流,其中一个特定项目出现 n^(1/2) 次,并且有 n - n^(1/2) - 1 个其他不同的项目,每个项目出现一次。在应用 Misra-Gries(MG)算法时,应该选择哪个 ε(epsilon&…...
2-UML概念模型测试
1. (单选题, 1.0 分) UML中的关系不包括()。 A. 抽象B. 实现C. 依赖D. 关联 我的答案:A正确答案: A 知识点: UML的构成 1.0分 2. (单选题, 1.0 分) 下列事物不属于UML结构事物的是()。 A. 组件B. 类C. 节点D. 状…...
人工智能(AI)对于电商行业的变革和意义
 参考, x.content content --EXTRACTVALUE(x.Content, //zlxml//document//subdoc[antetypeid"3C38A8DAB01C473A9074A8EDD0B8553"]//utext) 主治医师, --EXTRACTVALUE(x.…...
RK3568平台开发系列讲解(GPIO篇)GPIO的sysfs调试手段
🚀返回专栏总目录 文章目录 一、内核配置二、GPIO sysfs节点介绍三、命令行控制GPIO3.1、sd导出GPIO3.2、设置GPIO方向3.3、GPIO输入电平读取3.4、GPIO输出电平设置四、Linux 应用控制GPIO4.1、控制输出4.2、输入检测4.3、使用 GPIO 中断沉淀、分享、成长,让自己和他人都能有…...
使用 Web Search 插件扩展 GitHub Copilot 问答
GitHub Copilot 是一个由 GitHub 和 OpenAI 合作开发的人工智能代码提示工具。它可以根据上下文提示代码,还可以回答各种技术相关的问题。但是 Copilot 本身不能回答非技术类型的问题。为了扩展 Copilot 的功能,微软发布了一个名为 Web Search 的插件&am…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
