Python 中的 Tensorflow Predict() 时间序列对齐

问题描述 投票:0回答:1

假设我在 Tensorflow 中创建一个顺序输入 LSTM,如下所示:

def Sequential_Input_LSTM(df, input_sequence):
    df_np = df.to_numpy()
    X = []
    y = []
    
    for i in range(len(df_np) - input_sequence):
        row = [a for a in df_np[i:i + input_sequence]]
        X.append(row)
        label = df_np[i + input_sequence]
        y.append(label)
        
    return np.array(X), np.array(y)

X, y = Sequential_Input_LSTM(df_data , 10) # pandas DataFrame df_data contains our data

在此示例中,我将数据切片为

X
(输入向量)和
y
(标签),例如前 10 个值(序列长度)用作 X,第 11 个值是第一个 y。然后,包含 10 个值的窗口向右移动一步(进一步移动一个时间步),我们再次为
X
取 10 个值,并将第二行之后的值作为下一个
y
,依此类推。

然后假设我将

X
的一部分作为我的
X_test
,并使用 LSTM
model
进行时间序列预测,如
predictions = model.predict(X_test)

当我实际尝试此操作并绘制

predict(X_test)
的结果时,它看起来像
y
数组,并且预测结果是同步的,无需进一步调整。我预计在将预测数组与标签一起绘制时,我必须手动将预测数组向右移动 10 个时间步长,因为我无法解释预测的前 10 个时间戳来自哪里。

鉴于模型尚未收到 10 个输入序列值,

X_test
的前 10 个时间步长的预测来自哪里? Tensorflow 是否使用
X_test
中的最后时间步来创建前 10 个值的预测,或者开始时的预测只是纯粹的猜测?

python tensorflow machine-learning keras predict
1个回答
0
投票

如果我猜对了,问题是

X_test
的前 10 个时间步使用
X
(或更精确地说,
X_train
)的最后 10 个时间步进行预测。如果
X_test
足够大,这并没有太大区别,但理论上是从训练集到测试集的数据泄漏。

我用一个小例子来演示(如果我错了请纠正我):

df_data = [0, 1, 2, .., 15]  # len 16
window_size = 3
X = [[0,1,2], [1,2,3], [2,3,4], ..., [12,13,14]]  # len 13
y = [3, 4, 5, .., 15]  # len 13
# split the data 10-3 for train-test
X_train = [[0,1,2], [1,2,3], [2,3,4], ..., [9,10,11]]
y_train = [3, 4, 5, .., 12]
X_test = [[10,11,12], [11,12,13], [12,13,14]]
y_test = [13, 14, 15]

此示例中的问题是 10 和 11 都用于

X_train
X_test
的序列中。所以你必须首先将
df_data
分成训练/测试(不打乱),然后分别进行排序。这样,您将在训练和测试中丢失
y
的前 n 个值。

© www.soinside.com 2019 - 2024. All rights reserved.