您如何为随机森林算法准备循环序数特征,例如一天中的时间或一周中的一天?
通过仅用午夜后的分钟编码时间,23:55 和 00:05 之间的信息差异将非常大,尽管只有 10 分钟的差异。
我在这里找到了一个解决方案,其中使用午夜后秒数的余弦和正弦将时间特征分成两个特征。但这适用于随机森林吗?使用随机森林不能确定每次拆分都会出现所有特征。所以通常会有一半的时间信息丢失用于决策。
期待你的想法!
您如何为随机森林算法准备循环序数特征,例如一天中的时间或一周中的一天?
通过仅用午夜后的分钟编码时间,23:55 和 00:05 之间的信息差异将非常大,尽管只有 10 分钟的差异。
我在这里找到了一个解决方案,其中使用午夜后秒数的余弦和正弦将时间特征分成两个特征。但这适用于随机森林吗?使用随机森林不能确定每次拆分都会出现所有特征。所以通常会有一半的时间信息丢失用于决策。
期待你的想法!
如果您有一个日期变量,其值类似于“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。
日期由日、月和年组成。从这三个部分中,至少可以提取四个不同的特征:
一年中的一天或一个月中的一天或一周中的一天 一年中的月份 季节 年
在所有情况下,除了年份,考虑的特征应该分为两部分:正弦和余弦,以保证周期性,例如 1 月 1 日接近 12 月 31 日。
我写了一篇文章,描述了如何将日期时间转换为特征并在随机森林分类器中利用它们: