gpt4 book ai didi

machine-learning - 在 XGboost 中呈现数值分类数据(特别是一天中的小时)变量的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-30 09:40:35 29 4
gpt4 key购买 nike

最好是进行一次编码还是将其保留为单个数字变量?我在网上读到的结论褒贬不一:

“对于高基数列和基于决策树的算法,请避免使用 OneHot。” https://towardsdatascience.com/smarter-ways-to-encode-categorical-data-for-machine-learning-part-1-of-3-6dca2f71b159

相反

“(onehotencoded) 这是 xgboost 或任何其他机器学习工具的分类变量的正确表示。” XGBoost Categorical Variables: Dummification vs encoding

最佳答案

有不止两种思想流派:)。在实践中,一切都有利有弊,最佳方法将取决于您的数据。因此,通常的前进道路是尝试所有可行的选项,并选择最适合您的用例的选项(不仅在指标方面,而且在 CPU/RAM 方面,如果数据并不小的话)

例如,OHE 将添加多个列,这在长表的情况下可能会导致大量内存占用。同时 OHE 会丢失序数信息(如果特征是序数的话)。但这可能不是问题,因为树经常动态地标记目标的相关依赖关系。另一方面,小时的简单有序数字表示会降低内存占用并保持值的有序序列。但问题是它丢失了大约 24 点后 1 小时的信息,它将与 xgboost 中的树助推器一起使用,但不能与 xgboost 中的线性助推器或 xgboost 之外的其他模型系列(线性、svm 等)一起使用,并且它对于非序数特征来说理论上并不合理(你的问题似乎很笼统)。

让我添加适用于这种特殊情况的第三种思想:您可以使用具有重复周期(一年中的月份、一天中的小时等)的特征的循环编码。 )。其概念是使用 sincos 函数以固定周期(如果是一天中的小时,则为 24)对每个值进行编码。这允许保持边缘的连续性并保持内存受到控制(只有 2 个特征而不是原始的数字有序表示),并且编码特征的数量不依赖于基数。谷歌一下就可以找到很多讨论,例如这个问题:https://datascience.stackexchange.com/q/5990/53060 。我确信网络上有很多它的实现,我个人在 python 中使用这个:https://github.com/MaxHalford/xam/blob/master/docs/feature-extraction.md#cyclic-features 。当然,这不适用于一般的数值分类数据,而是具体适用于一天中的某个小时。

但正如一开始所说,我个人会尝试所有这些方法,看看哪个最适合当前的问题。循环编码对于一天中的某个小时来说在概念上是最合理的,但可能比其他方法表现更差,并且对于像“年龄组”这样的功能来说毫无意义。

关于machine-learning - 在 XGboost 中呈现数值分类数据(特别是一天中的小时)变量的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58936445/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com