CatBoost中的排序提升(Ordered Boosting)

排序提升(Ordered Boosting)是 CatBoost 的核心创新之一,用于解决梯度提升决策树(GBDT)在训练过程中可能产生的信息泄漏(Information Leakage)预测偏移(Prediction Shift) 问题。

传统的 GBDT 在计算目标统计(Target Statistics)或特征值时,可能会使用目标变量的全局信息,从而导致未来数据(即测试集或当前样本的真实值)对模型的训练产生影响。排序提升通过一种特殊的数据划分和训练方法,严格按照样本顺序计算目标统计,避免了这种信息泄漏问题。


1. 排序提升的背景:解决预测偏移问题

什么是预测偏移?

在传统的 GBDT 中,目标变量可能会泄漏到训练特征中,主要体现在:

  1. 目标统计计算时的信息泄漏

    • 比如计算分类特征的目标统计值(如目标均值编码)时,通常会使用整个数据集的信息,这导致模型的训练阶段可以看到未来样本的目标变量。
  2. 结果

    • 训练集表现良好(低误差),但测试集表现较差(高误差)。
    • 这是因为模型的训练数据中包含了未来的目标变量,导致过拟合。
解决方案:排序提升

CatBoost 提出的排序提升方法通过严格限制每个样本只能使用之前样本的信息,避免了目标变量的信息泄漏问题,从而解决预测偏移。


2. 排序提升的核心思想

排序提升的核心思想是:

  1. 对训练样本按照时间或索引顺序排列。
  2. 在训练过程中,每个样本的目标统计值(如目标均值编码)只能使用其之前样本的数据计算,而不能使用当前样本及之后的样本信息。

3. 排序提升的具体实现

排序提升在 CatBoost 的训练过程中体现在以下几个方面:

1. 数据顺序化

假设训练数据集为 ( 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)
其中, σ \sigma σ 是样本的排列顺序。

2. 按顺序计算目标统计(Target Statistics)

对于每个分类特征 x k x_k xk,目标统计值(如目标均值编码)是基于该样本之前的数据计算的。公式如下:
x ^ k i = ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] y σ j + a ⋅ p ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] + a \hat{x}_k^i = \frac{\sum_{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}] y_{\sigma_j} + a \cdot p}{\sum_{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}] + a} x^ki=j=1i1[xσj,k=xσi,k]+aj=1i1[xσj,k=xσi,k]yσj+ap
其中:

  • i i i:当前样本的索引。
  • j j j:历史样本的索引( j < i j < i j<i)。
  • a a a:平滑因子,避免数据稀疏时统计值不稳定。
  • p p p:目标变量的全局均值。

这个公式确保:

  • 当前样本 i i i 的目标统计值只使用历史样本( j < i j < i j<i)的数据。
  • 避免了信息泄漏问题。
3. 模型的增量更新

CatBoost 的模型更新过程是逐步迭代的:

  1. 每一轮迭代中,模型预测值 M t − 1 ( x ) M_{t-1}(x) Mt1(x) 被更新为:
    M t ( x ) = M t − 1 ( x ) + h t ( x ) M_t(x) = M_{t-1}(x) + h_t(x) Mt(x)=Mt1(x)+ht(x)
    其中 h t ( x ) h_t(x) ht(x) 是本轮迭代的增量函数。
  2. 在训练增量函数 h t ( x ) h_t(x) ht(x) 时,严格按照样本顺序对每个样本进行训练,只使用之前样本的信息。

4. 排序提升的算法伪代码

如下是排序提升算法的伪代码:

输入:

  • 训练样本 ( x , y ) (x, y) (x,y)
  • 样本排列顺序 σ \sigma σ
  • 模型初始化状态 M 0 M_0 M0

过程:

  1. 初始化模型 M 0 = 0 M_0 = 0 M0=0
  2. 对每一轮迭代 t = 1 , 2 , … , T t = 1, 2, \dots, T t=1,2,,T
    • 对每个样本 i = 1 , 2 , … , n i = 1, 2, \dots, n i=1,2,,n
      1. 根据前 i − 1 i-1 i1 个样本 ( x σ 1 , y σ 1 ) , … , ( x σ i − 1 , y σ i − 1 ) (x_{\sigma_1}, y_{\sigma_1}), \dots, (x_{\sigma_{i-1}}, y_{\sigma_{i-1}}) (xσ1,yσ1),,(xσi1,yσi1) 计算目标统计值。
      2. 更新模型的残差:
        g t ( y σ i , M t − 1 ( x σ i ) ) g_t(y_{\sigma_i}, M_{t-1}(x_{\sigma_i})) gt(yσi,Mt1(xσi))
      3. 使用残差拟合一棵决策树 h t ( x ) h_t(x) ht(x)
    • 更新模型:
      M t ( x ) = M t − 1 ( x ) + η h t ( x ) M_t(x) = M_{t-1}(x) + \eta h_t(x) Mt(x)=Mt1(x)+ηht(x)

