首页 > 编程语言 >Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据|附代码数据

Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据|附代码数据

时间:2024-04-24 20:44:59浏览次数:28  
标签:预测 Python 模型 神经网络 序列 LSTM 数据

原文链接:http://tecdat.cn/?p=6663

 

 

此示例中,神经网络用于使用2011年4月至2013年2月期间的数据预测公民办公室的电力消耗  点击文末“阅读原文”获取完整代码数据******** )。

每日数据是通过总计每天提供的15分钟间隔的消耗量来创建的。

LSTM简介

LSTM(或长短期记忆人工神经网络)允许分析具有长期依赖性的有序数据。当涉及到这项任务时,传统的神经网络体现出不足,在这方面,LSTM将用于预测这种情况下的电力消耗模式。

拓端数据部落

,赞9

与ARIMA等模型相比,LSTM的一个特殊优势是数据不一定需要是稳定的(常数均值,方差和自相关),以便LSTM对其进行分析。

自相关图,Dickey-Fuller测试和对数变换

为了确定我们的模型中是否存在平稳性:

  • 生成自相关和偏自相关图
  • 进行Dickey-Fuller测试
  • 对时间序列进行对数变换,并再次运行上述两个过程,以确定平稳性的变化(如果有的话)

首先,这是时间序列图:

据观察,波动性(或消费从一天到下一天的变化)非常高。在这方面,对数变换可以用于尝试稍微平滑该数据。在此之前,生成ACF和PACF图,并进行Dickey-Fuller测试。

自相关图


点击标题查阅往期内容

在Python中使用LSTM和PyTorch进行时间序列预测

uploading.4e448015.gif转存失败重新上传取消

左右滑动查看更多

uploading.4e448015.gif转存失败重新上传取消

01

02

03

04

偏自相关图

自相关和偏自相关图都表现出显着的波动性,这意味着时间序列中的几个区间存在相关性。

运行Dickey-Fuller测试时,会产生以下结果:

当p值高于0.05时,不能拒绝非平稳性的零假设。

   
  
 STD1
954.7248
4043.4302
0.23611754

变异系数(或平均值除以标准差)为0.236,表明该系列具有显着的波动性。

现在,数据被转换为对数格式。

虽然时间序列仍然不稳定,但当以对数格式表示时,偏差的大小略有下降:

此外,变异系数已显着下降至0.0319,这意味着与平均值相关的趋势的可变性显着低于先前。

   
STD2 = np.std(数据集)
mean2 = np.mean(数据集)
cv2 = std2 / mean2 #变异系数
   
std2
 0.26462445
   
mean2
 8.272395
   
cv2
 0.031988855

同样,在对数数据上生成ACF和PACF图,并再次进行Dickey-Fuller测试。

自相关图

偏自相关图

Dickey-Fuller测试

   
... print('\ t%s:%。3f'%(key,value))
1%:-3.440
5%: -  2.866
10%: -  2.569

Dickey-Fuller检验的p值降至0.0576。虽然这在技术上没有拒绝零假设所需的5%显着性阈值,但对数时间序列已显示基于CV度量的较低波动率,因此该时间序列用于LSTM的预测目的。

LSTM的时间序列分析

现在,LSTM模型用于预测目的。

数据处理

首先,导入相关库并执行数据处理

LSTM生成和预测

模型训练超过100期,并生成预测。

   
#生成LSTM网络
model = Sequential()
model.add(LSTM(4,input_shape =(1,previous)))
 model.fit(X_train,Y_train,epochs = 100,batch_size = 1,verbose = 2)

#生成预测
trainpred = model.predict(X_train)

#将标准化后的数据转换为原始数据
trainpred = scaler.inverse_transform(trainpred)

#计算 RMSE
trainScore = math.sqrt(mean_squared_error(Y_train [0],trainpred [:,0]))
 
#训练预测
trainpredPlot = np.empty_like(dataset)
 
#测试预测

#绘制所有预测
inversetransform,= plt.plot(scaler.inverse_transform(dataset))

准确性

该模型显示训练数据集的均方根误差为0.24,测试数据集的均方根误差为0.23。平均千瓦消耗量(以对数格式表示)为8.27,这意味着0.23的误差小于平均消耗量的3%。

以下是预测消费与实际消费量的关系图:

有趣的是,当在原始数据上生成预测(未转换为对数格式)时,会产生以下训练和测试误差:

在每天平均消耗4043千瓦的情况下,测试的均方误差占总日均消耗量的近20%,并且与对数数据产生的误差相比非常高。

让我们来看看这增加预测到10和50天。

10天

50天

我们可以看到测试误差在10天和50天期间显着降低,并且考虑到LSTM模型在预测时考虑了更多的历史数据,消耗的波动性得到了更好的预测。

鉴于数据是对数格式,现在可以通过获得数据的指数来获得预测的真实值。

例如,testpred变量用(1,-1)重新调整:

   
testpred.reshape(1,-1)
 array([[7.7722197,8.277015,8.458941,8.455311,8.447589,8.445035,
 ......
8.425287,8.404881,8.457063,8.423954,7.98714,7.9003944,
8.240862,8.41654,8.423854,8.437414,8.397851,7.9047146]],
dtype = float32)

结论

对于这个例子,LSTM被证明在预测电力消耗波动方面非常准确。此外,以对数格式表示时间序列可以提高LSTM的预测准确度。


本文摘选  Python中利用长短期记忆模型LSTM进行时间序列预测分析 - 预测电力负荷数据  ,点击“阅读原文”获取全文完整资料。


