LSTM 时间序列会产生偏移预测吗?

2023-12-04

我正在使用 LSTM NN 和 Keras 进行时间序列预测。作为输入特征,有两个变量(降水量和温度),要预测的一个目标是地下水位。

尽管实际数据和输出之间存在严重的偏移(见图),但它似乎工作得很好。

现在我读到这可能是网络无法正常工作的典型标志,因为它似乎在模仿输出并且

该模型实际上正在做的是,当预测值时 时间“t+1”,它只是使用时间“t”的值作为其预测https://towardsdatascience.com/how-not-to-use-machine-learning-for-time-series-forecasting-avoiding-the-pitfalls-19f9d7adf424

然而,在我的例子中这实际上是不可能的,因为目标值不用作输入变量。我正在使用具有两个特征的多元时间序列,与输出特征无关。 此外,预测值在未来 (t+1) 中不会偏移,而是似乎滞后于 (t-1)。

Does anyone know what could cause this problem? enter image description here

这是我的网络的完整代码:

# Split in Input and Output Data 
x_1 = data[['MeanT']].values
x_2 = data[['Precip']].values
y = data[['Z_424A_6857']].values

# Scale Data
x = np.hstack([x_1, x_2])
scaler = MinMaxScaler(feature_range=(0, 1))
x = scaler.fit_transform(x)

scaler_out = MinMaxScaler(feature_range=(0, 1))
y = scaler_out.fit_transform(y)

# Reshape Data
x_1, x_2, y = H.create2feature_data(x_1, x_2, y, window)
train_size = int(len(x_1) * .8)
test_size = int(len(x_1)) #  * .5

x_1 = np.expand_dims(x_1, 2) # 3D tensor with shape (batch_size, timesteps, input_dim) // (nr. of samples, nr. of timesteps, nr. of features)
x_2 = np.expand_dims(x_2, 2)
y = np.expand_dims(y, 1)

# Split Training Data
x_1_train = x_1[:train_size]
x_2_train = x_2[:train_size]
y_train = y[:train_size]

# Split Test Data
x_1_test = x_1[train_size:test_size]
x_2_test = x_2[train_size:test_size]
y_test = y[train_size:test_size]

# Define Model Input Sets
inputA = Input(shape=(window, 1))
inputB = Input(shape=(window, 1))

# Build Model Branch 1
branch_1 = layers.GRU(16, activation=act, dropout=0, return_sequences=False, stateful=False, batch_input_shape=(batch, 30, 1))(inputA)
branch_1 = layers.Dense(8, activation=act)(branch_1)
#branch_1 = layers.Dropout(0.2)(branch_1)
branch_1 = Model(inputs=inputA, outputs=branch_1) 

# Build Model Branch 2
branch_2 = layers.GRU(16, activation=act, dropout=0, return_sequences=False, stateful=False, batch_input_shape=(batch, 30, 1))(inputB)
branch_2 = layers.Dense(8, activation=act)(branch_2)
#branch_2 = layers.Dropout(0.2)(branch_2)
branch_2 = Model(inputs=inputB, outputs=branch_2) 

# Combine Model Branches
combined = layers.concatenate([branch_1.output, branch_2.output])
  
# apply a FC layer and then a regression prediction on the combined outputs
comb = layers.Dense(6, activation=act)(combined)
comb = layers.Dense(1, activation="linear")(comb)
  
# Accept the inputs of the two branches and then output a single value
model = Model(inputs=[branch_1.input, branch_2.input], outputs=comb)
model.compile(loss='mse', optimizer='adam', metrics=['mse', H.r2_score])

model.summary()

# Training
model.fit([x_1_train, x_2_train], y_train, epochs=epoch, batch_size=batch, validation_split=0.2, callbacks=[tensorboard])
model.reset_states()

# Evaluation
print('Train evaluation')
print(model.evaluate([x_1_train, x_2_train], y_train))

print('Test evaluation')
print(model.evaluate([x_1_test, x_2_test], y_test))

# Predictions
predictions_train = model.predict([x_1_train, x_2_train])
predictions_test = model.predict([x_1_test, x_2_test])

predictions_train = np.reshape(predictions_train, (-1,1))
predictions_test = np.reshape(predictions_test, (-1,1))

