首页 > 编程语言 >PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子|附代码数据

PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子|附代码数据

时间:2024-07-02 17:23:20浏览次数:15  
标签:预测 KERAS PYTHON 模型 df 神经网络 序列 LSTM

全文下载链接:http://tecdat.cn?p=26519

最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。

一个简单的编码器-解码器LSTM神经网络应用于时间序列预测问题:预测天然气价格,预测范围为 10 天。“进入”时间步长也设置为 10 天。) 只需要 10 天来推断接下来的 10 天。可以使用 10 天的历史数据集以在线学习的方式重新训练网络

数据集是天然气价格  查看文末了解数据获取方式  ,具有以下特征:

  • 日期(从 1997 年到 2020 年)- 为 每天数据

  • 以元计的天然气价格

读取数据并将日期作为索引处理

   
# 固定日期时间并设置为索引
dftet.index = pd.DatetimeIndex

# 用NaN来填补缺失的日期(以后再补)
dargt = f_arget.reindex(ales, fill_value=np.nan)

# 检查
print(d_tret.dtypes)
df_aget.head(10)

图片

处理缺失的日期

   
# 数据归纳(使用 "向前填充"--根据之前的值进行填充)。
dfaet.fillna(method='ffill', inplace=True)

图片

图片

特征工程

因为我们正在使用深度学习,所以特征工程将是最小的。

  • One-hot 编码“is_weekend”和星期几
  • 添加行的最小值和最大值(可选)

通过设置固定的上限(例如 30 倍中位数)修复异常高的值

   
# 在df_agg中修复任何非常高的值 - 归一化为中值
for col in co_to_fi_ies:
    dgt[col] = fixnaes(dftget[col])

图片

添加滞后

   
# 增加每周的滞后性
df_tret = addag(d_aget, tare_arble='Price', step_ak=7)
# 增加30天的滞后性
df_get = ad_ag(df_ret, tagt_able='Price', sep_bck=30)

图片

   
# 合并后删除任何有NA值的列
d_gt.dropna(inplace=True)
print(dfget.shape)

tie_nx = df_art.index

图片

归一化

  • 归一化或最小-最大尺度(需要减小较宽的数值范围,以便 LSTM 收敛)。
   
# 标准化训练数据[0, 1]
sclr = prcsing.Maxcaer((0,1))

图片

准备训练数据集

  • 时间步数 = 1
  • 时间步数 = nsteout小时数(预测范围)

在这里,我们将数据集从 [samples, features] 转换为 [samples, steps, features] - 与算法 LSTM 一起使用的维度。下面的序列拆分使用“walk-forward”方法来创建训练数据集。

   
# 多变量多步骤编码器-解码器 lstm 示例
# 选择一个时间步骤的数量



# 维度变成[样本数、步骤、特征]
X, y = splices(datasformed, n_ep_in, n_ep_out)

# 分成训练/测试
et_ut = int(0.05*X.shpe[0]) 
X_tain, X_est, ytrain, y_tst = X[:-tetaont], X[-tes_ont:], y[:-tstmunt], y[-es_unt:]

图片

训练模型

这利用了长期短期记忆算法。

   
# 实例化和训练模型
print
model = cre_odel(n_tps_in, n_tep_out, n_feures, lerig_rate=0.0001)

图片

图片

探索预测

   
%%time
#加载特定的模型

model = lod_id_del(
                           n_stepin, 
                           n_sep_out, 
                           X_tan.shape[2])

图片

   
# 展示对一个样本的预测
testle_ix = 0
yat = mdel.predict(X_tet[est_amle_ix].reshape((1,n_sep_in, nfatues)),erbose=Tue)

图片

   
# 计算这一个测试样本的均方根误差
rmse = math.sqrt

图片

   
plot_result(yhat[0], scaler, saved_columns)

图片

图片

图片


点击标题查阅往期内容

图片

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析

图片

左右滑动查看更多

图片

01

图片

02

图片

03

图片

04

图片

平均 RMSE

   
# 收集所有的测试RMSE值
rmesores = []
for i in range:
    yhat = oel.predict(Xtet[i].reshape((1, _stes_in, _faues)), verbose=False)
    # 计算这一个测试样本的均方根误差
    rmse = math.sqrt(mensqaerror(yhat[0], y_test[i]))

图片

训练整个数据集

   
#在所有数据上实例化和训练模型
modl_l = cret_mel(nsep_in, steps_ou, n_etures,learnnrate=0.0001)
mde_all, ru_ime, weighfie = trin(md_all, X, y, batcsie=16, neohs=15)

图片

图片

样本内预测

注意:模型已经“看到”或训练了这些样本,但我们希望确保它与预测一致。如果它做得不好,模型可能会欠拟合或过拟合。要尝试的事情:

  • 增加或减少批量大小
  • 增加或减少学习率
  • 更改网络中 LSTM 的隐藏层数
   
# 获得10个步
da_cent = dfret.iloc[-(ntes_in*2):-nsps_in]

# 标准化
dta_ectormed = sclr.rasfrm(daareent)

# 维度变成[样本数、步骤、特征]
n_res = dtcentorm.shape[1]
X_st = data_recn_trsrd.reshape((1, n_tps_n, n_feares))

# 预测
foecst = mlll.predict(X_past)

# 扩大规模并转换为DF
forcast = forast.resape(n_eaturs))
foect = saer.inese_transform(forecast)
fuure_dtes  df_targe.ide[-n_steps_out:] 

