像年、月、日、小时这种时间变量一般怎么处理?

  统计/机器学习 数据预处理 时间序列    浏览次数:5905        分享
2

我在做一个预测模型,有一些时间特征,比如像月份和礼拜几,还有小时该怎么处理?

比方说,对于小时来说,0表示这个数据记录时间在0点到1点之间,20表示记录在20到21点之间。我是该用OneHotEncode把它转化为categorical变量呢,还是就把它当做正常的数值变量?用OneHotEncoder的话,我就损失了时间的连续性;用数值变量的话,明明23点和0点只差一个小时,但是在数值上却是相差最大的。

类似的,礼拜几,日期,分钟,都有这样的困扰出现。有什么好方法吗?

 

Gakki   2017-04-02 11:18



   1个回答 
9

我们可以不用OneHotEncoding,可以用极坐标来表示周期的变量。


我就拿小时举例吧,其他的都可以以此类推。

因为时间变量都是有周期性的,所以可以联想到极坐标(想象一下钟表)。不过为了表达原本时间上的连续性以及头尾的相接性,我们需要把原来的数据从一维变成两维的。比如原来是$h$,现在就转化$(\cos\frac{2\pi h}{24}, \sin\frac{2\pi h}{24})$。

比如原来的小时变量的数据位

H

0

1

17

23

就被转化为两个变量

H_cos     H_sin

1.000     0.000

0.966     0.259

-0.259     -0.966

0.966     -0.259

这样我们就保证了时间的连续性和头尾相接性。


如果是分钟,就转化为$(\cos\frac{2\pi m}{60}, \sin\frac{2\pi m}{60})$. 


如果是月份,就转化为$(\cos\frac{2\pi Mon}{12}, \sin\frac{2\pi Mon}{12})$.


SofaSofa数据科学社区DS面试题库 DS面经

高代兄   2017-04-03 12:11

机智的处理方法! - Steven0612   2017-04-11 02:24


  相关讨论

时间序列样本中有负数时怎么求几何平均值?

python 如何根据日期进行分组处理

ARIMA模型中的三个参数(p, d, q)都是什么意思?

如何判断时间序列的周期性?

怎么判断一个时间序列是平稳的?

python两个日期,求间隔的天数

datetime模块里的datetime.combine什么用?

怎么把datetime类型转为字符串类型,但只保留日期

python如何对日期做遍历?有没有类似range的函数?

怎么在python中获取昨天的日期的字符串?

  随便看看

95%置信区间的正确理解

lightgbm.LGBMModel和lightgbm.LGBMClassifier该用哪个?

决策树、随机森林中的多重共线性问题

主成分分析法(PCA)算是黑盒算法吗?

怎么从矩母函数(mgf)推导得到概率密度函数(pdf)?