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

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

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

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

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

 

Gakki   2017-04-02 11:18



   1个回答 
8

我们可以不用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})$.


高代兄   2017-04-03 12:11

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


  相关主题

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

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

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

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

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

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

求助,按照百度的方法从日期提取年龄出现错误了   1回答

SARIMAX是什么算法?   1回答

pandas把一列日期转换为星期   3回答

pandas中获取一列日期和今天相差的天数   2回答

python里有现成的卡尔曼滤波器的包吗?   2回答

python中有哪些关于隐马尔可夫模型(HMM)的package?   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!