广西优化网站 优帮云,wordpress弹窗留言,499可以做网站,微信商城开通多少钱CatBoost中的目标变量统计#xff08;Target Statistics#xff09;是其处理分类特征#xff08;Categorical Features#xff09;的核心技术之一。目标变量统计是一种特殊的编码方法#xff0c;通过利用目标值信息生成数值特征#xff0c;从而替代传统的独热编码或其他处…CatBoost中的目标变量统计Target Statistics是其处理分类特征Categorical Features的核心技术之一。目标变量统计是一种特殊的编码方法通过利用目标值信息生成数值特征从而替代传统的独热编码或其他处理方法。这种方法对于具有高基数分类特征如ID或字符串特别高效。 目标变量统计的原理
目标变量统计编码的关键思想是用分类特征的历史统计信息来替代原始的类别值。例如对于分类特征 A A A其编码可以表示为该特征下目标变量 y y y 的均值、加权均值或其他统计量。
在CatBoost中目标变量统计的计算方式遵循以下原则 避免数据泄漏 目标变量的统计值只能使用当前样本之前的数据计算确保训练过程中不会泄漏测试数据的目标值。这通过Ordered Target Statistics来实现。 动态计算方式 每一行的目标统计值根据之前数据的目标值动态计算而不是直接使用整个数据集的统计值。 平滑处理 为避免分类特征类别样本量较小时统计值不稳定CatBoost对统计结果进行了平滑处理。一种常见的平滑方式是将类别均值与全局目标均值按权重组合。 计算目标变量统计的过程
1. 公式表达
目标变量统计编码通常采用以下形式计算 S ( A i ) ∑ j 1 i − 1 y j α ⋅ μ N i − 1 α S(A_i) \frac{\sum_{j1}^{i-1} y_j \alpha \cdot \mu}{N_{i-1} \alpha} S(Ai)Ni−1α∑j1i−1yjα⋅μ
其中 A i A_i Ai 是样本 i i i 的分类特征值 y j y_j yj 是样本 j j j 的目标值 μ \mu μ 是目标变量的全局均值 N i − 1 N_{i-1} Ni−1 是类别 A i A_i Ai 在样本 1 1 1 到 i − 1 i-1 i−1 中的出现次数 α \alpha α 是平滑参数控制全局均值对结果的影响。
2. 分布处理
目标统计值通过逐行处理的方式计算确保样本 i i i 的值不会用到样本 i i i 本身的目标值从而避免信息泄漏。
3. 分组计算
对于训练数据集CatBoost在内部根据数据顺序分组先计算每组的目标统计再将这些统计结果应用于模型训练。 Ordered Target Statistics的独特性
CatBoost的“Ordered Target Statistics”相较于其他目标编码方法的主要不同在于
动态顺序计算 按照训练数据的时间顺序逐步更新确保每个样本的目标统计值基于其之前样本计算。 无信息泄漏 避免了传统目标编码中使用目标变量的整体统计值而导致的未来信息泄漏问题。 具体案例
假设有一个数据集如下
样本ID分类特征City目标变量点击率1New York12Los Angeles03New York14Los Angeles15New York0
目标变量统计编码的过程如下
第一行 对于 C i t y New York City \text{New York} CityNew York没有历史数据目标统计值使用初始全局均值 μ \mu μ。 第二行 对于 C i t y Los Angeles City \text{Los Angeles} CityLos Angeles同样使用全局均值。 第三行 对于 C i t y New York City \text{New York} CityNew York基于前两行计算 S ( New York ) 1 1 1 S(\text{New York}) \frac{1}{1} 1 S(New York)111 以此类推。 目标变量统计的优点 对高基数分类特征有效 比如用户ID、商品ID这些特征类别非常多传统方法如独热编码会导致高维稀疏矩阵而目标统计可以生成紧凑的数值特征。 避免信息泄漏 Ordered Statistics的顺序计算确保每个样本的特征值与目标变量是独立的。 对模型性能提升显著 目标变量统计利用了目标变量的潜在分布信息可以提升模型预测精度。 代码实现示例
from catboost import CatBoostClassifier, Pool# 示例数据
data {City: [New York, Los Angeles, New York, Los Angeles, New York],Clicked: [1, 0, 1, 1, 0]
}# 数据池
train_data Pool(datadata[City], labeldata[Clicked], cat_features[0])# 初始化模型
model CatBoostClassifier(iterations10, depth2, learning_rate0.1)# 训练模型
model.fit(train_data)# 查看目标变量统计
print(model.get_feature_importance(prettifiedTrue))此代码中CatBoost会自动对City特征进行目标统计编码无需用户显式指定。