将月份和小时等功能编码为分类还是数字?

数据挖掘 机器学习 特征提取 特征工程 编码 数值
2021-09-17 20:56:55

在机器学习模型中将月份和小时等特征编码为因子还是数字更好?

一方面,我觉得数字编码可能是合理的,因为时间是一个向前推进的过程(第 5 个月之后是第 6 个月),但另一方面我认为由于循环性质,分类编码可能更合理年和日(第 12 个月之后是第一个)。

对此有通用解决方案或约定吗?

4个回答

您是否考虑过添加时间变量的(正弦、余弦)变换?例如,这将确保 0 小时和 23 小时彼此接近,从而使变量的周期性特征得以体现。

更多信息

答案取决于您想要表示的时间特征和目标变量之间的关系类型。

如果您将时间编码为数字,那么您对模型施加了某些限制。对于线性回归模型,时间的影响现在是单调的,目标将随时间增加或减少。对于决策树,彼此接近的时间值将被组合在一起。

将时间编码为分类为模型提供了更大的灵活性,但在某些情况下,模型可能没有足够的数据来很好地学习。一种可能有用的技术是将时间值组合到一定数量的集合中,并将该集合用作分类属性。

一些示例分组:

  • 对于月份,根据用例分组为季度或季节。例如:1-3 月、4-6 月等。
  • 对于一天中的小时,分​​组为一天中的时间桶:早上,晚上等,
  • 对于星期几,分组为工作日、周末。

如果有足够的数据,上述每一个也可以直接用作分类属性。此外,还可以通过数据分析发现分组,以补充基于领域知识的方法。

我建议使用数字特征。使用分类特征本质上意味着您不认为两个类别之间的距离是相关的(例如,类别 1 与类别 2 和类别 3 一样接近)。这绝对不是几个小时或几个月的情况。

但是,您提出的问题是您希望以 12 与 11 接近 11 的方式表示小时和月。为了实现这一点,我建议采用评论中的建议并使用使用小时/月作为数字特征之前的正弦/余弦函数。

这取决于您使用的是哪种算法。

如果您使用的是随机森林等基于树的算法,请通过此问题。基于树的算法不需要分类编码。

对于神经网络等其他算法,我建议尝试两种方法(连续和分类)。不同情况下效果不同。