# 绘图
histrcl = d_aet.ioc[-100:, :1] # 获得历史数据的X步回溯
for i in ane(oisae[1]):
    fig = plt.igre(fgze=(10,5))
    
    # 绘制df_agg历史数据
    plt.plot(.iloc[:,i]
    
    # 绘制预测图
    plt.plot(frc.iloc[:,i])

    # 标签和图例
    plt.xlabel

图片

预测样本外

   
# 获取最后10步
dtareent = dfargt.iloc[-nstpsin:]。

# 标准化
dta_ecntranfomed = scaler.trasorm(data_recent)


# 预测
forct = meall.rict(_past)

# 扩大规模并转换为DF
foreast = foecs.eshape(_seps_ut, n_eatures))
foreast = sclerinvers_tranorm(focast)
futur_daes = pd.daternge(df_argetinex[-1], priods=step_out, freq='D')


# 绘图
htrical = df_taet.iloc[-100:, :1] # 获得历史数据的X步回溯
# 绘制预测图
    plt.plot(fectoc[:,i])

图片


图片

点击文末 “阅读原文”

获取全文完整资料。

本文选自《PYTHON用KERAS的LSTM神经网络进行时间序列预测天然气价格例子》。

点击标题查阅往期内容

Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
Matlab用深度学习长短期记忆(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神经网络分类

标签:预测,KERAS,PYTHON,模型,df,神经网络,序列,LSTM
From: https://www.cnblogs.com/tecdat/p/18280202

相关文章

  • 《DNK210使用指南 -CanMV版 V1.0》第七章 基于CanMV的MicroPython语法开发环境搭建
    第七章基于CanMV的MicroPython语法开发环境搭建1)实验平台:正点原子DNK210开发板2)章节摘自【正点原子】DNK210使用指南-CanMV版V1.03)购买链接:https://detail.tmall.com/item.htm?&id=7828013987504)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/......
  • Python对历年高考分数线数据用聚类、决策树可视化分析一批、二批高校专业、位次、计划
    全文链接:https://tecdat.cn/?p=36626原文出处:拓端数据部落公众号随着高等教育的普及与竞争的日益激烈,高考作为通往高等教育的重要门槛,其分数线的波动、高校及专业的选择成为了社会广泛关注的焦点。考生和家长在面临众多高校和专业的选择时,往往需要综合考虑多种因素,如分数线、专......
  • Python--matplotlib绘图可视化知识点整理
    无论你工作在什么项目上,IPython都是值得推荐的。利用ipython--pylab,可以进入PyLab模式,已经导入了matplotlib库与相关软件包(例如Numpy和Scipy),额可以直接使用相关库的功能。本文作为学习过程中对matplotlib一些常用知识点的整理,方便查找。这样IPython配置为使用你所指定的mat......
  • Python爬虫百度文库
    用Python爬取百度文库资料在当今数字化的时代,获取信息变得至关重要。有时我们可能需要从百度文库中获取一些有价值的资料,但手动下载可能效率低下。本文将探讨如何使用Python来爬取百度文库的资料,但需要注意的是,爬取百度文库的资料可能涉及违反其服务条款和法律法规,因此本......
  • python学习-list
    List(列表的定义语法)[元素1,元素2,元素3,......]什么是元素?数据容器内的每一份数据,都称之为元素元素的类型有限制吗?元素的数据类型没有任何限制,甚至元素也可以是列表,这样就定义了嵌套列表但是打印列表里的数值类型是'list'列表的下标(索引)列表的下标(索引)-反向......
  • Python-列表
    列表1.列表Python列表是:任意对象的有序集合:列表是收集其他对象的地方,列表维护了元素的每一项从左到右的顺序,也就是说这是序列;通过偏移访问:像字符串一样,可以通过列表对象的偏移对其进行索引,从而读取对象的某一部分的内容,也可以进行分片和拼接等操作;可变长度、异构以及任意嵌......
  • Python类中的初始化方法理解
    在Python类的初始化方法(__init__方法)中,通常会执行以下操作:1、设置实例属性:这些属性将用于存储与实例相关的数据。属性名通常以self.开头,以便它们可以在类的其他方法中访问。例如:self.attribute_name=value2、传递并存储参数:初始化方法通常会接受参数,这些参数可以用于定制......
  • 【Python机器学习】模型评估与改进——带交叉验证的网格搜索
    虽然将数据划分为训练集、验证集、测试集的方法是可行的,也相对常用,但这种方法对数据的划分相当敏感,为了得到对泛化性能的更好估计,我们可以使用交叉验证来评估每种参数组合的性能,而不是仅将数据单次划分为训练集与验证集。代码表示如下:fromsklearn.svmimportSVCfromsklear......
  • Python创建异步任务队列库之Huey使用详解
    概要Huey是一个简单的Python库,用于创建异步任务队列。它的设计目标是简单易用,同时具备强大的功能。Huey可以轻松地将任务添加到队列中,然后在后台线程中处理这些任务,从而避免阻塞主线程。这使得Huey非常适合处理I/O密集型或长时间运行的任务。此外,Huey还支持任务的......
  • Python层次密度聚类算法库之HDBSCAN使用详解
      概要HDBSCAN是一种层次密度聚类算法,它通过密度连接性来构建聚类层次结构。与传统的K-Means算法相比,HDBSCAN具有以下几个显著特点:自动确定聚类数量:HDBSCAN能够根据数据自动确定聚类数量,不需要预先指定。适应噪声和异常点:HDBSCAN在聚类过程中能够很好地处理......