1

我最近开始使用 CatBoost 对机器学习模型进行快速原型设计,这受到CatBoost 与 XGBoost、LightGBM 和 h2o 相比出色的性能基准的启发。

由于 XGBoost 只能接受数字特征,因此 CatBoost 和 XGBoost 之间的比较需要对分类特征进行通用预处理。我并不完全清楚在基准测试实验中使用什么样的预处理来编码分类特征,以及不使用简单的 one-hot 编码的理由。

我试图阅读实验的文档。据我了解,对分类特征进行编码的过程j大致相当于以下内容:

  1. train集合上,将响应分组yjmean函数聚合。让我们调用结果df_agg_j
  2. 左加入train集合并df_agg_j在分类列上j,删除原始分类列j并改用新的数字列
  3. 左加入valid集合并df_agg_j在分类列上j,删除原始分类列j并改用新的数字列

我仍然不明白需要“随机排列第 j 个分类特征和第 i 个对象的对象”,以及在“准备”部分下的最终公式中的分子加 1 和分母加 2分裂”的文档

可以在这里找到拆分和预处理数据的代码。

是否有关于本实验中用于编码分类特征的方法的解释(或文献中的一些参考),以及该方法与 one-hot 编码之间的比较?

4

1 回答 1

2

对于分类特征,使用了基于目标的统计数据。这是目前为 GBDT 预处理分类特征的最佳方法,比 one-hot 效果更好。这类似于目标编码,但使用置换来避免过度拟合。有关此方法的详细信息和比较可以在 NIPS 2018 论文“CatBoost: unbiased boosting with categorical features”(https://arxiv.org/abs/1706.09516)中找到。

于 2019-01-18T14:11:37.260 回答