XGBoost/CatBoost中具有大量类别的分类变量
Posted
技术标签:
【中文标题】XGBoost/CatBoost中具有大量类别的分类变量【英文标题】:Categorical variables with large amounts of categories in XGBoost/CatBoost 【发布时间】:2022-01-17 00:57:22 【问题描述】:我有一个关于随机森林的问题。想象一下,我有关于用户与项目交互的数据。项目的数量很大,大约 10 000 个。我的随机森林输出应该是用户可能与之交互的项目(如推荐系统)。对于任何用户,我都想使用一个功能来描述用户过去与之交互的项目。但是,将分类产品特征映射为 one-hot 编码似乎非常低效,因为用户最多与不超过几百个项目进行交互,有时只有 5 个。
当输入特征之一是具有约 10 000 个可能值的分类变量而输出是具有约 10 000 个可能值的分类变量时,您将如何构建随机森林?我应该使用具有分类功能的 CatBoost 吗?或者我应该使用 one-hot 编码,如果是,你认为 XGBoost 还是 CatBoost 做得更好?
【问题讨论】:
这可能会在datascience.stackexchange.com 上问得更好——这似乎比代码更具理论性? 好的,我去那里试试,谢谢 【参考方案1】:您还可以尝试实体嵌入,将数百个布尔特征简化为小维度的向量。
它类似于分类特征的词嵌入。实际上,您定义了将离散特征空间嵌入到低维向量空间中。它可以增强您的结果并节省内存。缺点是您确实需要事先训练一个神经网络模型来定义嵌入。
查看this article了解更多信息。
【讨论】:
是的,我很久没有写这个问题了,从那时起学到了很多东西,但我认为如果我回到这个问题,这将是我的方法。在我的书中嵌入真的很棒【参考方案2】:XGBoost 不直接支持分类特征,您需要进行预处理才能将其与 catfeatures 一起使用。例如,您可以进行 one-hot 编码。如果你的 cat 特征有一些频繁的值,one-hot 编码通常效果很好。
CatBoost 确实支持分类特征 - 包括单热编码和计算分类特征的不同统计信息。要使用 one-hot 编码,您需要使用 one_hot_max_size 参数启用它,默认情况下会计算统计信息。统计数据通常更适用于具有许多值的分类特征。
【讨论】:
【参考方案3】:假设您有足够的领域专业知识,您可以从现有列创建一个新的分类列。 前任:- 如果您的列具有以下值
A,B,C,D,E,F,G,H
如果您知道 A,B,C 相似 D,E,F 相似并且 G,H 相似 您的新专栏将是
Z,Z,Z,Y,Y,Y,X,X.
在您的随机森林模型中,您应该删除前一列并仅包含此新列。通过像这样转换您的功能,您将失去对模式的可解释性。
【讨论】:
以上是关于XGBoost/CatBoost中具有大量类别的分类变量的主要内容,如果未能解决你的问题,请参考以下文章
NGBoost美国斯坦福大学团队算法介绍-作者亲测性能对比LightGBM,XGBoost,catboost
GBDT家族:GBDT家族成员的演进路劲xgboost模型lightGBMLightGBM 相对于 XGBoost 的优点catboostxgboostcatboostlightGBM对
Elasticsearch:运用scroll接口对大量数据实现更好的分页