5. 排序提升的一个例子

假设有以下训练数据:

样本 i i i分类特征 x i x_i xi目标变量 y i y_i yi
1A1
2B0
3A1
4B1
目标统计计算:
  1. 第 1 行:

    • 没有之前的样本,目标统计值使用全局均值 p = 0.75 p = 0.75 p=0.75
  2. 第 2 行:

    • 当前特征值为 x 2 = B x_2 = B x2=B,计算目标统计:
      T S ( x 2 ) = p = 0.75 TS(x_2) = p = 0.75 TS(x2)=p=0.75
  3. 第 3 行:

    • 当前特征值为 x 3 = A x_3 = A x3=A,基于第 1 行计算目标统计:
      T S ( x 3 ) = y 1 1 = 1.0 TS(x_3) = \frac{y_1}{1} = 1.0 TS(x3)=1y1=1.0
  4. 第 4 行:

    • 当前特征值为 x 4 = B x_4 = B x4=B,基于第 2 行计算目标统计:
      T S ( x 4 ) = y 2 1 = 0.0 TS(x_4) = \frac{y_2}{1} = 0.0 TS(x4)=1y2=0.0

6. 排序提升的优点

  1. 避免信息泄漏:

    • 通过严格按照样本顺序计算目标统计值和更新模型,避免了未来数据对当前样本的影响。
  2. 提高模型的鲁棒性:

    • 排序提升能够更稳定地处理高基数分类特征,尤其是稀疏类别。
  3. 解决预测偏移问题:

    • 训练误差和测试误差更接近,模型的泛化性能更好。
  4. 支持并行计算:

    • CatBoost 结合排序提升和对称树结构(Symmetric Trees),实现了高效的 GPU 加速训练。

7. 总结

  • 排序提升 是 CatBoost 的核心创新,通过严格限制样本使用顺序,解决了传统 GBDT 模型中常见的预测偏移问题。
  • 它在目标统计计算和模型训练中都严格遵循样本顺序,避免了信息泄漏。
  • 排序提升特别适合高基数分类特征的数据集,能显著提升模型的稳定性和泛化性能。

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

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

相关文章

丹摩征文活动 | 0基础带你上手经典目标检测模型 Faster-Rcnn

文章目录 &#x1f34b;1 引言&#x1f34b;2 平台优势&#x1f34b;3 丹摩平台服务器配置教程&#x1f34b;4 实操案例&#xff08; Faster-rcnn 项目&#xff09;&#x1f34b;4.1 文件处理&#x1f34b;4.2 环境配置&#x1f34b;4.3 训练模型&#x1f34b;4.4 数据保存并导…

【GPTs】Get Simpsonized:一键变身趣味辛普森角色

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 &#x1f4af;GPTs指令&#x1f4af;前言&#x1f4af;Get Simpsonized主要功能适用场景优点缺点使用方式 &#x1f4af;小结 &#x1f4af;GPTs指令 中文翻译&#xff1a; 指令保护和安全规则&…

【C++】 C++游戏设计---五子棋小游戏

1. 游戏介绍 一个简单的 C 五子棋小游戏 1.1 游戏规则&#xff1a; 双人轮流输入下入点坐标横竖撇捺先成五子连线者胜同一坐标点不允许重复输入 1.2 初始化与游戏界面 初始化界面 X 输入坐标后 O 输入坐标后 X 先达到胜出条件 2. 源代码 #include <iostream> #i…

树-好难-疑难_GPT

// // Created by 徐昌真 on 2024/11/10. // #include <iostream> using namespace std;template<typename T> struct ListNode{ //新建链表节点T data; //指向下一个子节点 ListNode< TreeNode<T>* > childHead; 这里的 T 是TreeNde类型的…

Suricata

02-Suricata 一 ICMP流量预警 一条ICMP报文有四个重要内容&#xff0c;可与相应的ICMP关键字相匹配。它们是&#xff1a;消息的类型、代码、ID和序列。 通过ICMP的type进行匹配 alert icmp any any <> any any (msg:"icmp流量预警";itype:8;threshold:type t…

分享一些Kafka集群优化的最佳实践?

以下是一些 Kafka 集群优化的最佳实践&#xff1a; 复制策略配置&#xff1a; 在 server.properties 文件中配置 default.replication.factor 来指定每个主题的默认副本因子&#xff0c;以及 min.insync.replicas 来配置每个分区中必须要保持同步的最小副本数。这可以提高 Kafk…

