如何为随机森林算法准备循环序数特征,如一天中的时间或一周中的一天?
通过仅编码午夜后几分钟的时间,23:55和00:05之间的信息差异将非常大,尽管只有10分钟的差异。
我找到了一个解决方案here,其中使用午夜后秒数的余弦和正弦将时间特性拆分为两个特性。但是,这是否适用于随机森林?使用随机森林,人们不能确保所有功能都会出现在每个拆分中。所以经常会有一半的时间信息对于决策来说是丢失的。
期待你的想法!
发布于 2021-11-29 17:18:10
如果你有一个日期变量,值像'2019/11/09',你可以提取单个特征,比如年(2019),月(11),日(09),星期几(星期一),季度(4),学期(2)。如果您知道特定事件的日期,您可以继续添加其他功能,如“是银行假日”、“是周末”或“广告活动”。
如果你有一个像23:55这样的时间变量,你可以提取hr (23),分钟(55),如果你有,秒,纳秒等等。如果你有关于时区的信息,你也可以得到这个。
如果你的datetime变量的值类似于'2019/11/09 23:55',你可以组合上面的值。
如果你有一个以上的日期时间变量,你可以捕捉它们之间的差异,例如,如果你有出生日期和申请日期,你可以确定功能“申请时的年龄”。
有关datetime选项的更多信息可以在pandas dt模块中找到。检查方法here。
链接中的循环转换用于重新编码循环变量,如一天的小时数或一年中的月份,例如,12月(12月)比7月(7月)更接近1月(1月1),而如果使用数字编码,则不会捕获这种关系。如果这是您想要表示的内容,则可以使用此转换。但这不是转换这个变量的标准go方法(据我所知)。
你可以在time related feature engineering上查看Scikit-learn的教程。
随机森林捕获特征和目标之间的非线性关系,因此它们应该能够处理月份或周期性变化等数字特征。
为了绝对确定,最好的方法是尝试这两种工程方法,看看哪种功能可以返回更好的模型性能。
您可以直接使用开源包Feature-engine应用循环转换。检查CyclicalTransformer。
发布于 2022-01-26 21:45:13
日期由日、月和年组成。从这三个部分中,至少可以提取四个不同的特征:
一年中的某一天或某月的某一天或某周的某一天一年中的某月每一季
在除年份之外的所有情况下,考虑的特征应分为两部分:正弦和余弦,以保证周期性,例如,1月1日接近12月31日。
我写了一篇文章,描述了如何将datetimes转换为功能,并在随机森林分类器中利用它们:
https://stackoverflow.com/questions/47350569
复制相似问题