Python 预测的测试用例数少于LSTM中的实际测试数据

Python 预测的测试用例数少于LSTM中的实际测试数据,python,keras,time-series,lstm,Python,Keras,Time Series,Lstm,我一直在尝试使用LSTM Keras根据时间序列数据预测订单数量 我划分了样本数据,其中训练集包含282条记录,而测试集包含82条记录。我使用30的回望窗口来预测测试数据的预测 但由于某些原因,预测的数据集只包含40条记录,而测试数据中预期包含71条记录。背后的原因是什么?是导致问题的查找窗口吗?我觉得“回头看”窗口是问题的根源。但我怎样才能纠正它呢 保持如此高的后向窗口是很重要的 我正在使用以下函数为导致实际问题的LSTM创建数据。我怎样才能纠正它 def create_dataset(dat

我一直在尝试使用LSTM Keras根据时间序列数据预测订单数量

我划分了样本数据,其中训练集包含282条记录,而测试集包含82条记录。我使用30的回望窗口来预测测试数据的预测

但由于某些原因,预测的数据集只包含40条记录,而测试数据中预期包含71条记录。背后的原因是什么?是导致问题的查找窗口吗?我觉得“回头看”窗口是问题的根源。但我怎样才能纠正它呢

保持如此高的后向窗口是很重要的

我正在使用以下函数为导致实际问题的LSTM创建数据。我怎样才能纠正它

def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
    #for i in range(len(dataset)-look_back):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    return np.array(dataX), np.array(dataY)
create_数据集的问题 当您获得ndarray的一个元素时,您将失去与该元素关联的秩。发生这种情况的原因是,如果您对单个图元感兴趣,则不需要保留尺寸标注1:

x=np.random.randn4,4 printx,x.shape 阵列[[1.37938213,-0.10407424,-0.356567,-1.5032779], [-0.53166922, 0.98204605, -0.62052479, 0.99265612], [ 0.23046477, -0.17742399, 0.38283412, 0.24104468], [-0.78093724, 1.06833765, -1.22112772, -0.78429717]] 4, 4 printx[0:3,0],x[0:3,0]。形状 数组[1.37938213,-0.53166922,0.23046477] 3. 因此,当您编写一个=dataset[i:i+look_back,0]时,您将获取一个包含形状样本、特征的数据集,并获取一块形状look_back,。将所有a添加到dataX后,它将成为形状样本的数据阵列,look_back=lendataset-look_back-1,look_back。但是,LSTM需要形状样本look_back,features,在您的示例中是look_back,1

如果您将其更改为a=dataset[i:i+look_back],那么事情将开始工作。但是,更好的解决方案是使用TimeseriesGenerator:

从keras.preprocessing.sequence导入TimeseriesGenerator 批量大小=4 回头看=1 特征=1 d=np.random.randn364,特征 列车=时间经验发电机,d, 长度=向后看, 批次大小=批次大小, 结束索引=282 测试=时间经验生成器,d, 长度=向后看, 批次大小=批次大小, 起始索引=282 模型=顺序 model.addLSTM6,输入形状=[回顾,特征],激活='relu' model.addDense1 model.compileloss='mse',optimizer='rmsprop' model.fit_generatortrain,epochs=1,verbose=1 p_列车=模型预测发电机列车 p_测试=模型。预测_生成测试 对其他章节的进一步评论 model.addLSTM6,input_shape=1,look_back,activation='relu'-输入形状应符合长度、特征。在这种情况下,如果length==features,事情就会解决。如果您想要更大的向后看,您确实需要更新此代码以输入\u shape=look\u back,1

testpredict=np.arraytestpredict.reformelentestpredict,1-这是不必要的。如果只有一个输出,并且其形状已经是samples,output_units=lentestX,1,则Modelpredict已经输出了一个ndarray

当处理非常大的序列时,LSTMactivation='relu'通常会导致不稳定性。把它留在田里通常是个好主意


trainX和testX的形状是什么?乍一看,您的输入形状似乎是错误的。在您的例子中,第一个维度表示序列长度回望,下面的维度表示实际的数据形状。实际上,我用于为LSTM创建数据的函数实际上导致了一个问题
def create_dataset(dataset, look_back=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
    #for i in range(len(dataset)-look_back):
        a = dataset[i:(i+look_back), 0]
        dataX.append(a)
        dataY.append(dataset[i + look_back, 0])
    return np.array(dataX), np.array(dataY)