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



我有一个数据帧X,其中每行是一个数据时间点,每列是一个特性。标签/目标变量Y是单变量的。X的一列是Y的滞后值。

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

根据我在这个网站上读到的内容,batch_size应该尽可能大而不会耗尽内存。我的主要疑虑是n_timesteps。和n_features。

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

时间步长是多少?

考虑以下具有温度、压力和湿度特征的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的输入。

最新更新