点击标题查阅往期内容

RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测

结合新冠疫情COVID-19股票价格预测:ARIMA,KNN和神经网络时间序列分析

深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据

用PyTorch机器学习神经网络分类预测银行客户流失模型

PYTHON用LSTM长短期记忆神经网络的参数优化方法预测时间序列洗发水销售数据

Python用Keras神经网络序列模型回归拟合预测、准确度检查和结果可视化

Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析

R语言中的神经网络预测时间序列:多层感知器(MLP)和极限学习机(ELM)数据分析报告

R语言深度学习:用keras神经网络回归模型预测时间序列数据

Matlab用深度学习长短期记忆(LSTM)神经网络对文本数据进行分类

R语言KERAS深度学习CNN卷积神经网络分类识别手写数字图像数据(MNIST)

MATLAB中用BP神经网络预测人体脂肪百分比数据

Python中用PyTorch机器学习神经网络分类预测银行客户流失模型

R语言实现CNN(卷积神经网络)模型进行回归数据分析

SAS使用鸢尾花(iris)数据集训练人工神经网络(ANN)模型

【视频】R语言实现CNN(卷积神经网络)模型进行回归数据分析

Python使用神经网络进行简单文本分类

R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析

R语言基于递归神经网络RNN的温度时间序列预测

R语言神经网络模型预测车辆数量时间序列

R语言中的BP神经网络模型分析学生成绩

matlab使用长短期记忆(LSTM)神经网络对序列数据进行分类

R语言实现拟合神经网络预测和结果可视化

用R语言实现神经网络预测股票实例

使用PYTHON中KERAS的LSTM递归神经网络进行时间序列预测

python用于NLP的seq2seq模型实例:用Keras实现神经网络机器翻译

用于NLP的Python:使用Keras的多标签文本LSTM神经网络分类

标签:预测,Python,模型,神经网络,序列,LSTM,数据
From: https://www.cnblogs.com/tecdat/p/18156310

相关文章

  • Python函数参数为列表问题
    defADD(a):print(3,a,hex(id(a)))a.remove(2)print(3,a,hex(id(a)))a=a.append(10)print(3,a,hex(id(a)))returnaa=[1,2,3]print(1,a,hex(id(a)))b=ADD(a)print(2,a,hex(id(a)))print(2,b,hex(id(b)))函数传参的......
  • 使用 Python 循环创建多个列表
    前言在Python中,我们可以使用循环来动态创建多个列表,这在处理数据、进行数据分析或进行算法实现时非常有用。本文将介绍几种常见的方法,以帮助大家学习如何使用循环创建多个列表。方法一:使用列表推导式列表推导式是Python中一种简洁的语法,可以快速生成列表。我们可以结合循......
  • 修改文件内容 python
    第一种方法,简单直接粗暴的,缺点就是如果文件非常大时,把所有内容都读出来,会非常占用内存:f=open('a.txt','a+',encoding='utf-8')#不能用w+,用w+直接给文件清空了,读不出来内容了f.seek(0)result=f.read()new_result=result.replace('abc','ABC')f.seek(0)f.truncate......
  • 新手下载python和anaconda3注意事项
    新手下载python和anaconda3要注意哪些1、python关于python下载其实很简单,直接在官网下载就行。官网:WelcometoPython.org当然,到了官网下载是默认最新版本,如果你需要旧版本,那就需要找一下了,这里提供一下windows的各版本的官网链接:PythonReleasesforWindows|Python.org......
  • 深度学习Python代码小知识点(备忘,因为没有脑子)
    现在是2024年4月24日16:58,今天摸鱼有点多,备忘一下,都写到一篇内容里面,免得分散。 1.np.concatenate()函数'np.concatenate'是NumPy库中用来合并两个或多个数组的函数。它可以在任意指定的轴上连接数组,是数据预处理和特征工程中常用的工具。基本语法:numpy.concatenate((a1,a2......
  • WARNING: pip is configured with locations that require TLS/SSL, however the ssl
    pip3安装报错[[email protected]]#pip3install--upgradepipWARNING:pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavailable.Requirementalreadysatisfied:pipin/usr/local/python3/lib/python3.11/s......
  • python 实现网页 pdf 转 docx
    1、安装python库pip3installflaskPyPDF2python-docx2、创建一个Flask应用,并编写处理文件上传和转换的代码vimpdf_to_docx.pyimportosfromflaskimportFlask,render_template,request,send_filefromPyPDF2importPdfReaderfromioimportBytesIOfromdocx......
  • Python list的交、并、差与排序
    求list的交集、并集、差集set() 函数创建一个无序不重复元素集,通过set可方便求取list的交并差,并可去重#通过set集合>>>list1=[1,2,3]>>>list2=[2,3,4]>>>set1=set(list1)>>>set2=set(list2)>>>set1&set2#交集{2,3}>>>set1|set......
  • python之读取ini文件
    #ini文件[web_config]#前台ldap登陆:login_name=ut251login_pwd=wanghu123读取ini文件内容defread_config(section,key):try:config=configparser.ConfigParser()#类实例化#ini文件路径config_path=os.path.join(product_path,......
  • python之pytest
    安装pipinstallpytest 终端运行pytest:在当前目录中查找并运行所有符合测试用例命名规范的测试用例。pytest-q:以简化模式运行所有测试用例。pytest-v:以详细模式运行所有测试用例。pytesttest_sample.py:运行指定的测试文件test_sample.py中的所有测试用例。......