为具有条件的 LSTM 层准备输入数据

Preparing input data for LSTM layer with conditions

我有一个如下所示的数据框:

DF.head(20):
time        var1       var2       prob     
12:30       10          12         85
12:31       15          45         85
12:32       18          12         85
12:33       17          26         85
12:34       11          14         85
12:35       14          65         85
12:36       19          29         92
12:37       15          32         92
12:38       13          44         92
12:39       15          33         92
12:40       11          15         92
12:41       15          45         92
12:42       13          44         94
12:43       15          33         94
12:44       11          15         94
12:45       15          45         94
12:46       13          44         92
12:47       15          33         92
12:48       11          15         92
12:49       15          45         92

我想预测 6 个先前值序列的 prob 值。因此,对于给定的示例,我将使用从时间 12:30 到 12:35 的两个时间序列 -> var1 和 var2 来预测 12:35 的概率。据我所知,将进入 LSTM 的输入形状将是 (df.shape[0],6,1)。但我不知道如何将我的输入从 2 维转换为 3 维。我也有一个条件,只有当它们都在相同的概率值下时,我才需要查看前 6 次。所以在给定的示例中,我将无法获取 prob = 94 的前 6 个值,因为 94 只出现了 4 次,我无法从中进行 6 个时间步长。

我的伪代码如下所示:

for i in range(df.shape[0]):        #loop across all rows
  if final_df[i,'prob'] == final_df[i+1,'prob']:     #go until the value of prob change
      make multiple non overlaping dataframes of shape (6,2)
  else:
      continue

我需要帮助构建逻辑并为我的 LSTM 准备输入数据。

你的问题不是很清楚,但是 LSTM 的输入应该是这样的:

[samples, timesteps, features]

例如:

inputs = tf.random.normal([32, 10, 8])

所以在你的例子中,每个样本的形状都是 (6,2)。您可以使用 rolling 或 simple for 来制作数据。示例:

df = pd.DataFrame({'var1': np.arange(10), 'var2': np.arange(10), 'prob': np.random.randint(0,10,10)})
xs = []
ys = []
for i in range(6,10):
    xs.append(df[i-6:i][['var1', 'var2']].values)
    ys.append(df.iloc[i]['prob'])
    
data = np.array(xs).reshape(-1,6,2)

data.shape

输出:

(4, 6, 2)

基于评论:

for i in range(6,20,6):
...