融合BiLSTM 和GCN 天气预测模型【matlab代码】

✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。


设计了一种基于图卷积网络(GCN)和双向长短期记忆网络(BiLSTM)的天气预测模型。通过引入多个气象因素(如湿度、日照、降水量等)和历史气象数据,构建了一个基于时间序列的多维度特征的天气预测模型。GCN用于提取空间特征,而BiLSTM用于处理时间序列数据。

1. 数据准备

在天气预测中,多个气象特征(如湿度、温度、风速等)可以影响温度变化。因此,数据输入维度为多维时序数据。此外,通过滑动时间窗的方式扩展输入数据的时间维度。本文以江苏南京地区为例,考虑周边区域的气象数据对南京地区气温的影响。

2. GCN-BiLSTM模型概述
  • **GCN(图卷积网络)**用于提取空间特征。GCN可以利用邻域气象站的空间信息,通过图结构捕捉不同气象站之间的关联性。
  • **BiLSTM(双向长短期记忆网络)**用于处理时间序列特征。BiLSTM能够有效捕捉序列的双向依赖关系,对气象时间序列的历史信息进行有效建模。
  • 结合模型:GCN用于提取各个气象站的空间关系,BiLSTM用于处理时间序列特征,结合二者构建一个时空相关的天气预测模型。
3. Matlab代码实现

以下是基于GCN-BiLSTM的天气预测模型的Matlab实现,包括数据准备、GCN层构建、BiLSTM层构建以及模型训练和测试。

data = load('weather_data.mat');  % 假设数据存储在.mat文件中
features = data.features;  % 多维气象特征
target = data.temperature;  % 温度作为预测目标

% GCN的邻接矩阵,表示各站点之间的空间关系
adjMatrix = load('adjacency_matrix.mat');  % 站点之间的邻接矩阵

% 数据预处理:滑动窗口
windowSize = 14;  % 使用14天的数据预测未来温度
[X, Y] = createSlidingWindow(features, target, windowSize);

% 划分训练集和测试集
trainSize = floor(0.8 * size(X, 1));  % 80%为训练数据
XTrain = X(1:trainSize, :, :);
YTrain = Y(1:trainSize, :);
XTest = X(trainSize+1:end, :, :);
YTest = Y(trainSize+1:end, :);

% GCN层构建
function gcnOut = applyGCN(inputData, adjMatrix, weights)
    % inputData: 输入数据 [时间步, 特征, 站点]
    % adjMatrix: 邻接矩阵 [站点数, 站点数]
    % weights: GCN权重矩阵 [特征数, 输出特征数]
    
    % 图卷积计算:GCN层操作
    gcnOut = adjMatrix * inputData * weights;
end

% 初始化GCN权重矩阵
numFeatures = size(features, 2);  % 特征数
numStations = size(features, 3);  % 站点数
gcnWeights = rand(numFeatures, numFeatures);  % 随机初始化GCN权重

% 应用GCN层
gcnOutTrain = zeros(size(XTrain));
gcnOutTest = zeros(size(XTest));
for t = 1:size(XTrain, 1)
    gcnOutTrain(t, :, :) = applyGCN(XTrain(t, :, :), adjMatrix, gcnWeights);
end
for t = 1:size(XTest, 1)
    gcnOutTest(t, :, :) = applyGCN(XTest(t, :, :), adjMatrix, gcnWeights);
end

% BiLSTM模型构建
layers = [ ...
    sequenceInputLayer(numFeatures*numStations)
    bilstmLayer(100, 'OutputMode', 'sequence')
    fullyConnectedLayer(1)
    regressionLayer];

% 训练选项
options = trainingOptions('adam', ...
    'MaxEpochs', 200, ...
    'InitialLearnRate', 1e-3, ...
    'MiniBatchSize', 64, ...
    'Plots', 'training-progress', ...
    'Verbose', false);

% 数据格式调整为 LSTM 输入格式
gcnOutTrainReshaped = reshape(gcnOutTrain, size(gcnOutTrain, 1), []);
gcnOutTestReshaped = reshape(gcnOutTest, size(gcnOutTest, 1), []);

% 训练BiLSTM模型
net = trainNetwork(gcnOutTrainReshaped, YTrain, layers, options);

% 测试集预测
YPred = predict(net, gcnOutTestReshaped);

% 评估模型性能
rmse = sqrt(mean((YPred - YTest).^2));
mae = mean(abs(YPred - YTest));
fprintf('RMSE: %.4f\n', rmse);
fprintf('MAE: %.4f\n', mae);

% 绘制预测结果
figure;
plot(1:length(YTest), YTest, 'b', 'DisplayName', '真实温度');
hold on;
plot(1:length(YPred), YPred, 'r--', 'DisplayName', '预测温度');
title('GCN-BiLSTM天气预测结果');
xlabel('时间步');
ylabel('温度');
legend;

天气温度序列

预测结果:

4. 模型分析

通过上述代码,我们实现了GCN-BiLSTM天气预测模型,以下为该模型的各个部分的说明:

  1. GCN层:利用气象站的空间邻接矩阵,对各站点的多维气象数据进行图卷积操作,提取空间特征。
  2. BiLSTM层:将GCN提取的空间特征输入到BiLSTM网络中,处理时间维度上的依赖关系,预测未来的温度。
  3. 滑动窗口:使用滑动窗口将历史时间序列扩展到多维度,以便BiLSTM处理。
  4. 模型评估:通过RMSE(均方根误差)和MAE(平均绝对误差)评估模型的预测性能,实验结果显示GCN-BiLSTM模型在预测气温时具有较高的精度。
5. 实验与结果分析
  • 在对比不同模型(如DFN、LSTM、ARIMA)时,GCN-BiLSTM模型表现出较高的预测精度,尤其在处理气温波动稳定、温差较小的地区具有更好的准确性。
  • 通过RMSE和MAE指标的对比,GCN-BiLSTM模型的误差明显低于其他模型。
  • 该模型还能较好地捕捉邻近站点之间的空间相关性,提升了整体预测性能。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坷拉博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值