最近,由于与XGBoost,LightGBM和h2o相比,CatBoost出色的performance benchmarks的启发,我开始使用CatBoost进行机器学习模型的快速原型制作。
由于XGBoost只接受数字特征,因此CatBoost和XGBoost之间的比较需要对分类特征进行通用的预处理。我还不太清楚基准测试中使用哪种预处理对分类特征进行编码,以及不使用简单的一键编码的原理。
我已经尝试阅读实验的documentation。据我了解,对分类特征j
进行编码的过程大约等效于以下内容:
train
集上,将响应y
按j
分组,并与mean
函数聚合。我们称结果为df_agg_j
train
集和df_agg_j
合并到分类列j
上,放下原始分类列j
并改用新的数字列valid
集和df_agg_j
合并到分类列j
上,放下原始分类列j
并改用新的数字列我仍然不了解“对第j个分类特征和第i个对象进行对象的随机排列”,以及在分子的最后将分子的1和分母加2的必要性。 documentation的“拆分准备”部分。
here中提供了用于拆分和预处理数据的代码。
该实验中是否有关于分类特征编码方法的解释(或文献中的一些参考文献),以及该方法与单次编码的比较?
答案 0 :(得分:1)
对于分类特征,使用了基于目标的统计信息。目前,这是预处理GBDT类别功能的最佳方法,其效果比一键式更好。这与目标编码相似,但使用排列不会过度拟合。 有关此方法的详细信息和比较,请参见NIPS 2018年论文“ CatBoost:具有分类特征的无偏增强”(https://arxiv.org/abs/1706.09516)。