- A+
完成本教程后,您将知道:
-
如何编写一个函数来将时间序列数据集转换为监督学习数据集。
-
如何变换单变量时间序列数据进行机器学习。
-
如何变换多变量时间序列数据进行机器学习。
例如:
运行代码,可以看到和行索引一同打印出来的时间序列数据,每行对应着一个观测值。
运行代码,我们在原有数据集的基础上得到了两列数据,第一列为原始的观测值,第二列为下移后得到的新列。
可以看到,通过前移序列,我们得到了一个原始的监督学习问题( X和 y的左右顺序是反的)。忽略行标签,第一列的数据由于存在NaN值应当被丢弃。从第二行来看,输入数据0.0位于第二列( X),输出数据1位于第一列( y)。
series_to_supervised()函数
-
data:观测值序列,类型为列表或者二维的Numpy数组,必选参数。
-
n_in:作为输入的滞后观测值数量( X)。值介于1..len(data)之间,可选参数,默认为1。
-
n_out:作为输出的观测值数量( y)。值介于0..len(data)-1之间,可选参数,默认为1。
-
dropnan:是否删除具有NaN值的行,类型为布尔值。可选参数,默认为True。
该函数返回一个值:
如果你有更好的实现方法,欢迎在评论中分享。
现在我们完成了需要的函数,下面我们来探索如何使用它。
单步单变量预测
在时间序列预测中的标准做法是使用滞后的观测值(如t-1)作为输入变量来预测当前的时间的观测值(t)。
运行该示例将打印输出重建的时间序列
再次运行代码,可以从打印信息中看到重构后的序列,输入序列从左到有依次排列,最后一列为输出变量。
多步预测(序列预测)
另一种预测问题类型是使用过去的观测序列来预测未来的观测序列。
这就是多步预测或序列预测。
我们可以指定另一个参数来重构序列预测问题中的时间序列。举例来说,如果我们的预测问题需要用过去的两个观测值输入来预测两个未来的观测值,我们可以通过下面的调用形式来重构数据:
data = series_to_supervised(values, 2, 2)
完整的代码如下:
运行代码,我们可以看到设定不同的输入变量(t-n)和输出变量(t+n)情况下重构数据的区别。
运行代码,控制台将打印重构后的数据,包含两个变量的单步输入观测值和单步输出观测值。
同样,根据问题的实际情况可以将这些列任意拆分为 X和 Y部分,比方说 var1和 var2均为观测值但是只有 var2需要被预测。
可以看到,我们只需要指定输入输出序列的长度就可以轻松地在多变量时间序列上进行序列预测。
例如,下面是单步输入,两步输出的序列预测问题实例
那么你学会了吗?