Python中利用长短期记忆模型LSTM进行时间序列预测分析
Python中利用长短期记忆模型LSTM进行时间序列预测分析
此示例中,神经网络用于使用2011年4月至201年2月期间的数据预测公民办公室的电力消耗。
每日数据是通过总计每天提供的15分钟间隔的消耗量来创建的。
LSTM(或长短期记忆人工神经网络)允许分析具有长期依赖性的有序数据。当涉及到这项任务时,传统的神经网络体现出不足,在这方面,LSTM将用于预测这种情况下的电力消耗模式。
与ARIMA等模型相比,LSTM的一个特殊优势是数据不一定需要是稳定的(常数均值,方差和自相关),以便LSTM对其进行分析。
为了确定我们的模型中是否存在平稳性:
- 生成自相关和偏自相关图
- 进行Dickey-Fuller测试
- 对时间序列进行对数变换,并再次运行上述两个过程,以确定平稳性的变化(如果有的话)
首先,这是时间序列图:
据观察,波动性(或消费从一天到下一天的变化)非常高。在这方面,对数变换可以用于尝试稍微平滑该数据。在此之前,生成ACF和PACF图,并进行Dickey-Fuller测试。 Kaizong Ye
拓端分析师
自相关和偏自相关图都表现出显着的波动性,这意味着时间序列中的几个区间存在相关性。
运行Dickey-Fuller测试时,会产生以下结果:
当p值高于0.05时,不能拒绝非平稳性的零假设。
代码语言:javascript代码运行次数:0运行复制 STD1
954.7248
404.402
0.2611754
变异系数(或平均值除以标准差)为0.26,表明该系列具有显着的波动性。
现在,数据被转换为对数格式。
虽然时间序列仍然不稳定,但当以对数格式表示时,偏差的大小略有下降:
此外,变异系数已显着下降至0.019,这意味着与平均值相关的趋势的可变性显着低于先前。
代码语言:javascript代码运行次数:0运行复制STD2 = np.std(数据集)
mean2 = (数据集)
cv2 = std2 / mean2 #变异系数
代码语言:javascript代码运行次数:0运行复制std2
0.26462445
代码语言:javascript代码运行次数:0运行复制mean2
8.27295
代码语言:javascript代码运行次数:0运行复制cv2
0.01988855
同样,在对数数据上生成ACF和PACF图,并再次进行Dickey-Fuller测试。
Dickey-Fuller测试
代码语言:javascript代码运行次数:0运行复制... print('\ t%s:%。f'%(key,value))
1%:-.440
5%: - 2.866
10%: - 2.569
Dickey-Fuller检验的p值降至0.0576。虽然这在技术上没有拒绝零假设所需的5%显着性阈值,但对数时间序列已显示基于CV度量的较低波动率,因此该时间序列用于LSTM的预测目的。
现在,LSTM模型用于预测目的。
数据处理
首先,导入相关库并执行数据处理
LSTM生成和预测
模型训练超过100期,并生成预测。
代码语言:javascript代码运行次数:0运行复制#生成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 = _like(dataset)
#测试预测
#绘制所有预测
inversetransform,= plt.plot(scaler.inverse_transform(dataset))
准确性
该模型显示训练数据集的均方根误差为0.24,测试数据集的均方根误差为0.2。平均千瓦消耗量(以对数格式表示)为8.27,这意味着0.2的误差小于平均消耗量的%。
以下是预测消费与实际消费量的关系图:
有趣的是,当在原始数据上生成预测(未转换为对数格式)时,会产生以下训练和测试误差:
在每天平均消耗404千瓦的情况下,测试的均方误差占总日均消耗量的近20%,并且与对数数据产生的误差相比非常高。
让我们来看看这增加预测到10和50天。
10天
50天
我们可以看到测试误差在10天和50天期间显着降低,并且考虑到LSTM模型在预测时考虑了更多的历史数据,消耗的波动性得到了更好的预测。
鉴于数据是对数格式,现在可以通过获得数据的指数来获得预测的真实值。
例如,testpred变量用(1,-1)重新调整:
代码语言:javascript代码运行次数:0运行复制testpred.reshape(1,-1)
array(\[\[7.7722197,8.277015,8.458941,8.45511,8.447589,8.44505,
......
8.425287,8.404881,8.45706,8.42954,7.98714,7.900944,
8.240862,8.41654,8.42854,8.47414,8.97851,7.9047146\]\],
dtype = float2)
结论
对于这个例子,LSTM被证明在预测电力消耗波动方面非常准确。此外,以对数格式表示时间序列可以提高LSTM的预测准确度。
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 19 条评论) |
本站网友 淘宝整点聚 | 22分钟前 发表 |
testpred变量用(1 | |
本站网友 萤火一号 | 28分钟前 发表 |
这意味着0.2的误差小于平均消耗量的% | |
本站网友 便秘的症状 | 1分钟前 发表 |
8.447589 | |
本站网友 医学资讯 | 30分钟前 发表 |
现在可以通过获得数据的指数来获得预测的真实值 | |
本站网友 上海生活论坛 | 12分钟前 发表 |
但对数时间序列已显示基于CV度量的较低波动率 | |
本站网友 中药枳壳的作用 | 7分钟前 发表 |
testpred变量用(1 | |
本站网友 文化传媒公司 | 15分钟前 发表 |
previous))) model.fit(X\_train | |
本站网友 田园风格家装 | 23分钟前 发表 |
8.45511 | |
本站网友 dseven | 22分钟前 发表 |
trainpred \[: | |
本站网友 卷柏的功效 | 28分钟前 发表 |
input_shape =(1 | |
本站网友 中国新闻出版署 | 10分钟前 发表 |
平均千瓦消耗量(以对数格式表示)为8.27 | |
本站网友 拱北租房 | 15分钟前 发表 |
在对数数据上生成ACF和PACF图 | |
本站网友 芥子须弥 | 30分钟前 发表 |
以下是预测消费与实际消费量的关系图:有趣的是 | |
本站网友 174医院 | 0秒前 发表 |
导入相关库并执行数据处理LSTM生成和预测模型训练超过100期 | |
本站网友 北京哪家美容整形医院好 | 30分钟前 发表 |
并生成预测 | |
本站网友 yfu | 18分钟前 发表 |
这意味着时间序列中的几个区间存在相关性 | |
本站网友 唐山房产信息网 | 3分钟前 发表 |
传统的神经网络体现出不足 | |
本站网友 公积金异地购房贷款 | 19分钟前 发表 |
epochs = 100 |