从 keras.preprocessing.sequence 在 TimeseriesGenerator 上添加目标延迟的方法

数据挖掘 深度学习 时间序列 lstm rnn
2022-02-17 12:47:07

从深度学习用python书,它为数据生成器创建了函数。

我想我可以使用 keras 包中的 TimeseiresGenerator 来做同样的事情,但我无法添加目标延迟。有什么办法吗?

编辑:我找到了一种在目标数据上使用 np.roll 的方法。但是如果有更好的方法请告诉我。

2个回答

您可以使用

熊猫班

默认情况下,TimeseriesGenerator 执行 1 个时间步的滞后。然后,一个解决方法是创建一个熊猫系列,并使用移位功能。让 train 成为您的序列,并让 predict 成为代表您的滞后“大小”的 int。

例如:

label_train = pd.Series(train)    
train_generator = TimeseriesGenerator(train, label_train.shift(-forecast+1).values)

Obs:在执行延迟后小心填充您的序列。

敲响我自己的两分钱;

一个人也可以很容易地通过几次观察将他/她的目标列向上移动,以产生与延迟相同的效果;假设您想预测一些时间序列,但您想从您输入时间序列的最后一次观察中预测“未来 3 个时间步长”的值。您可以简单地在数据框中创建一列:

FUTURE_PERIOD_PREDICT = 3
df['future'] = df['current'].shift(-FUTURE_PERIOD_PREDICT)

当然,这种方法会nan在数据集的末尾生成 3 ,必须以某种方式处理。我认为 tf.keras API 中的延迟参数会比这种“解决方法”更优雅