为 LSTM 的 keras 时间序列生成器添加功能
Posted
技术标签:
【中文标题】为 LSTM 的 keras 时间序列生成器添加功能【英文标题】:Add features to keras time series generator for LSTM 【发布时间】:2020-05-13 04:32:02 【问题描述】:我正在 Keras 中处理时间序列(这是我人生中的第一次)。我找到了一个有用的 Keras 工具来处理时间序列,timeseriesgenerator。我正在尝试预测以单位和金钱(2 个输出)销售的数量。我想添加一些其他功能。代码如下:
from numpy import array
from numpy import hstack
from keras.preprocessing.sequence import TimeseriesGenerator
# define dataset
in_seq1 = array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
in_seq2 = array([15, 25, 35, 45, 55, 65, 75, 85, 95, 105])
# reshape series
in_seq1 = in_seq1.reshape((len(in_seq1), 1))
in_seq2 = in_seq2.reshape((len(in_seq2), 1))
# horizontally stack columns
dataset = hstack((in_seq1, in_seq2))
print(dataset)
# define generator
n_input = 2
generator = TimeseriesGenerator(dataset, dataset, length=n_input, batch_size=1)
# number of samples
print('Samples: %d' % len(generator))
# print each sample
for i in range(len(generator)):
x, y = generator[i]
print('%s => %s' % (x, y))
2 inupt 数组以单位出售并以货币出售。我的数据集上还有其他必须使用的功能:is_promo,一个布尔变量,表示产品是否处于促销中。 我的想法是在我预测的那一天加入这个功能,看看添加或不推广产品之间的区别。 请帮忙,谢谢
【问题讨论】:
【参考方案1】:您需要添加另一个输入序列in_seq3
,用于定义促销活动是否有效。我只是将它编码为 0 和 1 的列表,其中 0 表示没有促销,1 表示有促销。所以只需添加:
in_seq3 = array([0,1,0,1,1,1,0,1,1,0]) #Example data
改为使用
dataset = hstack((in_seq1, in_seq2, in_seq3))
最后,使用
generator = TimeseriesGenerator(dataset, dataset[:, :2], length=n_input, batch_size=1)
([:, :2]
确保您的输出不会不必要地包含促销字段。)
既然您已经重塑了数据并为训练模型做好了准备,那么您需要实际训练一个模型。为此,网上有很多教程。祝你好运!
【讨论】:
以上是关于为 LSTM 的 keras 时间序列生成器添加功能的主要内容,如果未能解决你的问题,请参考以下文章