公式 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,公式能够避免统计值在样本数量较少时过于极端或不稳定。
公式中的符号含义
-
x ^ k i \hat{x}_k^i x^ki:
- 表示第 i i i 个样本在分类特征 k k k 上的目标变量统计值。
-
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 上的取值。
-
指示函数 [ 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 相同的样本。
-
Y σ j Y_{\sigma_j} Yσj:
- 样本 j j j 的目标变量值。
-
a a a:
- 平滑参数,控制全局均值 p p p 对目标统计值的影响。
- 如果 a a a 较大,则统计值更依赖全局均值 p p p;
- 如果 a a a 较小,则统计值更依赖于当前类别的历史统计值。
- 平滑参数,控制全局均值 p p p 对目标统计值的影响。
-
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 为总样本数。
- 全局目标变量均值,即所有样本目标变量 Y Y Y 的平均值:
-
σ \sigma σ:
- 表示样本的排列顺序,确保计算过程中只使用当前样本之前的数据。
-
分子:
- 包含两部分:
- ∑ 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:
平滑项,表示全局目标均值对统计值的贡献。
- ∑ 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:
- 包含两部分:
-
分母:
- 同样包含两部分:
- ∑ 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:
平滑因子,防止分母为零。
- ∑ 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]:
- 同样包含两部分:
公式分解与逐步解释
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。
这有效缓解了稀疏类别问题。
计算步骤
-
定位与当前样本 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] 筛选出特征值相同的样本。
-
累加目标变量 Y Y Y:
- 对筛选出的样本目标变量 Y σ j Y_{\sigma_j} Yσj 求和,得到该类别的目标值总和。
-
加上平滑项:
- 将全局目标均值 p p p 乘以平滑参数 a a a,作为额外的平滑贡献。
-
计算分母:
- 累加与当前样本 x σ i , k x_{\sigma_i,k} xσi,k 特征值相同的历史样本数量,再加上平滑参数 a a a。
-
计算目标统计值:
- 将分子除以分母,得到平滑后的目标统计值。
公式的作用
-
解决稀疏类别问题:
- 当类别 x σ i , k x_{\sigma_i,k} xσi,k 的样本数量较少时,统计值会更依赖于全局均值 p p p,从而避免过拟合。
-
避免数据泄漏:
- CatBoost 通过排序提升方法(Ordered Boosting),保证计算当前样本的目标统计值时,仅使用当前样本之前的历史数据,避免目标变量泄漏。
-
提高模型稳定性:
- 引入平滑项 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):
-
历史样本中 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
-
目标统计值:
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