4

您如何为随机森林算法准备循环序数特征,例如一天中的时间或一周中的一天?

通过仅用午夜后的分钟编码时间,23:55 和 00:05 之间的信息差异将非常大,尽管只有 10 分钟的差异。

我在这里找到了一个解决方案,其中使用午夜后秒数的余弦和正弦将时间特征分成两个特征。但这适用于随机森林吗?使用随机森林不能确定每次拆分都会出现所有特征。所以通常会有一半的时间信息丢失用于决策。

期待你的想法!

4

2 回答 2

0

如果您有一个日期变量,其值类似于“2019/11/09”,您可以提取单个特征,例如年 (2019)、月 (11)、日 (09)、星期几(星期一)、季度(4 ),学期(2)。如果您知道特定事件的日期,您可以继续添加附加功能,例如“银行假日”、“周末”或“广告活动”。

如果您有一个值如 23:55 的时间变量,您可以提取小时 (23)、分钟 (55),如果有,则提取秒、纳秒等。如果您有有关时区的信息,您也可以得到这个。

如果您的 datetime 变量的值类似于“2019/11/09 23:55”,则可以将上述内容结合起来。

如果您有超过 1 个日期时间变量,则可以捕获它们之间的差异,例如,如果您有出生日期和申请日期,则可以确定“申请时的年龄”这一特征。

有关日期时间选项的更多信息可以在 pandas dt 模块中找到。在此处检查方法。

链接中的循环转换用于重新编码循环变量,例如一天中的小时或一年中的几个月,例如 12 月(第 12 个月)更接近 1 月(第 1 个月)而不是 7 月(第 7 个月),而如果您使用数字编码,则不会捕获这种关系。如果这是您想要表示的内容,您将使用此转换。但这不是转换这些变量的标准 go 方法(据我所知)。

你可以查看 Scikit-learn 关于时间相关特征工程的教程。

随机森林捕获特征和目标之间的非线性关系,因此它们应该能够处理月份等数字特征或周期性变化。

可以肯定的是,最好的方法是同时尝试两种工程方法,看看哪个特征可以返回更好的模型性能。

您可以使用开源包 Feature-engine 直接应用循环转换。检查CyclicalTransformer

于 2021-11-29T17:18:09.770 回答
0

日期由日、月和年组成。从这三个部分中,至少可以提取四个不同的特征:

一年中的一天或一个月中的一天或一周中的一天 一年中的月份 季节 年

在所有情况下,除了年份,考虑的特征应该分为两部分:正弦和余弦,以保证周期性,例如 1 月 1 日接近 12 月 31 日。

我写了一篇文章,描述了如何将日期时间转换为特征并在随机森林分类器中利用它们:

https://towardsdatascience.com/make-your-machine-learning-model-work-better-with-datetime-features-eb21de397fe8

于 2022-01-26T21:45:13.357 回答