乐趣区

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

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

原文出处:拓端数据部落公众号

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

 每日数据是通过总计每天提供的 15 分钟距离的消耗量来创立的。

LSTM 简介

LSTM(或长短期记忆人工神经网络)容许剖析具备长期依赖性的有序数据。当波及到这项工作时,传统的神经网络体现出有余,在这方面,LSTM 将用于预测这种状况下的电力耗费模式。

与 ARIMA 等模型相比,LSTM 的一个非凡劣势是数据不肯定须要是稳固的(常数均值,方差和自相干),以便 LSTM 对其进行剖析。

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

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

  1. 生成自相干和 自相干图
  2. 进行 Dickey-Fuller 测试
  3. 对工夫序列进行对数变换,并再次运行上述两个过程,以确定平稳性的变动(如果有的话)

首先,这是工夫序列图:

据察看,波动性(或生产从一天到下一天的变动)十分高。在这方面,对数变换能够用于尝试略微平滑该数据。在此之前,生成 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 的预测准确度。


参考文献

1. 在 python 中应用 lstm 和 pytorch 进行工夫序列预测

2.python 中利用长短期记忆模型 lstm 进行工夫序列预测剖析

3. 应用 r 语言进行工夫序列(arima,指数平滑)剖析

4.r 语言多元 copula-garch- 模型工夫序列预测

5.r 语言 copulas 和金融工夫序列案例

6. 应用 r 语言随机稳定模型 sv 解决工夫序列中的随机稳定

7.r 语言工夫序列 tar 阈值自回归模型

8.r 语言 k -shape 工夫序列聚类办法对股票价格工夫序列聚类

9.python3 用 arima 模型进行工夫序列预测

退出移动版