Python 为什么我的时间序列数据框会限制时间步数I';我想在我的LSTM中使用?
我需要帮助了解如何准确地允许我为我的LSTM重塑输入数据。首先,我的时间序列数据采用熊猫数据框的形式: 它的形状如下:Python 为什么我的时间序列数据框会限制时间步数I';我想在我的LSTM中使用?,python,pandas,keras,lstm,reshape,Python,Pandas,Keras,Lstm,Reshape,我需要帮助了解如何准确地允许我为我的LSTM重塑输入数据。首先,我的时间序列数据采用熊猫数据框的形式: 它的形状如下:(36356,9)。我将我的数据帧分割成如下列的训练集和测试集:X_train.shape=(29084,7),X_test.shape=(7272,7),y_train.shape=(29084,)和y_test.shape=(7272,) 问题1:我知道我必须按照(样本/行、时间步、特征)将2D X数据重新塑造为3D。但我是否也必须将y数据重塑为3D 问题2:对于X数据和y
(36356,9)
。我将我的数据帧分割成如下列的训练集和测试集:X_train.shape=(29084,7)
,X_test.shape=(7272,7)
,y_train.shape=(29084,)
和y_test.shape=(7272,)
问题1:我知道我必须按照(样本/行、时间步、特征)
将2D X数据重新塑造为3D。但我是否也必须将y数据重塑为3D
问题2:对于X数据和y数据,我知道其2D形状的数组值必须与其3D形状的数组值匹配。因此,假设我将我的X_序列数据重塑为(29084,1,7)
,将我的X_测试数据重塑为(7272,1,7)
。X\u-train.shape[0]
的系数为1、2、4、7271、14542和X\u-train.shape[0]
。X_检验形状[0]
的因子为1、2、4、6、8、12、18、24、…、3636和X_检验形状[0]
。共同因素是1、2和4
。所以我的数据集只允许我有可能的时间步长1、2和4,对吗?也就是说,我必须将我的X_train.shape[0]和X_test.shape[0]重新调整为除以相同的时间步数,对吗。对于y_train.shape[0]和y_test.shape[0]也是如此
问题3:如果我可以有更大的时间步长,那么如何允许我重塑X数据和y数据
如果有帮助,我的LSTM构造如下:
batch_size = X_train.shape[0]
model = Sequential()
model.add(Bidirectional(LSTM(32, return_sequences = True, stateful = False),
input_shape = (X_train.shape[1], X_train.shape[2])))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(16, return_sequences = True)))
model.add(Dropout(0.2))
model.add(Dense(1, activation = 'sigmoid'))
es = EarlyStopping(monitor = 'val_loss', patience = 3)
model.compile(loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['Recall'])
model.fit(X_train, y_train, batch_size = batch_size, epochs = 360, verbose = 0,
callbacks = [es], validation_data = (X_test, y_test), shuffle = True)
感谢您的帮助。Keras LSTM输入形状():
答案1:
不,您不必重塑y数据,因为它代表整个模型的输出形状,而不是LSTM层的输出。然而,y形数据的形状应该与模型最后一层的输出相对应,从您的代码中它已经这样做了。但是,如果将数据分成较小的批,y数据应该反映这一点
答案2:
似乎数据的第一个维度(即36356)是时间步长维度。这意味着您有1个输入timeseries数据,其中36356个timstep记录,每个记录有7个功能。因此,要输入RNN,您的形状应该是(136356,7)
此外,您可以将36356行拆分为更小的部分,这样您就可以增加批次号-例如,64批568行,即形状变为(64568,7)。但是,这也需要将y数据分成更小的批 答案3:
您可以将当前的二维数组包装到另一个数组中,使其成为三维数组,即(136356,7)。数据中的时间步长是多少?将x_列重塑为(批次,1,7)意味着时间步长=1,这对RNN没有用处。我建议查看数据并了解随时间变化的值是什么?我的时间序列数据是按分钟索引的,这意味着数据帧中的每一行都以分钟分隔。此外,这是一个二元分类问题,在这个问题中,我使用数据来预测设备每分钟是开着还是关着。我现在已经在上面添加了原始数据帧。它似乎是数据的第一个维度,即36356是您的时间步长维度。这意味着您有1个输入数据,其中36356个timstep记录,每个记录有7个特征。因此,要输入RNN,您的形状应该是(136356,7),此外,您可以将36356行分解为更小的部分,这样您可以增加批次号-例如,64批568行,即形状变成(64568,7)。谢谢!你帮了大忙。为了澄清我在最后一刻提出的一些问题:我的X_火车最初的形状是(29084,7);因此,我应该将其重塑为(129084,7);我的X_测试最初的形状是(7272,7);所以我应该改成(17272,7),对吗?同样,我的y_列应该保持其原始形状(29084,1),我的y_测试应该保持其原始形状(7272,1),因为我的输出层是稠密的(1),对吗?当然,如果我要包括批次,我必须相应地更改。是的,你所有的问题都是正确的。您可以使用
np.expand_dims()
method.Darn重塑数组的形状。我得到了以下错误:-------------------------------------------------------------ValueError Traceback(最近一次调用last)in 15#Fitting the model 16 history=model.fit(X_train,y_train,epochs=360,verbose=2,-->17次回调=[es],validation_data=(X_test,y_test),shuffle=True)ValueError:输入数组应具有与目标数组相同的样本数。找到1个输入样本和27932个目标样本。要跟进我之前对错误的评论,我的X_序列成形(127932,7),我的X_测试成形(16984,7),我的y_序列成形(27932,1),我的y_测试成形(6984,1)。但错误似乎指向了这样一个事实,即这些形状不正确。我的错。您还需要更改Y数据。对于模型,它得到1批数据作为输入,但对于输出,它认为它得到7272批数据。您还应该将Y数据包装到另一个数组中。对不起:(
inputs: A 3D tensor with shape [batch, timesteps, feature]