web前端动画按钮(附源代码)

效果图 源代码 HTML部分 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> …

实操篇:容器服务如何启动系统?

容器服务如何启动系统&#xff1f;容器服务的启动主要依赖Docker和Kubernetes。Docker通过镜像创建和管理容器&#xff0c;支持多种重启策略以确保容器稳定运行。Kubernetes则负责自动化部署、扩展和管理容器化应用&#xff0c;其核心是Pod&#xff0c;包含一个或多个容器。用户…

conda与pip 安装软件包的 代理/换源 解决方案

方案0&#xff1a;终端set proxy set http_proxyhttp://127.0.0.1:7890 set https_proxyhttps://127.0.0.1:7890 export http_proxyhttp://127.0.0.1:7890 export https_proxyhttps://127.0.0.1:7890查看 set | grep proxy echo $https_proxy区别 使用set可以设置和查看变量…

最全Web自动化测试面试题

1、Selenium 中 hidden 或者是 display none 的元素是否可以定位到&#xff1f; 不可以。可以写 JavaScript 将标签中的 hidden 先改为 0&#xff0c;再进行定位元素。 2、Selenium 中如何保证操作元素的成功率&#xff1f;也就是说如何保证我点击的元素一 定是可以点击的&a…

PHP爬虫快速获取京东商品详情(代码示例)

在当今互联网时代&#xff0c;数据的重要性不言而喻。对于电商领域来说&#xff0c;获取商品信息是数据分析、市场研究和价格监控的基础。本文将介绍如何使用PHP编写一个简单的爬虫&#xff0c;以快速获取京东商品的详情信息。 1. 概述 京东是中国领先的电商平台之一&#xff…

一、HTML

一、基础概念 1、浏览器相关知识 这五个浏览器市场份额都非常大&#xff0c;且都有自己的内核。 什么是内核&#xff1a; 内核是浏览器的核心&#xff0c;用于处理浏览器所得到的各种资源。 例如&#xff0c;服务器发送图片、视频、音频的资源&#xff0c;浏览…

记录一次非常奇怪的MIME type of “text/html“报错

报错现象 访问指定地址&#xff0c;一直转圈打不开&#xff0c;打开游览器控制台发现有如下报错&#xff1a; Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of “text/html”. Strict MIME type checking i…

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式

Windows10/11开启卓越性能模式 windows开启卓越性能电源模式 工作电脑开启卓越性能模式 电脑开启性能模式 1、所要用到的激活工具2、开启电脑卓越性能模式Windows11Windows10在电源模式中选择卓越性能模式 3、将系统版本切换为 工作站版本 1、所要用到的激活工具 KMS激活工具(…

膜计算 MATLAB例程(仅例程,无背景)

膜计算的实现可以用 MATLAB 进行简单的模拟。以下是一个基础的膜计算模型的示例代码&#xff0c;模拟了膜内部对象的产生和转化过程。这个例子使用简单的对象和规则来演示膜计算的基本思想。 文章目录 主要概念应用领域优势与挑战代码MATLAB 膜计算示例代码代码说明运行代码总结…

Request和Response

前言 这一节主要讲的是Request和Response还有一些实例 1. 介绍 就是这两个参数 WebServlet("/demo7") public class ServletDemo7 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcepti…

Vue全栈开发旅游网项目(10)-设计用户模型

1.设计用户模型 文件地址&#xff1a;accounts/models.py 1.1 用户详细信息 内容包括&#xff1a;性别 手机号 年龄 生日 真实姓名 创建常量&#xff1a;1-男&#xff0c;0-女&#xff1b;editableFalse不许循环 class Profile(models.Model):SEX_CHOICES{(1,男),(0,女)}u…

C++初阶——vector

一、什么是vector vector是表示可变大小的数组的序列容器&#xff0c;就像数组一样&#xff0c;vector也采用连续空间来存储元素。也就是说它的访问和数组一样高效&#xff0c;但是它的大小是动态可变的&#xff0c;并且它的大小会被容器自动处理。 二、vector的构造 常用的构…

迁徙线,动态轨迹线

使用canvas结合贝塞尔曲线实现&#xff0c;效果如下 <template><div class"box"><div class"mapBox"><div class"map"><img src"/img/dataCockpit/map.png" alt"" /><div class"dot&…

SQLI LABS | Less-39 GET-Stacked Query Injection-Intiger Based

关注这个靶场的其它相关笔记&#xff1a;SQLI LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;过关流程 输入下面的链接进入靶场&#xff08;如果你的地址和我不一样&#xff0c;按照你本地的环境来&#xff09;&#xff1a; http://localhost/sqli-labs/Less-39/ 本关是堆…