首页 > 其他分享 >风速预测(三)EMD-LSTM-Attention模型

风速预测(三)EMD-LSTM-Attention模型

时间:2024-09-26 19:53:17浏览次数:11  
标签:EMD plt Attention batch import LSTM size

往期精彩内容:

时序预测:LSTM、ARIMA、Holt-Winters、SARIMA模型的分析与比较

全是干货 | 数据集、学习资料、建模资源分享!

拒绝信息泄露!VMD滚动分解 + Informer-BiLSTM并行预测模型-CSDN博客

风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客

风速预测(二)基于Pytorch的EMD-LSTM模型-CSDN博客

前言

本文基于前期介绍的风速数据(文末附数据集),先经过经验模态EMD分解,然后通过数据预处理,制作和加载数据集与标签,最后通过Pytorch实现EMD-LSTM-Attention模型对风速数据的预测。风速数据集的详细介绍可以参考下文:

风速预测(一)数据集介绍和预处理_风速数据在哪里下载-CSDN博客

1 风速数据EMD分解与可视化

1.1 导入数据


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')

# 读取已处理的 CSV 文件
df = pd.read_csv('wind_speed.csv' )
# 取风速数据
winddata = df['Wind Speed (km/h)'].tolist()
winddata = np.array(winddata) # 转换为numpy
# 可视化
plt.figure(figsize=(15,5), dpi=100)
plt.grid(True)
plt.plot(winddata, color='green')
plt.show()

1.2 EMD分解

from PyEMD import EMD

# 创建 EMD 对象
emd = EMD()
# 对信号进行经验模态分解
IMFs = emd(winddata)

# 可视化
plt.figure(figsize=(20,15))
plt.subplot(len(IMFs)+1, 1, 1)
plt.plot(winddata, 'r')
plt.title("原始信号")

for num, imf in enumerate(IMFs):
    plt.subplot(len(IMFs)+1, 1, num+2)
    plt.plot(imf)
    plt.title("IMF "+str(num+1), fontsize=10)
# 增加第一排图和第二排图之间的垂直间距
plt.subplots_adjust(hspace=0.8, wspace=0.2)
plt.show()

2 数据集制作与预处理

2.1 先划分数据集,按照8:2划分训练集和测试集

2.2 设置滑动窗口大小为7,制作数据集

3 基于Pytorch的EMD-LSTM-Attention预测模型

3.1 数据加载

# 加载数据
import torch
from joblib import dump, load
import torch.utils.data as Data
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
# 参数与配置
torch.manual_seed(100)  # 设置随机种子,以使实验结果具有可重复性
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

# 加载数据集
def dataloader(batch_size, workers=2):
    # 训练集
    train_set = load('train_set')
    train_label = load('train_label')
    # 测试集
    test_set = load('test_set')
    test_label = load('test_label')

    # 加载数据
    train_loader = Data.DataLoader(dataset=Data.TensorDataset(train_set, train_label),
                                   batch_size=batch_size, num_workers=workers, drop_last=True)
    test_loader = Data.DataLoader(dataset=Data.TensorDataset(test_set, test_label),
                                  batch_size=batch_size, num_workers=workers, drop_last=True)
    return train_loader, test_loader

batch_size = 64
# 加载数据
train_loader, test_loader = dataloader(batch_size)

3.2 定义EMD-LSTM-Attention预测模型

第一步,先定义自注意力层

第二步,定义预测模型

注意:输入风速数据形状为 [64, 10, 7], batch_size=64,  维度10维代表10个分量,7代表序列长度(滑动窗口取值)。

3.3 定义模型参数

# 定义模型参数
batch_size = 64
input_dim = 10   # 输入维度为10个分量
hidden_layer_sizes = [16, 32, 64, 128] # LSTM隐藏层
attention_dim = hidden_layer_sizes[-1]  # 注意力层维度 默认为 LSTM输出层维度
output_size = 1 # 单步输出

model = EMDLSTMAttention(batch_size, input_dim, hidden_layer_sizes, attention_dim)  

# 定义损失函数和优化函数 
model = model.to(device)
loss_function = nn.MSELoss()  # loss
learn_rate = 0.003
optimizer = torch.optim.Adam(model.parameters(), learn_rate)  # 优化器

3.4 模型训练

训练结果

采用两个评价指标:MSE 与 MAE 对模型训练进行评价,100个epoch,MSE 为0.009660,MAE  为 0.0004948,EMD-LSTM-Attention预测效果良好,适当调整模型参数,还可以进一步提高模型预测表现。只要模块加上去效果没有变得太差,调一调,就显得模型很立体了

