如何为python的keras LSTM塑造大型DataFrame?

时间:2019-01-24 20:02:54

标签: python keras lstm reshape

我几乎在accepted answer here中找到了我需要的东西。但是存在内存问题,因为提供的测试df只有11行。

我要预测的是使用 LSTM预测回归模型中的时间序列数据提前10天(不是分类器!)。我的数据框 X大约有 1500行和2000个功能,属于shape (1500, 2000),而真值 {{1 }}只是1个功能的 1500行(可以y)。

由于LSTM需要3D 向量作为输入,所以我真的正在努力改变数据的形状

同样,按照第一段中的示例,在填充值时(尤其是在range any value between -1 and 1处,它因MemoryError而崩溃。

我的测试(阅读预测)是一个{strong> df.cumulative_input_vectors.tolist() 的数据框。

由于敏感数据,我实际上无法共享值/示例。我该如何帮助您?

因此,要使LSTM能够从1500行的shape (10, 2000) 中学习,如何我应该重塑我的y 1500行和2000个功能我应该如何重塑我的x的10行和2000个功能

由于我正在学习LSTM,所以他们将首先接受以下简单的LSTM模型:

forecast

我尝试过的方法,但是当预报错误时:

model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(train_X, train_y , epochs=50, batch_size=2, verbose=1)

1 个答案:

答案 0 :(得分:0)

一段时间后,我设法正确理解了尺寸。 Keras期望使用.shape (totalRows,序列,totalColumns)的3d数组。 sequences是我最困惑的地方。

那是因为在重塑df df.reshape(len(df), 1, len(df.columns))时意味着 keras 将学习1行矩阵,这给了我不好的结果,因为我不知道最好缩放数据对我来说 MinMaxScaler(-1,1) 效果最好,但可能是(0,1)

让我明白的是,这是首先使用多于1行(或几天,因为我的数据集是时间序列)的顺序。表示代替输入1行特征X会产生y的值我使用类似 5行特征X导致y的值1 < / strong>。如:

# after scaling the df, resulted in "scaled_dataset"
sequences = 5
result = []
# for loop will walk for each of the 1500 rows
for i in range(0,len(scaled_dataset)):
    # every group must have the same length, so if current loop position i + number 
    # of sequences is higher than df length, breaks
    if i+sequences <= len(scaled_dataset):
        # this will add into the list as [[R1a,R1b...R1t],[R2a,R2b...R2t],...[R5a,R5b...R5t]]
        result.append(scaled_dataset[i:i+sequences].values)
# Converting to array + keras takes float32 better than 64
train_x = np.array(result).astype('float32')
# making the y into same length as X
train_y = np.array(y.tail(train_x.shape[0]).values)

train_x.shape, train_y.shape
  

'>>>(1495,5,2400),(1495,)

用另一种方式写出我问题的喀拉斯形状的心态:

考虑到它是一个时间序列,上面的意思是5天(第0至4行)的数据得出第5行的y值。

然后,减去最后一天的第一天+第二天-仍然是5天-(第1至5行)数据,得出第6行的y值。

然后,减去最后一天之后的第二天+第二天-仍然是5天-(第2到6行)数据,得出第7行的y值。

对于keras / LSTM的初学者来说,这非常令人困惑,但是我希望我能为那些可能会来到这里的人详细介绍一下。