原文链接:http://tecdat.cn/?p=6663
原文出处:拓端数据部落公众号
此示例中,神经网络用于应用 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%,并且与对数数据产生的误差相比十分高。
让咱们来看看这减少预测到 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 的预测准确度。
参考文献
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 模型进行工夫序列预测