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

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

此示例中,神经网络用于使用2011年4月至2013年2月期间的数据预测公民办公室的电力消耗。

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

LSTM简介

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

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

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

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

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

首先,这是时间序列图:

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

自相关图

偏自相关图

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

运行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%,并且与对数数据产生的误差相比非常高。

让我们来看看这增加预测到1050天。

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的预测准确度。

相关文章
|
11天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
21天前
|
数据处理 Python
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
这篇文章介绍了如何使用Python读取Excel文件中的数据,处理后将其保存为txt、xlsx和csv格式的文件。
41 3
Python实用记录(十):获取excel数据并通过列表的形式保存为txt文档、xlsx文档、csv文档
|
21天前
|
计算机视觉 Python
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
这篇文章介绍了如何使用Python的OpenCV库将多张图片合并为一张图片显示,以及如何使用matplotlib库从不同txt文档中读取数据并绘制多条折线图。
38 3
Python实用记录(九):将不同的图绘制在一起、将不同txt文档中的数据绘制多条折线图
|
22天前
|
数据可视化 算法 Python
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
本文介绍了如何利用Python脚本结合动态模态分解(DMD)技术,分析从OpenFOAM模拟中提取的二维切片数据,以深入理解流体动力学现象。通过PyVista库处理VTK格式的模拟数据,进行POD和DMD分析,揭示流场中的主要能量结构及动态特征。此方法为研究复杂流动系统提供了有力工具。
51 2
基于OpenFOAM和Python的流场动态模态分解:从数据提取到POD-DMD分析
|
9天前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
25 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
18天前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
40 2
|
19天前
|
JSON 安全 数据安全/隐私保护
深度剖析:Python如何运用OAuth与JWT,为数据加上双保险🔐
【10月更文挑战第10天】本文介绍了OAuth 2.0和JSON Web Tokens (JWT) 两种现代Web应用中最流行的认证机制。通过使用Flask-OAuthlib和PyJWT库,详细展示了如何在Python环境中实现这两种认证方式,从而提升系统的安全性和开发效率。OAuth 2.0适用于授权过程,JWT则简化了认证流程,确保每次请求的安全性。结合两者,可以构建出既安全又高效的认证体系。
35 1
|
22天前
|
机器学习/深度学习 存储 自然语言处理
从理论到实践:如何使用长短期记忆网络(LSTM)改善自然语言处理任务
【10月更文挑战第7天】随着深度学习技术的发展,循环神经网络(RNNs)及其变体,特别是长短期记忆网络(LSTMs),已经成为处理序列数据的强大工具。在自然语言处理(NLP)领域,LSTM因其能够捕捉文本中的长期依赖关系而变得尤为重要。本文将介绍LSTM的基本原理,并通过具体的代码示例来展示如何在实际的NLP任务中应用LSTM。
51 4
|
10天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
4天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###

热门文章

最新文章