多维时序:基于DNN深度神经网络的多变量时间序列预测探索
多维时序 | 基于DNN深度神经网络多变量时间序列预测(考虑历史特征的影响) 【关键词】MatlabDNN回归滑动窗口多变量历史特征 【实物】 1案例包括一个多输入单输出回归问题 2案例采用滑动窗口方式同时考虑多个历史特征对预测结果的影响 3具有清晰的编码框架注释清晰易上手直接替换Excel中的数据即可 4模型运算结果直接输出Excel包含R2、NSE、MARE、MAE等7类预测性能统计指标方便选取。 5输出预测值和真实值曲线图散点图两种类型的图片。在时间序列预测领域考虑历史特征影响的多变量预测一直是个有趣且实用的方向。今天咱们就来聊聊基于DNN深度神经网络实现多变量时间序列预测并且着重探讨如何利用滑动窗口考虑历史特征的影响。一、案例背景本次案例聚焦于一个多输入单输出的回归问题。比如说我们可能有多个相关的时间序列数据像气温、湿度、风速等我们希望通过这些变量以及它们的历史信息来预测未来某一时刻的降水量。这就是典型的多输入单输出回归问题。二、滑动窗口与历史特征滑动窗口是个非常巧妙的方法它能让我们在处理时间序列时同时考虑多个历史特征对预测结果的影响。想象一下窗口就像一个小盒子它在时间序列上滑动每次把窗口内的数据作为模型的输入。多维时序 | 基于DNN深度神经网络多变量时间序列预测(考虑历史特征的影响) 【关键词】MatlabDNN回归滑动窗口多变量历史特征 【实物】 1案例包括一个多输入单输出回归问题 2案例采用滑动窗口方式同时考虑多个历史特征对预测结果的影响 3具有清晰的编码框架注释清晰易上手直接替换Excel中的数据即可 4模型运算结果直接输出Excel包含R2、NSE、MARE、MAE等7类预测性能统计指标方便选取。 5输出预测值和真实值曲线图散点图两种类型的图片。以下是一段简单的Python代码假设使用numpy库来构建滑动窗口数据import numpy as np def create_sliding_window(data, window_size): num_samples len(data) new_data [] for i in range(num_samples - window_size 1): window data[i:i window_size] new_data.append(window) return np.array(new_data) # 示例数据 time_series np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) window_size 3 sliding_window_data create_sliding_window(time_series, window_size) print(sliding_window_data)在这段代码里createslidingwindow函数接受时间序列数据和窗口大小作为参数。通过循环每次从时间序列中截取固定大小的窗口数据并添加到新的数据列表中最后将其转换为numpy数组。这样我们就得到了包含历史特征信息的滑动窗口数据。对于多变量时间序列处理方式类似只不过每个窗口的数据维度会更高。三、DNN回归模型构建在Matlab中构建DNN回归模型非常方便。首先我们得准备好数据。假设已经按照滑动窗口的方式处理好了数据并存放在inputData输入数据和targetData目标数据中。% 创建一个简单的DNN回归模型 layers [ sequenceInputLayer(size(inputData, 2)) fullyConnectedLayer(10) reluLayer fullyConnectedLayer(1) regressionLayer]; options trainingOptions(adam,... MaxEpochs,100,... MiniBatchSize,32,... InitialLearnRate,0.001,... Plots,training-progress); net trainNetwork(inputData, targetData, layers, options);这里我们使用sequenceInputLayer作为序列输入层因为时间序列是按顺序的。接着添加全连接层fullyConnectedLayer来学习数据特征中间使用reluLayer作为激活函数增加模型的非线性。最后通过regressionLayer构建回归模型。trainingOptions设置了训练的一些参数比如使用adam优化器最大训练轮数为100小批量大小为32等。四、模型输出与性能评估模型训练好后我们需要输出预测结果并评估其性能。% 进行预测 predictions predict(net, inputData); % 计算性能指标 r2 corr2(predictions, targetData)^2; nse 1 - sum((targetData - predictions).^2) / sum((targetData - mean(targetData)).^2); mare mean(abs((targetData - predictions)./ targetData)) * 100; mae mean(abs(targetData - predictions)); % 输出到Excel xlswrite(results.xlsx, [r2; nse; mare; mae], 1, A1); % 绘制预测值和真实值曲线图 figure; plot(targetData, b, DisplayName, 真实值); hold on; plot(predictions, r--, DisplayName, 预测值); legend; xlabel(样本序号); ylabel(数值); title(预测值与真实值对比曲线); % 绘制散点图 figure; scatter(targetData, predictions); xlabel(真实值); ylabel(预测值); title(预测值与真实值散点图);这段代码首先使用训练好的模型net对输入数据进行预测。然后计算了R2、NSE、MARE、MAE等性能指标。通过xlswrite函数将这些指标输出到Excel文件中。最后分别绘制了预测值和真实值的曲线图与散点图方便直观地观察模型的预测效果。这样一个基于DNN深度神经网络的多变量时间序列预测框架就搭建好了。通过滑动窗口考虑历史特征不仅能让模型更好地捕捉时间序列中的规律还使得整个预测过程更加灵活和实用。无论是气象预测还是金融市场趋势分析这个框架都有着广阔的应用空间。感兴趣的小伙伴不妨动手试试替换自己的Excel数据看看能得到什么样有趣的结果。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2418752.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!