注意调整参数:

  • 可以适当增加 LSTM层数和隐藏层的维度,微调学习率;

  • 调整注意力层维度,增加更多的 epoch (注意防止过拟合)

  • 可以改变滑动窗口长度(设置合适的窗口长度)

3.5 结果可视化

代码、数据整理如下:

图片

标签:EMD,plt,Attention,batch,import,LSTM,size
From: https://blog.csdn.net/2402_85668383/article/details/142568208

相关文章

  • Python轴承故障诊断 (四)基于EMD-CNN的故障分类
    往期精彩内容:Python-凯斯西储大学(CWRU)轴承数据解读与分类处理三十多个开源数据集|故障诊断再也不用担心数据集了!Python轴承故障诊断(一)短时傅里叶变换STFT-CSDN博客Python轴承故障诊断(二)连续小波变换CWT-CSDN博客Python轴承故障诊断(三)经验模态分解EMD-CSDN博客......
  • systemd socket 实现按需启动
    当使用systemd按需启动某套接字进程后,其图示大致如下:当需要访问该服务时候,systemd会接收请求流量,而后启动后端真实的服务,最后转发该流量,并且关闭原始套接字,图示如下:实现一个socket步骤所谓的按需启动,其实是systemd下的socket配置单元,其命名规则以.socket为后缀,主要服务于套......
  • Ubuntu 通过Supervisor 或者 systemd 管理 .Net应用
    在Ubuntu上安装.NET8.0,通过supervisor或systemd管理.NET应用服务,确保应用能够自动启动、运行以及在崩溃时重启。1.安装.NET8.0最新的Ubuntu版本已经不需要注册Microsoft包存储库了,具体的可以参考微软官方文档安装,在Ubuntu上安装.NETSDK或.NET运行时2.使用Sup......
  • 套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)
    套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)目录套娃!双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Matlab)效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现双路+双向!TCN-Transformer+BiLSTM多变量时间序列预测(Mat......
  • 中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间
    中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测目录中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.中秋献礼!2024年......
  • 论文速递!Auto-CNN-LSTM!新的锂离子电池(LIB)剩余寿命预测方法
    论文标题:AData-DrivenAuto-CNN-LSTMPredictionModelforLithium-IonBatteryRemainingUsefulLife期刊信息:IEEETII(中科院1区,JCRQ1,IF=11.7)引用:RenL,DongJ,WangX,etal.Adata-drivenauto-CNN-LSTMpredictionmodelforlithium-ionbatteryremainingusef......
  • 核心直达!特征提取+优化组合!LightGBM+BO-Transformer-BiLSTM多变量回归交通流量预测(Ma
    核心直达!特征提取+优化组合!LightGBM+BO-Transformer-BiLSTM多变量回归交通流量预测(Matlab)目录核心直达!特征提取+优化组合!LightGBM+BO-Transformer-BiLSTM多变量回归交通流量预测(Matlab)效果一览基本介绍程序设计参考资料效果一览基本介绍1.Matlab实现LightGBM+BO-Transformer-......
  • 论文速递 | 基于MIC-ICEEMD-RIME-DHKELM的碳排放预测模型研究
    目录参考文献内容介绍作者擅长碳排放预测模型参考文献内容介绍本文提出了一种基于最大信息系数(MIC)特征提取、改进互补集合经验模态分解(ICEEMD)、雾凇优化算法(RIME)与深度混合核极限学习机(DHKELM)的建筑业碳排放量预测模型。首先,根据IPCC计算方法,从直接和间接两个方面测算1992-202......
  • 多维时序 | 融合模拟退火和自适应变异的混沌鲸鱼优化算法(AAMCWOA)优化LSTM长短期记忆网
    多维时序|融合模拟退火和自适应变异的混沌鲸鱼优化算法(AAMCWOA)优化LSTM长短期记忆网络结合AdaBoost时间序列预测(AAMCWOA-LSTM-AdaBoost时序预测)目录多维时序|融合模拟退火和自适应变异的混沌鲸鱼优化算法(AAMCWOA)优化LSTM长短期记忆网络结合AdaBoost时间序列预测(AAMCWOA-LSTM-A......
  • 2024年JCR一区极光优化算法+分解对比!VMD-PLO-Transformer-BiLSTM多变量时间序列光伏功
    中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测目录中秋献礼!2024年中科院一区极光优化算法+分解对比!VMD-PLO-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.中秋献礼!2024年......