基于LSTM、BP神经网络实现电力系统负荷预测(Python代码实现)

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

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

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

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

目录

💥1 概述

📚2 运行结果

2.1 LSTM

2.2 BP 

🌈3 Python代码及数据

🎉4 参考文献


💥1 概述

前馈神经网络的输出只依赖当前输入,但是在文本、视频、语音等时序数据中,时序数据长度并不固定,前馈神经网络的输入输出维数不能任意更改,因此难以适应这类型时序数据的处理。短期电力负荷预测的输入与输出均为时间序列,其本质仍是基于先前元素的序列预测问题,为此需要采用与前馈神经网络不同的方法,进行短期电力负荷预测。
循环神经网络具有记忆功能,可提升网络性能。与前馈神经网络相比,循环神经网络具备可同时接受自身信息与其他神经元信息的神经元,更贴合生物神经网络结构,在文本等序列数据分析中有广泛应用。循环神经网络的参数学习随时间反向传播,错误信息前传递学习,建立长时间间隔的状态间依赖,支持序列数据的分析处理。但随着网络层数增多与时间加长,循环神经网络容易因梯度消失或爆炸问题,导致只能学习短距离依赖,无法解决长距离依赖问题。为了解决循环神经网络的长程依赖问题,在循环神经网络上添加门控机制,实现调度信息积累速度控制,这类方法被称之为基于门控的循环神经网络,例如LSTM长短期记忆网络。LSTM是一种基于RNN的改进模型,通过引入门和单元的概念,解决长距离依赖问题,具有比RNN更强的适应性。LSTM网络的单结构如图1所示。每个神经单元内部结构如图2所示。
每个LSTM神经单元都包含遗忘门、输入门和输出门三个门控结构,以控制数据有信息的换地。其中,遗忘门负责丢弃和保留上一个时刻的有效信息在C{C内,输入门将当前时刻有效信息存放在Ct内,输出门决定神经单元输出中C·的信息。
 

📚2 运行结果

2.1 LSTM

 

 

 

2.2 BP 

 

 

 部分代码:

draw.iloc[:,0].plot(figsize=(12,6))
draw.iloc[:,1].plot(figsize=(12,6))
plt.legend(('real', 'predict'),loc='upper right',fontsize='15')
plt.title("Test Data",fontsize='30') #添加标题
#展示在测试集上的表现 
draw=pd.concat([pd.DataFrame(y_test),pd.DataFrame(y_test_predict)],axis=1);
draw.iloc[200:300,0].plot(figsize=(12,6))
draw.iloc[200:300,1].plot(figsize=(12,6))
plt.legend(('real', 'predict'),loc='upper right',fontsize='15')
plt.title("Test Data",fontsize='30') #添加标题
#展示在测试集上的表现 
draw=pd.concat([pd.DataFrame(y_train),pd.DataFrame(y_train_predict)],axis=1)
draw.iloc[100:400,0].plot(figsize=(12,6))
draw.iloc[100:400,1].plot(figsize=(12,6))
plt.legend(('real', 'predict'),loc='upper right',fontsize='15')
plt.title("Train Data",fontsize='30') #添加标题
#展示在训练集上的表现 

🌈3 Python代码及数据

🎉4 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]刘海峰,王艳如.基于LSTM的短期电力负荷预测算法研究[J].现代信息科技,2021,5(23):40-42+47.DOI:10.19850/j.cnki.2096-4706.2021.23.011.

[2]陈振宇,杨斌,阮文俊,沈杰,吴丽莉.基于LSTM神经网络的短期电能负荷预测[J].电力大数据,2021,24(04):8-15.DOI:10.19317/j.cnki.1008-083x.2021.04.002.

[3]胡永迅,姜媛媛,夏玲.基于GA-BP的输电线路负荷预测研究[J].邵阳学院学报(自然科学版),2021,18(03):44-51.

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的Python代码实现BP神经网络时间序列预测多维数据输出: ```python import numpy as np import pandas as pd # 读取数据 data=pd.read_csv('./data.csv') data=data.values # 数据预处理 def preprocess(data): data=data.astype(float) max_data=np.max(data,axis=0) min_data=np.min(data,axis=0) data=(data-min_data)/(max_data-min_data) return data,max_data,min_data # 构造训练集和测试集 def create_dataset(dataset, look_back=1, look_forward=1): X, Y = [], [] for i in range(len(dataset)-look_back-look_forward+1): a = dataset[i:(i+look_back), :] X.append(a) Y.append(dataset[(i+look_back):(i+look_back+look_forward), :]) return np.array(X), np.array(Y) # 设置随机种子,确保每次训练结果一致 np.random.seed(7) # 数据预处理 data,max_data,min_data=preprocess(data) # 构造训练集和测试集 look_back = 3 look_forward = 2 train_size = int(len(data) * 0.67) test_size = len(data) - train_size train, test = data[0:train_size,:], data[train_size:len(data),:] trainX, trainY = create_dataset(train, look_back, look_forward) testX, testY = create_dataset(test, look_back, look_forward) # 创建BP神经网络模型 from keras.models import Sequential from keras.layers import Dense from keras.layers import Flatten from keras.layers import LSTM from keras.layers import TimeDistributed from keras.layers import Dropout model = Sequential() model.add(LSTM(64, input_shape=(look_back, trainX.shape[2]), return_sequences=True)) model.add(Dropout(0.2)) model.add(LSTM(32)) model.add(Dropout(0.2)) model.add(Dense(look_forward*trainY.shape[2])) # 模型编译 model.compile(loss='mean_squared_error', optimizer='adam') # 模型训练 model.fit(trainX, trainY.reshape(trainY.shape[0],look_forward*trainY.shape[2]), epochs=100, batch_size=16, verbose=2) # 模型预测 trainPredict = model.predict(trainX) testPredict = model.predict(testX) # 反归一化 trainPredict=trainPredict*(max_data-min_data)+min_data trainY=trainY*(max_data-min_data)+min_data testPredict=testPredict*(max_data-min_data)+min_data testY=testY*(max_data-min_data)+min_data # 输出结果 print('Train Mean Absolute Error:', np.mean(np.abs(trainPredict - trainY))) print('Train Root Mean Squared Error:',np.sqrt(np.mean(np.square(trainPredict - trainY)))) print('Test Mean Absolute Error:', np.mean(np.abs(testPredict - testY))) print('Test Root Mean Squared Error:',np.sqrt(np.mean(np.square(testPredict - testY)))) ``` 其中,`data.csv`为输入数据文件,`look_back`为历史时间步长,`look_forward`为预测时间步长。在代码中,我们使用LSTM神经网络模型进行时间序列预测,并使用均方误差作为损失函数进行模型训练。最后,我们输出模型的训练和测试结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值