CatBoost 中对分类特征进行目标变量统计编码 公式解析

公式 14-2 是 CatBoost 中对分类特征进行目标变量统计编码的一种改进版本,加入了平滑项,用于处理稀疏数据和类别样本不足的情况。下面是对公式的详细解释:

公式 14-2

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=1i−1[xσj,k=xσi,k]+a∑j=1i−1[xσj,k=xσi,k]Yσj+a⋅p


公式的意义

公式用于计算分类特征 x k x_k xk 的目标变量统计值 x ^ k i \hat{x}_k^i x^ki。

统计值 x ^ k i \hat{x}_k^i x^ki 是基于当前样本 i i i 之前的训练样本数据计算得到的。

通过引入平滑参数 a a a 和全局目标变量均值 p p p,公式能够避免统计值在样本数量较少时过于极端或不稳定。


公式中的符号含义
  1. x ^ k i \hat{x}_k^i x^ki:

    • 表示第 i i i 个样本在分类特征 k k k 上的目标变量统计值。
  2. x σ j , k x_{\sigma_j,k} xσj,k 和 x σ i , k x_{\sigma_i,k} xσi,k:

    • x σ j , k x_{\sigma_j,k} xσj,k:第 j j j 个样本在分类特征 k k k 上的取值。
    • x σ i , k x_{\sigma_i,k} xσi,k:第 i i i 个样本在分类特征 k k k 上的取值。
  3. 指示函数 [ x σ j , k = x σ i , k ] [x_{\sigma_j,k} = x_{\sigma_i,k}] [xσj,k=xσi,k]:

    • 当 x σ j , k = x σ i , k x_{\sigma_j,k} = x_{\sigma_i,k} xσj,k=xσi,k 时,其值为 1;否则为 0。
    • 用于选择与当前样本 i i i 的特征值 x σ i , k x_{\sigma_i,k} xσi,k 相同的样本。
  4. Y σ j Y_{\sigma_j} Yσj:

    • 样本 j j j 的目标变量值。
  5. a a a:

    • 平滑参数,控制全局均值 p p p 对目标统计值的影响。
      • 如果 a a a 较大,则统计值更依赖全局均值 p p p;
      • 如果 a a a 较小,则统计值更依赖于当前类别的历史统计值。
  6. p p p:

    • 全局目标变量均值,即所有样本目标变量 Y Y Y 的平均值:
      p = ∑ j = 1 n Y j n p = \frac{\sum_{j=1}^n Y_j}{n} p=n∑j=1nYj
      n n n 为总样本数。
  7. σ \sigma σ:

    • 表示样本的排列顺序,确保计算过程中只使用当前样本之前的数据。
  8. 分子:

    • 包含两部分:
      • ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] Y σ j \sum_{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}] Y_{\sigma_j} ∑j=1i−1[xσj,k=xσi,k]Yσj:
        当前样本之前,与 x σ i , k x_{\sigma_i,k} xσi,k 特征值相同的样本目标值之和。
      • a ⋅ p a \cdot p a⋅p:
        平滑项,表示全局目标均值对统计值的贡献。
  9. 分母:

    • 同样包含两部分:
      • ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] \sum_{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}] ∑j=1i−1[xσj,k=xσi,k]:
        当前样本之前,与 x σ i , k x_{\sigma_i,k} xσi,k 特征值相同的样本数量。
      • a a a:
        平滑因子,防止分母为零。

公式分解与逐步解释

1. 未引入平滑项时的目标统计值

目标统计值是当前类别目标变量的历史加权均值:
x ^ k i = ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] Y σ j ∑ j = 1 i − 1 [ x σ j , k = x σ i , k ] \hat{x}k^i = \frac{\sum{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}] Y_{\sigma_j}}{\sum_{j=1}^{i-1} [x_{\sigma_j,k} = x_{\sigma_i,k}]} x^ki=∑j=1i−1[xσj,k=xσi,k]∑j=1i−1[xσj,k=xσi,k]Yσj

  • 问题:当 i − 1 i-1 i−1 中满足 x σ j , k = x σ i , k x_{\sigma_j,k} = x_{\sigma_i,k} xσj,k=xσi,k 的样本数量较少时(稀疏类别或训练早期),分母较小,统计值可能过于极端。
2. 引入平滑项后的目标统计值

通过加入全局目标均值 p p p 和权重因子 a a a,使得统计值更平滑、更鲁棒:

  • 当样本数量较多时:
    • 分母中的 a a a 对总值的贡献较小,公式更依赖于当前类别的目标统计。
  • 当样本数量较少时:
    • 分母中的 a a a 占比较大,公式更依赖于全局均值 p p p。

这有效缓解了稀疏类别问题。


