将我的数据整形为 RNN 输入的建议方法

Advisable ways to shape my data as input for a RNN

我有一个数据框 X,其中每一行都是一个数据时间点,每一列都是一个特征。 label/target 变量 Y 是单变量的。 X的其中一列是Y的滞后值。

RNN 输入的形状为 (batch_size、n_timesteps、n_feature)。

根据我在该站点上阅读的内容,batch_size 应该尽可能大而不 运行 内存不足。我的主要疑问是 n_timesteps。和 n_features.

我认为 n_feature 是 X 数据框中的列数。

n_timesteps呢?

考虑以下具有温度、压力和湿度特征的dataframe

import pandas as pd
import numpy as np

X = pd.DataFrame(data={
    'temperature': np.random.random((1, 20)).ravel(),
    'pressure': np.random.random((1, 20)).ravel(),
    'humidity': np.random.random((1, 20)).ravel(),
})

print(X.to_markdown())
|    |   temperature |   pressure |   humidity |
|---:|--------------:|-----------:|-----------:|
|  0 |     0.205905  |  0.0824903 | 0.629692   |
|  1 |     0.280732  |  0.107473  | 0.588672   |
|  2 |     0.0113955 |  0.746447  | 0.156373   |
|  3 |     0.205553  |  0.957509  | 0.184099   |
|  4 |     0.741808  |  0.689842  | 0.0891679  |
|  5 |     0.408923  |  0.0685223 | 0.317061   |
|  6 |     0.678908  |  0.064342  | 0.219736   |
|  7 |     0.600087  |  0.369806  | 0.632653   |
|  8 |     0.944992  |  0.552085  | 0.31689    |
|  9 |     0.183584  |  0.102664  | 0.545828   |
| 10 |     0.391229  |  0.839631  | 0.00644447 |
| 11 |     0.317618  |  0.288042  | 0.796232   |
| 12 |     0.789993  |  0.938448  | 0.568106   |
| 13 |     0.0615843 |  0.704498  | 0.0554465  |
| 14 |     0.172264  |  0.615129  | 0.633329   |
| 15 |     0.162544  |  0.439882  | 0.0185174  |
| 16 |     0.48592   |  0.280436  | 0.550733   |
| 17 |     0.0370098 |  0.790943  | 0.592646   |
| 18 |     0.371475  |  0.976977  | 0.460522   |
| 19 |     0.493215  |  0.381539  | 0.995716   |

现在,如果您想使用这种数据通过 RNN 模型进行时间序列预测,您通常会将数据框中的一行视为一个时间步长。将 dataframe 转换为数组也可能有助于您了解时间步长:

print(np.expand_dims(X.to_numpy(), axis=1).shape)
# (20, 1, 3)

首先,我获得一个形状为(20, 3) 的数组,换句话说,20 个样本,每个样本具有三个特征。然后我明确地向数组添加一个时间维度,得到形状 (20, 1, 3),这意味着数据集由 20 个样本组成,每个样本有一个时间步长,每个时间步长有 3 个特征。现在,您可以直接使用此数据作为 RNN.

的输入