当前位置: 首页 > 知识库问答 >
问题:

在CatBoost基准中使用了哪种预处理来编码分类变量?

傅志诚
2023-03-14

我最近开始使用CatBoost进行机器学习模型的快速原型制作,灵感来自CatBoost与XGBoost、LightGBM和h2o相比的出色性能基准。

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

我试着读了实验的留档。据我所知,对分类特征进行编码的过程大约相当于以下内容:

  1. 训练集中,将响应y分组为j,并与均值函数聚合。让我们调用结果df_agg_j
  2. 左加入训练集合和df_agg_j在分类列j上,删除原来的分类列j并使用新的数字列代替
  3. 左加入有效集合和df_agg_j在分类列j上,删除原来的分类列j并使用新的数字列代替

我仍然不理解“第j个分类特征和第I个对象的对象的随机排列”的必要性,以及在文档“拆分准备”部分的最终公式中,在分子处添加1,在分母处添加2的必要性。

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

在这个实验中,是否有关于编码分类特征的方法的解释(或文献中的一些参考),以及这种方法和one-Hot编码之间的比较?

共有1个答案

金高轩
2023-03-14

对于分类特征,使用基于目标的统计。这是目前预处理GBDT分类特征的最佳方式,比one Hot更好。这类似于目标编码,但使用置换来避免过拟合。关于这种方法的细节和比较可以在NIPS 2018年的论文《CatBoost:带分类特征的无偏提升》(https://arxiv.org/abs/1706.09516)中找到。

 类似资料:
  • 我有一个关于Catboost的问题。在建模之前,我是否要预处理分类? 如果我有86个变量,包括1个目标变量。在这85个变量中,有2个数字变量和83个分类变量(type)。目标变量是二进制因子,1或0。 第1列和第4列至第85列为系数类型 第2列和第3列是数字。 我对

  • 问题内容: 在Python中,元素的编码方式是什么?他们用编码编码吗? sys.getdefaultencoding():返回Unicode实现使用的当前默认字符串编码的名称。 PS :正如一些答案中所指出的,确实是一个更好的 猜测 。但是,我希望看到这个问题的明确答案,并提供可靠来源的指导! PPS :正如Wim指出的那样,Python 3通过将对象放在sys.argv中来解决此问题(如果我理解

  • 问题内容: 我正在尝试使用UCI存储库中的汽车评估数据集,并且想知道是否存在方便的方法来对sklearn中的分类变量进行二值化。一种方法是使用LabelBinarizer的DictVectorizer,但是在这里我得到了k个不同的特征,而为了避免共线性化,您应该只有k-1个。我想我可以编写自己的函数并删除一列,但是这种记账是乏味的,是否有一种简单的方法来执行这样的转换并得到一个稀疏矩阵? 问题答案

  • 本文向大家介绍python中常用的九种预处理方法分享,包括了python中常用的九种预处理方法分享的使用技巧和注意事项,需要的朋友参考一下 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardization or Mean Removal and Variance Scaling) 变换后各维特征有

  • 了解您可以如何在 Dreamweaver 中处理和编译 CSS 预处理器文件。 CSS 预处理器可将用预处理语言编写的代码编译到最熟悉的 CSS 中。预处理语言可将 CSS 提升到更接近编程语言的级别。 具体来说,预处理器允许您使用变量、组合单元、函数以及许多其他 在 CSS 中无法使用的方法。通过 CSS 预处理器,您只需定义所有内容一次,然后即可反复重用它们,从而产生可维护、主题化、可扩展的

  • 问题内容: 有没有办法从一个BeanShell前置/后处理器到另一个BeanShell处理器 (它们在同一个线程组中) 引用变量? 如果我在HTTP Request下的BeanShell PreProcessor中创建一个String变量,那么我可以在同一HTTP Request下的BeanShell PostProcessor中使用或引用该变量。 我尝试通过以下方式访问此变量: + HTTP请求