CatBoost基准测试中使用哪种预处理对分类变量进行编码?

时间:2019-01-13 18:02:15

标签: machine-learning catboost

最近,由于与XGBoost,LightGBM和h2o相比,CatBoost出色的performance benchmarks的启发,我开始使用CatBoost进行机器学习模型的快速原型制作。

由于XGBoost只接受数字特征,因此CatBoost和XGBoost之间的比较需要对分类特征进行通用的预处理。我还不太清楚基准测试中使用哪种预处理对分类特征进行编码,以及不使用简单的一键编码的原理。

我已经尝试阅读实验的documentation。据我了解,对分类特征j进行编码的过程大约等效于以下内容:

  1. train集上,将响应yj分组,并与mean函数聚合。我们称结果为df_agg_j
  2. train集和df_agg_j合并到分类列j上,放下原始分类列j并改用新的数字列
  3. valid集和df_agg_j合并到分类列j上,放下原始分类列j并改用新的数字列

我仍然不了解“对第j个分类特征和第i个对象进行对象的随机排列”,以及在分子的最后将分子的1和分母加2的必要性。 documentation的“拆分准备”部分。

here中提供了用于拆分和预处理数据的代码。

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

1 个答案:

答案 0 :(得分:1)

对于分类特征,使用了基于目标的统计信息。目前,这是预处理GBDT类别功能的最佳方法,其效果比一键式更好。这与目标编码相似,但使用排列不会过度拟合。 有关此方法的详细信息和比较,请参见NIPS 2018年论文“ CatBoost:具有分类特征的无偏增强”(https://arxiv.org/abs/1706.09516)。