将我的数据整形为 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
.
的输入
我有一个数据框 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
.