【问题标题】:What's the best way to represent Hour of Day and Day of Week as a feature in for value prediction models in Machine Learning?将时间和星期几表示为机器学习中价值预测模型的特征的最佳方法是什么?
【发布时间】:2018-02-15 07:53:56
【问题描述】:
在使用机器学习中的特征并在矩阵中表示它们时,将一天中的小时和一周中的一天表示为价值预测模型的特征的推荐方法是什么?
是否对所有小时值使用 0,对小时使用 1 来表示将这些属性表示为特征的首选方式?星期几也一样?
谢谢
【问题讨论】:
标签:
machine-learning
scikit-learn
feature-selection
feature-engineering
【解决方案1】:
在这种情况下,存在周期性的每周趋势和长期的上升趋势。所以你会想要编码两个时间变量:
- day_of_week
- absolute_time
一般情况
有几个常见的趋势发生时间范围:
- absolute_time
- day_of_year
- day_of_week
- month_of_year
- hour_of_day
- minute_of_hour
寻找所有这些方面的趋势。
奇怪的趋势
也寻找奇怪的趋势。例如,您可能会看到罕见但持续的基于时间的趋势:
- is_easter
- is_superbowl
- is_national_emergency
等
这些通常要求您将数据与将事件映射到时间的某些外部源进行交叉引用。
为什么要绘制图表?
我认为图表如此重要的原因有两个。
奇怪的趋势:
虽然总体趋势可以很容易地自动化(每次只需添加它们),但奇怪的趋势通常需要人眼和对世界的了解才能找到。这就是图表如此重要的原因之一。
数据错误:
数据中经常有严重的错误。例如,您可能会发现日期以两种格式编码,并且只有其中一种已正确加载到您的程序中。有无数这样的问题,而且它们出奇地普遍。这是我认为图表很重要的另一个原因,不仅适用于时间序列,而且适用于任何数据。
https://datascience.stackexchange.com/questions/2368/machine-learning-features-engineering-from-date-time-data的回答
【解决方案2】:
否,您的选择并不完美,因为就像你将失去循环表示,因为在小时内时,机器学习需要知道23:00靠近00:00和平日同样的事情,它一般开始星期一和周日为6,所以如果使用您的方法,机器学习将每天代表每天或数小时,作为与其他无关的实体,这是错误的。
代表这种类型的数据的正确方法是您代表具有两个功能的每个功能(一周中的一天,一天。
这两个特征是值的SIN / COS,例如几个小时,您可以创建小时/小时/小时_sin然后为每小时计算SIN和COS值,然后在应用SIN和COS之前,您需要计算 theta ,在python中,您只需从数学导入pi,然后:
theta = 2 * pi *小时
然后,您也从数学中导入SIN和COS,并计算SIN(THETA)COS(THETA)