首页 > 解决方案 > 重塑 2D 数据帧以包含以前的数据点(用于 Keras 中的 LSTM)

问题描述

我有一个包含 100000 个样本和 10 个特征的数据框。我想将其转换为 3D 数组,其中 [X][0] 是当前数据点,[X][1] 是前一个数据点 (X-1) 等。所以如果我想要一个“回溯”五个单位,数据的形状看起来像 (100000, 5, 10)。原因是我希望我的 LSTM 在训练模型时考虑以前的数据点。

是否有捷径可寻?

标签: pythonpandasnumpykeras

解决方案


如果您的数据框的形状为 (100000, 10),则无法将其重塑为 (100000, 5, 10),这仅仅是因为其中没有 100000x5x10 值。因此,第一步是创建滞后特征:

> df = pd.DataFrame({'a':[i for i in range(5)], 'b':[i for i in range(5, 10)]})
> df
>       a   b
    0   0   5
    1   1   6
    2   2   7
    3   3   8
    4   4   9
> columns = [df.shift(i) for i in range()]
> df = pd.concat(columns, axis=1)
> df
>       a   b   a   b   a   b
    0   0   5   NaN NaN NaN NaN
    1   1   6   0.0 5.0 NaN NaN
    2   2   7   1.0 6.0 0.0 5.0
    3   3   8   2.0 7.0 1.0 6.0
    4   4   9   3.0 8.0 2.0 7.0

在此之后,您可以重塑数据框以满足您的需求:

> # 5 samples, 3 timesteps, 2 features
> df.values.reshape(5,3,2)
> array([[[ 0.,  5.],
    [nan, nan],
    [nan, nan]],

   [[ 1.,  6.],
    [ 0.,  5.],
    [nan, nan]],
  ...

推荐阅读