You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何直接用训练测试数据拟合LSTM模型比TimeseriesGenerator精度更高?

时间序列模型拟合精度差异的原因分析

我在构建时间序列预测模型时发现,直接使用x_train和y_train拟合模型的输出精度远高于使用TimeseriesGenerator生成的训练/测试生成器的方式。具体实验结果:

  • 直接拟合的RMSE:6.3454423
  • 生成器拟合的RMSE:13.4363478

相关代码

数据拆分代码

x_train, x_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=123, shuffle=False)

生成器创建代码

train_generator = TimeseriesGenerator(x_train, y_train, length= win_length, sampling_rate=1, batch_size=batch_size)
test_generator = TimeseriesGenerator(x_test, y_test, length= win_length, sampling_rate=1, batch_size=batch_size)

直接拟合模型代码

# Fitting the model
model.fit(x_train, y_train, batch_size= 16, epochs = 34, shuffle = False)

生成器拟合模型代码

model.fit_generator(train_generator, epochs = 34,
        validation_data = test_generator,
        shuffle= False)

精度差异的核心原因

  • 输入维度与模型结构不匹配
    直接拟合时,模型接收的是原始特征维度的数据(比如形状(num_samples, n_features));而TimeseriesGenerator会将输入转换为滑动窗口格式,输出的每个batch形状为(batch_size, win_length, n_features)。如果你的模型输入层是针对原始特征设计的(比如没有处理时间步的Dense层),生成器的输入维度会完全不符合模型预期,导致模型无法正确学习特征模式,精度暴跌。

  • 训练样本量与分布的差异
    TimeseriesGenerator生成的有效训练样本数为len(x_train) - win_length,比直接拟合的全量样本少了win_length个。如果win_length数值较大,训练数据集规模会大幅缩减,模型学习的信息不足。此外,滑动窗口会让每个原始样本(除前win_length个)被包含在多个窗口中,样本分布和独立性发生变化,在shuffle=False的情况下,这种顺序性的重复采样可能让模型学习到错误的时间依赖关系。

  • 验证集的评估逻辑完全不同
    直接拟合后,你用x_test和y_test计算的是每个测试样本对应标签的预测误差;而test_generator生成的验证样本,是基于x_test的滑动窗口,预测的是每个窗口之后的下一个y值。这两种RMSE的计算对象完全不一样——前者是单样本预测,后者是基于历史窗口的下一步预测,后者的任务难度本身更高,误差自然更大。

  • batch_size与训练过程的差异
    直接拟合用的batch_size=16,而生成器使用的batch_size变量如果和16不同,会影响权重更新的频率和稳定性。比如batch_size过大时,权重更新次数减少,学习效率降低;过小时,更新噪声大,模型收敛不稳定。另外,生成器的batch生成逻辑和直接输入的batch拆分逻辑不同,每个epoch内模型看到的样本顺序或重复次数有差异,也会影响最终收敛效果。

内容的提问来源于stack exchange,提问作者Krunal Jani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:35