# Reverse Scaling
predictions_train = scaler_out.inverse_transform(predictions_train)
predictions_test = scaler_out.inverse_transform(predictions_test)

# Plot results
plt.figure(figsize=(15, 6))
plt.plot(orig_data, color='blue', label='True GWL')  
plt.plot(range(train_size), predictions_train, color='red', label='Predicted GWL (Training)')
plt.plot(range(train_size, test_size), predictions_test, color='green', label='Predicted GWL (Test)')
plt.title('GWL Prediction')  
plt.xlabel('Day')  
plt.ylabel('GWL')  
plt.legend()  
plt.show()   

我使用的批量大小为 30 个时间步长,回溯为 90 个时间步长,总数据大小约为 7500 个时间步长。

任何帮助将不胜感激:-) 谢谢!


也许我的答案在两年后不再相关,但我在试验 LSTM 编码器-解码器模型时遇到了类似的问题。我通过缩放范围内的输入数据解决了我的问题-1 .. 1代替0 .. 1就像你的例子一样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LSTM 时间序列会产生偏移预测吗? 的相关文章

  • 如何检查安装了哪个版本的 Keras?

    问题与标题相同 我不想打开 Python 而是使用 MacOS 或 Ubuntu Python 库作者将版本号放入
  • Caffe 多输入图像

    我正在考虑实现一个 Caffe CNN 它接受两个输入图像和一个标签 后来可能是其他数据 并且想知道是否有人知道 prototxt 文件中执行此操作的正确语法 它只是一个带有额外顶部的 IMAGE DATA 层吗 或者我应该为每个层使用单独
  • 如何使用 Encog 标准化 CSV 文件?

    我需要规范化 CSV 文件 我关注了 Jeff Heaton 写的这篇文章 http www heatonresearch com content how does encog 30 normalize 这是我的 一些 代码 File so
  • Keras如何在Relu激活函数中使用max_value

    keras activation py 中定义的 Relu 函数为 def relu x alpha 0 max value None return K relu x alpha alpha max value max value 它有一个
  • sigmoid激活函数可以用来解决Keras中的回归问题吗?

    我已经用 R 实现了简单的神经网络 但这是我第一次用 Keras 实现 所以希望得到一些建议 我在 Keras 中开发了一个神经网络函数来预测汽车销量 数据集可用here https github com allmydatasets dat
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • JFreeChart - 创建移动图表时出现问题

    我在我的 java 应用程序中使用 JFreeChart Problem 我想绘制一个XY面积图 whose 域轴 x 轴 当我们开始绘制数据时应该自动水平滚动 我在中看到了同样的事情时间序列图表但我不想要任何时间系列图表 我只想要滚动的
  • pandas-更改重采样时间序列的开始和结束日期

    我有一个时间序列 我将其重新采样到这个数据框中df 我的数据是从6月6日到6月28日 它希望将数据从6月1日延长到6月30日 计数列仅在较长时间内具有 0 值 而我的实际值是从 6 日到 28 日 Out 123 count Timesta
  • UnimplementedError:图形执行错误:在张量流上运行 nn

    我一直遇到这个错误 我不知道为什么 特别是因为我完全遵循某人的代码并且该人在运行此错误时没有错误 img shape 128 128 3 load pretrained model base model tf keras applicati
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • Keras conv1d 层参数:过滤器和 kernel_size

    我对 keras 的 conv1d 层中的这两个参数感到非常困惑 https keras io layers convolutional conv1d https keras io layers convolutional conv1d 文
  • Keras 错误:预计会看到 1 个数组

    当我尝试在 keras 中训练 MLP 模型时出现以下错误 我使用的是 keras 版本1 2 2 检查模型输入时出错 您输入的 Numpy 数组列表 传递给您的模型的尺寸不是模型预期的尺寸 预期的 查看 1 个数组 但得到以下 12859
  • 从时间序列生成日期特征

    我有一个数据框 其中包含如下列 Date temp data holiday day 01 01 2000 10000 0 1 02 01 2000 0 1 2 03 01 2000 2000 0 3 30 01 2000 200 0 30
  • 为什么各个树的 xgboost 回归预测存在差异?

    首先 我运行一个非常简单的 xgb 回归模型 其中仅包含 2 棵树 每棵树有 1 个叶子 可用数据here https raw githubusercontent com jbrownlee Datasets master pima ind
  • ValueError:在 R 中使用 keras 模型时在用户代码中

    我正在尝试使用 R 在 R 中运行一维 CNNkeras包裹 我正在使用以下代码 library MASS library keras Create some data data Boston data lt Boston create a
  • 如何检测时间序列中的趋势是增加还是减少?

    我有几周的销售数据 xs weeks 1 2 3 4 ys Units Sold 1043 6582 5452 7571 从给定的序列中 我们可以看到 虽然从xs 2 到xs 3 有所下降 但总体趋势是增加的 如何检测小时间序列数据集中的趋
  • 如何在 Tensorflow 对象检测 api 中评估预训练模型

    尝试使用最近发布的 Tensorflow 对象检测 API 并且想知道如何评估他们在模型动物园中提供的预训练模型之一 前任 如何获取该预训练模型的 mAP 值 自从script https github com tensorflow mod
  • 批量大小不适用于带有deploy.prototxt的caffe

    我正在努力让我的分类过程更快一些 我想增加我的deploy prototxt中的第一个input dim 但这似乎不起作用 甚至比对每张图像进行分类还要慢一点 部署 prototxt input data input dim 128 inp
  • 尝试校准keras模型

    我正在尝试通过 Sklearn 实现来校准我的 CNN 模型CalibratedClassifierCV 尝试将其包装为KerasClassifier并覆盖预测功能但没有成功 有人可以说我做错了什么吗 这是模型代码 def create m
  • 在自定义 keras 层的调用函数中传递附加参数

    我创建了一个自定义 keras 层 目的是在推理过程中手动更改前一层的激活 以下是基本层 它只是将激活值乘以一个数字 import numpy as np from keras import backend as K from keras