计算步骤

  1. 定位与当前样本 x σ i , k x_{\sigma_i,k} xσi,k 特征值相同的历史样本

    • 遍历当前样本之前的所有样本 j = 1 , 2 , ... , i − 1 j = 1, 2, \dots, i-1 j=1,2,...,i−1,使用指示函数 [ x σ j , k = x σ i , k ] [x_{\sigma_j,k} = x_{\sigma_i,k}] [xσj,k=xσi,k] 筛选出特征值相同的样本。
  2. 累加目标变量 Y Y Y

    • 对筛选出的样本目标变量 Y σ j Y_{\sigma_j} Yσj 求和,得到该类别的目标值总和。
  3. 加上平滑项

    • 将全局目标均值 p p p 乘以平滑参数 a a a,作为额外的平滑贡献。
  4. 计算分母

    • 累加与当前样本 x σ i , k x_{\sigma_i,k} xσi,k 特征值相同的历史样本数量,再加上平滑参数 a a a。
  5. 计算目标统计值

    • 将分子除以分母,得到平滑后的目标统计值。

公式的作用

  1. 解决稀疏类别问题

    • 当类别 x σ i , k x_{\sigma_i,k} xσi,k 的样本数量较少时,统计值会更依赖于全局均值 p p p,从而避免过拟合。
  2. 避免数据泄漏

    • CatBoost 通过排序提升方法(Ordered Boosting),保证计算当前样本的目标统计值时,仅使用当前样本之前的历史数据,避免目标变量泄漏。
  3. 提高模型稳定性

    • 引入平滑项 a a a 和全局均值 p p p,使得模型在稀疏数据或早期训练阶段更加稳定。

示例

假设有如下数据:

样本 i i i 分类特征 x i x_i xi 目标值 Y i Y_i Yi
1 A 1
2 B 0
3 A 1
4 A 0
5 B 1

全局目标均值:
p = 1 + 0 + 1 + 0 + 1 5 = 0.6 p = \frac{1 + 0 + 1 + 0 + 1}{5} = 0.6 p=51+0+1+0+1=0.6

平滑因子:
a = 2 a = 2 a=2

计算 x ^ k 3 \hat{x}_k^3 x^k3(第 3 行,类别 A A A):

  1. 历史样本中 x σ j , k = x σ 3 , k = A x_{\sigma_j,k} = x_{\sigma_3,k} = A xσj,k=xσ3,k=A:

    • 第 1 行: Y 1 = 1 Y_1 = 1 Y1=1。
    • 所以,分子为:
      ∑ j = 1 2 [ x σ j , k = x σ 3 , k ] Y σ j + a ⋅ p = 1 + 2 ⋅ 0.6 = 2.2 \sum_{j=1}^{2} [x_{\sigma_j,k} = x_{\sigma_3,k}] Y_{\sigma_j} + a \cdot p = 1 + 2 \cdot 0.6 = 2.2 j=1∑2[xσj,k=xσ3,k]Yσj+a⋅p=1+2⋅0.6=2.2
    • 分母为:
      ∑ j = 1 2 [ x σ j , k = x σ 3 , k ] + a = 1 + 2 = 3 \sum_{j=1}^{2} [x_{\sigma_j,k} = x_{\sigma_3,k}] + a = 1 + 2 = 3 j=1∑2[xσj,k=xσ3,k]+a=1+2=3
  2. 目标统计值:
    x ^ k 3 = 2.2 3 ≈ 0.733 \hat{x}_k^3 = \frac{2.2}{3} \approx 0.733 x^k3=32.2≈0.733

相关推荐
声网2 分钟前
「人眼视觉不再是视频消费的唯一形式」丨智能编解码和 AI 视频生成专场回顾@RTE2024
人工智能·音视频
newxtc11 分钟前
【AiPPT-注册/登录安全分析报告-无验证方式导致安全隐患】
人工智能·安全·ai写作·极验·行为验证
技术仔QAQ26 分钟前
【tokenization分词】WordPiece, Byte-Pair Encoding(BPE), Byte-level BPE(BBPE)的原理和代码
人工智能·python·gpt·语言模型·自然语言处理·开源·nlp
神一样的老师29 分钟前
去中心化联邦学习与TinyML联合调查:群学习简介
机器学习
陌上阳光1 小时前
动手学深度学习70 BERT微调
人工智能·深度学习·bert
正义的彬彬侠2 小时前
sklearn.datasets中make_classification函数
人工智能·python·机器学习·分类·sklearn
belldeep2 小时前
python:用 sklearn 转换器处理数据
python·机器学习·sklearn
ctrey_2 小时前
2024-11-13 学习人工智能的Day26 sklearn(2)
人工智能·学习·sklearn
安静的_显眼包O_o2 小时前
from sklearn.preprocessing import Imputer.处理缺失数据的工具
人工智能·python·sklearn
安静的_显眼包O_o2 小时前
from sklearn.feature_selection import VarianceThreshold.移除低方差的特征来减少数据集中的特征数量
人工智能·python·sklearn