为具有条件的 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):
...
我有一个如下所示的数据框:
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):
...