基于注意力的多步超短期农业电力负荷预测分解策略和注意力长短期记忆网络预测研究(Python代码+数据)

本文介绍了如何利用注意力机制和长短期记忆网络对农业电力负荷进行预测,通过EEMD数据分解和DARNN模型,优化预测准确性和效率,以支持农业生产和电力供应。文中详细展示了模型的构建过程和训练结果的可视化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 需要的第三方库:

2.2 读取数据

2.3 可视化分析 

2.4 训练结果

2.5 代码展示

🎉3 参考文献

🌈4 Python代码+数据


💥1 概述

农业电力负荷预测对于农业生产和电力供应具有重要意义。为了提高预测准确性和效率,可以结合注意力机制和长短期记忆网络进行预测研究。

通过EEMD对原始目标序列进行分解,生成衍生的变量序列。然后将它们一起存储在 eemd.csv 中。这是 DARNN 预测模型的代码,该模型使用上述派生变量作为模型的输入来预测未来的农业电力负荷。

首先,可以采用注意力机制对农业电力负荷进行分解,将其分解为多个时间步长的子序列。这样可以更好地捕捉负荷的变化规律和周期性,提高预测的精度。同时,注意力机制可以帮助模型自动学习并关注对预测结果影响较大的时间段和特征,从而提高模型的泛化能力和鲁棒性。

其次,可以采用注意力长短期记忆网络(Attention-based LSTM)进行农业电力负荷预测。这种网络结合了长短期记忆网络(LSTM)和注意力机制,能够更好地捕捉序列数据中的长期依赖关系和重要特征。通过引入注意力机制,模型可以自适应地学习不同时间步长的重要信息,提高了预测的准确性和鲁棒性。

综合上述两种方法,可以构建一个基于注意力的多步超短期农业电力负荷预测分解策略和注意力长短期记忆网络的预测模型。该模型可以充分利用注意力机制和LSTM网络的优势,提高农业电力负荷预测的准确性和效率,为农业生产和电力供应提供更可靠的支持。

📚2 运行结果

2.1 需要的第三方库:

import torch
import argparse
import numpy as np
import pandas as pd
from torch import nn
from torch import optim
import torch.nn.functional as F
import matplotlib.pyplot as plt
from matplotlib import rcParams
from torch.autograd import Variable


from utils import *
from model import *
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score, mean_absolute_percentage_error
import torch
import argparse
import numpy as np
import pandas as pd
from torch import nn
from torch import optim
import torch.nn.functional as F
import matplotlib.pyplot as plt
from matplotlib import rcParams
from torch.autograd import Variable


from utils import *
from model import *
from sklearn.metrics import mean_squared_error,mean_absolute_error,r2_score, mean_absolute_percentage_error

2.2 读取数据

 .....

2.3 可视化分析 

 

 

2.4 训练结果

 

2.5 代码展示

部分代码:

y_train_pred,train_attention_encoder,train_attention_decoder = model.train()

    y_test_pred,test_attention_encoder,test_attention_decoder = model.test()

#可视化
    fig1 = plt.figure()
    plt.semilogy(range(len(model.iter_losses)), model.iter_losses)
    plt.savefig("1.png")
    plt.show()
    #plt.close(fig1)

    fig2 = plt.figure()
    plt.rcParams['xtick.direction'] = 'in'
    plt.rcParams['ytick.direction'] = 'in'
    plt.semilogy(range(len(model.epoch_dev_losses)), model.epoch_dev_losses, label="Train", marker = 'o', ms = 3)
    plt.semilogy(range(len(model.epoch_train_losses)), model.epoch_train_losses, label="Valid", marker = 'o', ms = 3)
    plt.title(r'$\tau$ = 1', fontproperties = 'Times New Roman', size=18)
    plt.legend(loc='upper right')
    plt.xlabel('Epoch', fontproperties = 'Times New Roman', size=14)
    plt.ylabel("Loss", fontproperties = 'Times New Roman', size=14)
    plt.grid()
    plt.savefig("2.png")
    plt.show()
    #plt.close(fig2)

    y_test_true = model.y[model.train_timesteps + model.dev_timesteps:model.train_timesteps + model.dev_timesteps+model.test_timesteps]

    zy_test_pred = y_test_pred * model.std_test_y + model.mean_test_y
    zy_test_true = y_test_true * model.std_test_y + model.mean_test_y
    fig3 = plt.figure()
    plt.plot(zy_test_pred, label='Predicted_Test')
    plt.plot(zy_test_true, label="True_test")
    plt.legend(loc='upper left')
    plt.savefig("3.png")
    plt.show()
    #plt.close(fig3)

    pd.DataFrame(np.hstack((zy_test_true.reshape(-1,1), zy_test_pred.reshape(-1,1))), columns=['y_true', 'y_pred']).to_csv('DARNN_result.csv')

    print('------------------Test------------------')
    print('R2: %.3f' % r2_score(zy_test_true, zy_test_pred))
    print('MAE: %.3f' % mean_absolute_error(zy_test_true, zy_test_pred))
    print('RMSE: %.3f' % np.sqrt(mean_squared_error(zy_test_true, zy_test_pred)))
    print('MAPE: %.3f' % mean_absolute_percentage_error(zy_test_true, zy_test_pred))

    _,train_attention_encoder,train_attention_decoder = model.test('train')
    _,dev_attention_encoder,dev_attention_decoder = model.test('dev')

    print("训练集的encoder attention权重:  ")
    print(torch.mean(train_attention_encoder,dim=0))
    print("验证集的encoder attention权重:  ")
    print(torch.mean(dev_attention_encoder,dim=0))
    print("测试集的encoder attention权重:  ")
    print(torch.mean(test_attention_encoder,dim=0))

    print("训练集的decoder attention权重:  ")
    print(torch.mean(train_attention_decoder,dim=0))
    print("验证集的decoder attention权重:  ")
    print(torch.mean(dev_attention_decoder,dim=0))
    print("测试集的decoder attention权重:  ")
    print(torch.mean(test_attention_decoder,dim=0))

if __name__ == '__main__':
    main()

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1] Huang Y , Yang L , Liu S ,et al.Multi-Step Wind Speed Forecasting Based On Ensemble Empirical Mode Decomposition, Long Short Term Memory Network and Error Correction Strategy[J].Energies, 2019, 12(10):1822.DOI:10.3390/en12101822.

[2] Nguyen H P , Baraldi P , Zio E ,et al.Ensemble empirical mode decomposition and long short-term memory neural network for multi-step predictions of time series signals in nuclear power plants[J].  2021.

[3]王健,易姝慧,刘浩,等.基于注意力机制优化长短期记忆网络的短期电力负荷预测[J].中南民族大学学报:自然科学版, 2023, 42(1):73-81.

[4]魏骜,茅大钧,韩万里,等.基于EMD和长短期记忆网络的短期电力负荷预测研究[J].热能动力工程, 2020, 35(4):7.DOI:10.16146/j.cnki.rndlgc.2020.04.028.

🌈4 Python代码+数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值