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 height 100% 和 100vh 区别

    css height 100% 和 100vh 区别1.height100%意思就是,想在这container设置高度![有约束]高度设置成100%但是呢这得看container的父级body的height是否为100%还往上看body的父级html的height是否为100%container->body->html[他们的height元素都要设置为100%]<html><head><style>html,bod

    2022年5月18日
    61
  • jieba库的安装教程_利用jieba库进行txt分词

    jieba库的安装教程_利用jieba库进行txt分词jieba库jieba库的安装jieba库的基本介绍jieba库的使用jieba库的安装(cmd命令行)pipinstalljiebajieba库的基本介绍(1)jieba库概述jieba库是优秀的中文分词第三方库。中文文本需要通过分词获得单个的词语;jieba是优秀的中文分词第三方库,需要额外安装;jieba库提供三种分词模式,最简单只需掌握一个函数;(2)jieba…

    2022年9月21日
    3
  • 数据分析之数据预处理、分析建模、可视化[通俗易懂]

    概述:简介、思路、发展历程、应用领域、开发流程;数据类型:结构化与非结构化、定性与定量、截面数据与时间序列数据;数据来源:外部来源、内部来源;数据预处理:数据清洗、数据集成、数据规约、数据变换;数据分析模型:对比分析、漏斗分析、留存分析、A/B测试、用户行为路径分析、用户分群、用户画像分析等;数据分析方法:描述统计、假设检验、信度分析、相关分析、方差分析、回归分析、聚类分析、判别分析、主成分分析、因子分析、时间序列分析等;数据可视化:Excel、PowerBI、Tableau、Python;

    2022年4月17日
    48
  • 用状态空间法求猴子香蕉问题_猴子摘香蕉状态空间图

    用状态空间法求猴子香蕉问题_猴子摘香蕉状态空间图猴子和香蕉问题(monkeyandbananaproblem)在一个房间内有一只猴子(可把这只猴子看做一个机器人)、一个箱子和一束香蕉。香蕉挂在天花板下方,但猴子的高度不足以碰到它。那么这只猴子怎样才能摘到香蕉呢?图2.1.1表示出猴子、香蕉和箱子在房间内的相对位置。用一个四元表列(W,x,Y,z)来表示这个问题的状态,其中W-猴子的水平位置x-当猴子在箱子顶上时取x=1;否则取x=0Y-箱…

    2022年9月26日
    6
  • IntelliJ IDEA 创建Java项目[通俗易懂]

    IntelliJ IDEA 创建Java项目[通俗易懂]Java模块让你可以开发JavaSE和JavaEE应用程序。由Java模块提供的核心功能可通过加入各种技术和框架支持进行扩展。当您创建好一个项目后,您可以创建一个Java模块。您还可以添加一个Java模块到现有项目。注意:这里说的Java模块实际是一个Java项目,而IDEA的项目(Project)则相当于Eclipse的工作空间(workspace)的概念,相当于VS的解决方案(soluti

    2022年9月29日
    4
  • python 字典最外层使用_python字典底层实现

    python 字典最外层使用_python字典底层实现前言问题1:python中的字典到底是有序还是无序问题2:python中字典的效率如何python字典底层原理在Python3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B后插

    2022年7月31日
    6

发表回复

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

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