python时间序列分析航空旅人_Python深度学习教程:LSTM时间序列预测小练习—国航乘客数量预测...

Python深度学习教程:LSTM时间序列预测小练习—国航乘客数量预测

参考数据:

数据一共两列,左边是日期,右边是乘客数量

grey.gif

对数据做可视化:import math

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from pandas import read_csv

from keras.models import Sequential

from keras.layers import Dense

from keras.layers import LSTM

from sklearn.preprocessing import MinMaxScaler

from sklearn.metrics import mean_squared_error

#load dataset

dataframe = read_csv('./international-airline-passengers.csv',usecols =[1],header = None,engine = 'python',skipfooter = 3)

dataset = dataframe.values

#将整型变为float

dataset = dataset.astype('float32')

plt.plot(dataset)

plt.show()

可视化结果:

grey.gif

下面开始进行建模:

完整代码:import math

import numpy

import pandas as pd

import matplotlib.pyplot as plt

from pandas import read_csv

from keras.models import Sequential

from keras.layers import Dense

from keras.layers import LSTM

from sklearn.preprocessing import MinMaxScaler

from sklearn.metrics import mean_squared_error

def create_dataset(dataset,look_back = 1):

dataX,dataY = [],[]

for i in range(len(dataset) - look_back - 1):

a = dataset[i:i+look_back,0]

b = dataset[i+look_back,0]

dataX.append(a)

dataY.append(b)

return numpy.array(dataX),numpy.array(dataY)

numpy.random.seed(7)

dataframe = read_csv('./international-airline-passengers.csv',usecols = [1],header = None,engine = 'python')

dataset = dataframe.values

dataset = dataset.astype('float32')

scaler = MinMaxScaler(feature_range = (0,1))

dataset = scaler.fit_transform(dataset)

train_size = int(len(dataset) * 0.67)

test_size = len(dataset) - train_size

train,test = dataset[0:train_size,:],dataset[train_size:len(dataset),:]

look_back = 1

trainX,trainY = create_dataset(train,look_back)

testX,testY = create_dataset(test,look_back)

#reshape input to be [samples, time steps, features]

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

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

#create and fit the LSTM network

model = Sequential()

model.add(LSTM(4,input_shape = (1,look_back)))

model.add(Dense(1))

model.compile(loss = 'mean_squared_error',optimizer = 'adam')

model.fit(trainX,trainY,epochs = 100,batch_size = 1,verbose = 2)

# make predictions

trainPredict = model.predict(trainX)

testPredict = model.predict(testX)

# invert predictions

trainPredict = scaler.inverse_transform(trainPredict)

trainY = scaler.inverse_transform([trainY])

testPredict = scaler.inverse_transform(testPredict)

testY = scaler.inverse_transform([testY])

# calculate root mean squared error

trainScore = math.sqrt(mean_squared_error(trainY[0], trainPredict[:,0]))

print('Train Score: %.2f RMSE' % (trainScore))

testScore = math.sqrt(mean_squared_error(testY[0], testPredict[:,0]))

print('Test Score: %.2f RMSE' % (testScore))

# shift train predictions for plotting

trainPredictPlot = numpy.empty_like(dataset)

trainPredictPlot[:, :] = numpy.nan

trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict

# shift test predictions for plotting

testPredictPlot = numpy.empty_like(dataset)

testPredictPlot[:, :] = numpy.nan

testPredictPlot[len(trainPredict)+(look_back*2)+1:len(dataset)-1, :] = testPredict

# plot baseline and predictions

plt.plot(scaler.inverse_transform(dataset))

plt.plot(trainPredictPlot)

plt.plot(testPredictPlot)

plt.show()

运行结果:

grey.gif

grey.gif

本次的Python学习教程!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值