CNN做时间序列预测_lstm时间序列预测_2「建议收藏」

此数据是1949到1960一共12年,每年12个月的航班乘客数据,一共144个数据,单位是1000。我们使用它来进行LSTM时间序列预测的实验。数据如图所示第一列为时间第二列为数据编写代码头文件importnumpyimportmatplotlib.pyplotaspltfromkeras.modelsimportSequentialfromkeras….

大家好,又见面了,我是你们的朋友全栈君。

此数据是1949 到 1960 一共 12 年,每年 12 个月的航班乘客数据,一共 144 个数据,单位是 1000。我们使用它来进行LSTM时间序列预测的实验。数据如图所示

a43f11e0f14119ad6a0973f5fa538465.png

第一列为时间 第二列为数据

编写代码

头文件

import numpy
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import LSTM
import  pandas as pd
import  os
from keras.models import Sequential, load_model

加载数据
在这里我们设置时序数据的前65%为训练数据 后35%为测试数据

dataframe = pd.read_csv('./international-airline-passengers.csv', usecols=[1], engine='python', skipfooter=3)
dataset = dataframe.values
# 将整型变为float
dataset = dataset.astype('float32')
#归一化 在下一步会讲解
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)

train_size = int(len(dataset) * 0.65)
trainlist = dataset[:train_size]
testlist = dataset[train_size:]

对数据进行处理
LSTM进行预测需要的是时序数据 根据前timestep步预测后面的数据
假定给一个数据集
{

A,B,C->D
B,C,D->E
C,D,E->F
D,E,F->G
E,F,G->H
}
这时timestep为3,即根据前三个的数据预测后一个数据的值
所以我们需要对数据进行转化
举一个简单的情况 假设一个list为[1,2,3,4,5],timestep = 2
我们转化之后要达到的效果是

train_X train_Y

即依据前两个值预测下一个值


对数据进行归一化
LSTM可以不进行归一化的操作,但是这样会让训练模型的loss下降很慢。本教程如果不进行归一化,100次迭代后loss还是很高

#上面代码的片段讲解
scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset)

对数据进行处理

def create_dataset(dataset, look_back):
#这里的look_back与timestep相同
    dataX, dataY = [], []
    for i in range(len(dataset)-look_back-1):
        a = dataset[i:(i+look_back)]
        dataX.append(a)
        dataY.append(dataset[i + look_back])
    return numpy.array(dataX),numpy.array(dataY)
#训练数据太少 look_back并不能过大
look_back = 1
trainX,trainY  = create_dataset(trainlist,look_back)
testX,testY = create_dataset(testlist,look_back)

LSTM模型
LSTM的输入为 [samples, timesteps, features]
这里的timesteps为步数,features为维度 这里我们的数据是1维的

trainX = numpy.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1))
testX = numpy.reshape(testX, (testX.shape[0], testX.shape[1] ,1 ))

# create and fit the LSTM network
model = Sequential()
model.add(LSTM(4, input_shape=(None,1)))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2)
model.save(os.path.join("DATA","Test" + ".h5"))
# make predictions

进行预测

#model = load_model(os.path.join("DATA","Test" + ".h5"))
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)

#反归一化
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform(trainY)
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform(testY)

查看结果

plt.plot(trainY)
plt.plot(trainPredict[1:])
plt.show()
plt.plot(testY)
plt.plot(testPredict[1:])
plt.show()

这个时候我们的结果为

30fb20840f5fa33d6c23cd93874cffa0.png

1e8d24a744b0e3d80129d5b4dd802973.png

参考
用 LSTM 做时间序列预测的一个小例子
Keras中文文档-Sequential model

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126935.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CSS——06扩展:高级

    CSS——06扩展:高级人生苦短,要学就只学有用的【前端教学-CSS-高阶技巧】CSS样式初始CSS高级技巧目标理解能说出元素显示隐藏最常见的写法能说出精灵图产生的目的能说出去除图片底侧空白缝隙的方法应用能写出最常见的鼠标样式能使用精灵图技术,这个技术比较重要能用滑动门做导航栏案例,这个技术比较重要1.元素的显示与隐藏目的让一个元素在页面中消失或者显示出来场景类似网站广告,当我们点击关闭就不见了,但是我们重新刷新页面,会重新出现!1.1display显示(重点)…

    2022年5月29日
    37
  • 银行风控模型

    银行风控模型风控催生原因对于银行来说,现今互联网贷款和信用卡办理面临的主要难题是数据和风控。站在银行或金融机构角度,自然而然是想获得更多的信息和数据,但是在收集数据这方面又是比较无力的。加上当下的发展趋势,消费贷以及贷款审批速度都要求快。如何在快的的过程中对客户进行一个全面的审查,得出一个合理的结果呢?如果没有详细的数据对客户进行评估,这势必会提高放贷的风险。风控概述所谓风控,是指多银行贷款资金的…

    2022年6月13日
    35
  • (一)什么是流程引擎?为什么学习流程引擎?

    activity(流程引擎)从零入门到实战学习欢迎使用Markdown编辑器1.什么是流程引擎?2.为什么需要学习流程引擎?3.为什么选择activiti?功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编

    2022年4月5日
    242
  • python 监控网页_python实时监控网页

    python 监控网页_python实时监控网页PHP从语言层面上讲几乎是一无是处,具体实现的质量也乏善可陈,但它胜在最要命的部署上:没有任何其他语言有像PHP一样适合大规模部署的方式。基本上装好Apache/mod_php之后,PHP应用的部署就简化为了复制文件。  即便是考虑到性能原因等采用nginx/FastCGI等替代方式,额外的工作也只是在于最初配置。一旦配置完成,之后的部署都是文件复制。服务器重启后通常会自动启动a…

    2022年7月16日
    16
  • Eurake[通俗易懂]

    Eurake[通俗易懂]eureka-core模块包含了功能的核心实现:1.com.netflix.eureka.cluster-与peer节点复制(replication)相关的功能2.com.netflix.eureka.lease-即”租约”,用来控制注册信息的生命周期(添加、清除、续约)3.com.netflix.eureka.registry-存储、查询服务注册信息4.com.n…

    2022年6月13日
    36
  • 基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]

    基于Tensorflow + yolo3的安全帽识别系统[通俗易懂]最近做了一个新的项目,需要将图片或者视频中的人员是否戴安全帽识别出来,并且在网站上进行显示.首先是正常的登录注册目前登录注册有很多方式,这个比较常规,用户名密码登录,也没有写的很复杂.接下来就是主要功能页面了如上图所示,可以进行图片及视频识别图片上传,正在进行识别…

    2022年5月12日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号