Machine learning 在CatBoost基准测试中使用了什么样的预处理来编码分类变量?

Machine learning 在CatBoost基准测试中使用了什么样的预处理来编码分类变量?,machine-learning,catboost,Machine Learning,Catboost,我最近开始使用CatBoost快速制作机器学习模型的原型,灵感来自CatBoost与XGBoost、LightGBM和h2o相比的卓越之处 由于XGBoost只能接受数字特征,因此CatBoost和XGBoost之间的比较需要对分类特征进行公共预处理。我并不完全清楚在基准测试实验中使用了什么样的预处理来对分类特征进行编码,以及不使用简单的一次性编码的原理 我试着读实验的结果。据我所知,对分类特征j进行编码的过程大致相当于以下内容: 在列车集合上,通过j对响应y进行分组,并使用平均值功能进行聚合。

我最近开始使用CatBoost快速制作机器学习模型的原型,灵感来自CatBoost与XGBoost、LightGBM和h2o相比的卓越之处

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

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

  • 列车
    集合上,通过
    j
    对响应y进行分组,并使用
    平均值
    功能进行聚合。让我们调用结果
    df\u agg\u j
  • 左键加入分类列
    j
    上的
    train
    集合和
    df_agg_j
    ,放下原来的分类列
    j
    ,改用新的数字列
  • 左键连接分类列
    j
    上的
    valid
    集合和
    df_agg\u j
    ,删除原始分类列
    j
    ,改用新的数字列
  • 我仍然不明白“第j个分类特征和第I个对象的对象随机排列”的必要性,也不理解在最后的公式中,在“准备拆分”一节中,在分子处加1,在分母处加2的必要性

    可以找到用于分割和预处理数据的代码


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

    对分类特征使用了基于目标的统计。这是目前对GBDT的分类特征进行预处理的最佳方法,其效果优于热处理方法。这类似于目标编码,但使用置换来避免过度拟合。
    有关此方法的详细信息和比较,请参见NIPS 2018论文“CatBoost:分类功能的无偏增强”()。

    谢谢您的回答。事实上,我只是在寻找一个直观的解释这个基于目标的统计数据,没有沉重的数学符号。我在Yandex网站()上找到了一些资料,但我非常感谢关于这种分类编码的其他示例、解释和最佳实践。在这个例子中,这里有一个关于XGBoost的直观解释:对这种分类编码有一个高层次的直觉是非常有用的,能够回答建模过程中出现的简单问题,例如:如果我将一些数字变量视为分类变量,CatBoost的性能会提高吗?如果某些分类变量高度相关,CatBoost的性能会恶化吗?非常感谢。我发现了CatBoost基于目标的分类编码的实现。是否有一个函数可以以这种方式预处理分类列,而不必绑定到CatBoost?它应该像scikit学习管道中的转换器一样工作,就像。在预处理之后,应该能够尝试不同的模型(CatBoost、XGBoost等)。提前谢谢!