随机推荐

  • 如何同时从两个实时数据中获取价值

    https prnt sc 18ibfg6 这是我的第一个实时数据 它返回某个对象的数组列表 https prnt sc 18ibo0z 这是我的第二个实时数据 它返回某个对象的另一个数组列表 buyViewModel showPurcha
  • Elasticsearch 不区分大小写的 query_string 带通配符的查询

    在我的 ES 映射中 我有一个 uri 字段 当前设置为 not analysis 并且不允许更改映射 我想使用这样的 query string 查询来搜索 uri 部分 此 ES 查询是自动生成的 即为什么它有点复杂 但我们只关注 que
  • 如何在加载表单 Iframe 后运行 JS 代码并将自定义值放入输入中?

    http dev uniteconferencing com conference account sign free pcode 25u50PT我正在尝试从 url 获取 pcode 值并将其放入 IFRAME 表单中 我使用此代码获取值
  • 针对测试数据库集成测试 Web 服务

    我目前正在构建一个 net Web 应用程序 它使用 WCF Web 服务来允许 Flex 前端访问数据库 我正在 Web 服务上设置一些单元 集成样式测试 并试图找出允许测试访问和修改单独测试数据库中的数据的最佳方法 目前 我的单元测试项
  • Vb.Net - 动态更改文本框背景色的类

    我想知道如何创建一个类来更改表单内每个文本框的背景颜色 更具体 当文本框为空时 文本框背景颜色等于白色 当文本框获得焦点时 文本框的背景颜色发生变化 当文本框有任何文本时 文本框背景颜色会改变 当文本框失去焦点时 文本框的背景颜色会发生变化
  • 在构建我的 C# 项目时,出现“在未引用的程序集中定义”错误,如何解决?

    我已经引用了 System 和 System Data 1 类型 System ComponentModel IListSource 在未引用的程序集中定义 您必须添加对程序集的引用 系统 版本 2 0 0 0 文化 中性 PublicKe
  • 未使用准备好的语句存储数据

    我刚刚学习使用准备好的语句并卡在这里 用正常方法是没有问题的 没有显示任何错误 但数据未存储在数据库中 尽管它显示 已输入数据 db new mysqli localhost root learndb if db gt connect er
  • MySQL 查找每个邮政编码中最贵的

    我有一个名为 产品 的表 其架构 名称 城市 州 邮政编码价格 我想找到给定州的每个邮政编码的最昂贵产品的名称 I wrote SELECT zip code MAX price FROM products WHERE products s
  • 如果一个任务失败则继续执行ant脚本

    我有一个 Ant 脚本 它运行测试然后将我的应用程序部署到 QA 服务器 要部署应用程序 它首先调用sun appserv undeploy 由于各种原因 应用程序可能会也可能不会部署 如果应用程序未部署 则取消部署将失败并且整个脚本将停止
  • 是否可以在不使用临时文件的情况下在批处理文件中嵌入并执行 VBScript?

    人们长期以来一直在批处理文件中嵌入和执行 VBScript 但我见过的所有已发布的解决方案 最初提出这个问题时 涉及写入临时 VBS 文件 例如 在 Windows 批处理文件中嵌入 VBScript 是否可以在批处理中执行嵌入的 VBSc
  • 如何对列表中彼此在 n 以内的元素进行分组

    我有两个清单 list 1 list 2 1 0 3 0 3 15 1 03 6 0 7 0 我想对这个列表进行排序并合并其中的元素 在本例中 0 15彼此的 所以到这结束的时候 list 1其中包含以下值 1 0 1 03 3 0 3 1
  • 在 Rnw 中使用 ggvis 和 knit

    我想知道我是否可以在 Rnw 中使用 ggvis 和 knit 我尝试了以下代码RStudio Version 0 98 1091 但它不起作用 documentclass book usepackage T1 fontenc usepac
  • 具有自定义布局和自定义菜单项的 ActionBar

    我想通过 put 制作自定义操作栏ImageView在中间 并在操作栏的右侧有另一个带有一些信息的图标 如下所示 我已经可以在中间制作 imageview 但问题是 当我膨胀布局时onCreateOptionMenu 并设置showAsAc
  • 如何将事件处理程序委托转换为具有不同签名的事件处理程序委托

    我正在编写的代码实际上是一个 WPF 行为 用于从网格控件中获取所选项目 众所周知 SelectedItems 不是可绑定属性 我实际上使用的是 Telerik RadGridView 但我希望行为对于具有 SelectionChanged
  • Android - “无法加载 Foo:findLibrary 返回 null”

    我知道已经有关于堆栈溢出的错误的帖子 但是从我在 SO 和 Google 上找到的内容来看 与我的问题不符 我正在尝试运行我的应用程序 但是每当调用本机函数时我的程序就会崩溃 并且我得到以下信息LogCat 08 01 09 15 57 4
  • SQL Case Order 按特定顺序

    好吧 我以前问过类似的问题 但我研究过 但没有具体找到这个 我有一个表 需要按字段 OptionName NVarChar 和 IsActive BIT 进行排序 对于 DDL 我需要结果按以下顺序排列 Option A Option B
  • Excel VBA 中出现 Double 类型溢出错误

    我在 Excel VBA 中遇到了溢出错误 并且无法找到解决方法 虽然 Microsoft 的文档表明双精度数的范围应达到 1 8E308 但我收到了明显低于该阈值的数字的溢出错误 我的代码如下 Public Function Fixed
  • Xamarin.Forms v3 中的 MasterDetail + 从右到左

    我正在使用从右到左的新表单功能 除了 MasterDetail 汉堡菜单图标外 它运行良好 它保留在左侧 当本地化发生更改时 我需要将其移至右侧 有什么想法或者有人可以帮助我使用自定义渲染器吗 也不是不可能 但需要一些肮脏的编码 请在此处检
  • 如何旋转 pandas 图中的 x 轴刻度标签

    使用以下代码 import matplotlib matplotlib style use ggplot import matplotlib pyplot as plt import pandas as pd df pd DataFrame
  • LSTM 时间序列会产生偏移预测吗?

    我正在使用 LSTM NN 和 Keras 进行时间序列预测 作为输入特征 有两个变量 降水量和温度 要预测的一个目标是地下水位 尽管实际数据和输出之间存在严重的偏移 见图 但它似乎工作得很好 现在我读到这可能是网络无法正常工作的典型标志