如何用TimeseriesGenerator生成适配model.predict的预测数据?
时序预测中适配model.predict的输入数据生成方法
问题背景
你用TimeseriesGenerator生成训练数据没问题,但用全量数据预测时,因为该API强制要求传入y参数,且容易出现输入形状不匹配的问题,下面是几种直接有效的解决方法:
方法1:手动构造符合模型输入的数组(最直接)
TimeseriesGenerator本质就是帮你生成**[样本数, 时间步长(n_input), 特征数(n_features)]**形状的输入序列,完全可以手动构造,不用依赖它:
import numpy as np # 提取输入特征,形状为(总样本数, 特征数) x_raw = data[data_columns].to_numpy() # 滑动窗口生成输入序列:每个样本是连续n_input个时间步的特征 x_predict = np.array([x_raw[i:i+n_input] for i in range(len(x_raw) - n_input + 1)]) # 直接喂给模型预测 p = model.predict(x_predict, batch_size=1)
这种方法完全避开了TimeseriesGenerator的y参数限制,而且能清晰控制输入形状,避免形状不匹配问题。
方法2:给TimeseriesGenerator传占位y(凑数即可)
如果非要用TimeseriesGenerator,只需要传一个和x长度匹配的占位y就行,预测时模型不会用到这个y:
x_raw = data[data_columns].to_numpy() # 生成和x长度一致的占位y(全0、全1随便填) y_dummy = np.zeros(len(x_raw)) # 生成器照常初始化,y用占位值 generator = TimeseriesGenerator(x_raw, y_dummy, length=n_input, batch_size=1) # 直接调用predict,模型会自动取生成器输出的x作为输入 p = model.predict(generator)
方法3:用tf.data.Dataset构建输入管道(TensorFlow生态更灵活)
如果你的模型是基于TensorFlow的,用tf.data.Dataset构建滑动窗口输入会更灵活,也不需要处理y参数:
import tensorflow as tf x_raw = data[data_columns].to_numpy() # 转换为TensorFlow数据集 dataset = tf.data.Dataset.from_tensor_slices(x_raw) # 滑动窗口:每个窗口包含n_input个时间步,步长为1,丢弃长度不足的窗口 dataset = dataset.window(n_input, shift=1, drop_remainder=True) # 将窗口转换为连续张量 dataset = dataset.flat_map(lambda window: window.batch(n_input)) # 设置批量大小 dataset = dataset.batch(1) # 预测 p = model.predict(dataset)
内容的提问来源于stack exchange,提问作者Arsen Zahray
相关产品推荐
相关产品推荐

