[开源] 基于GRU的时间序列预测模型python代码

基于GRU的时间序列预测模型python代码分享给大家,记得点赞哦

python 复制代码
#!/usr/bin/env python
# coding: utf-8

import time
time_start = time.time() 


import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import math
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, GRU
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error 
from sklearn.metrics import r2_score 
from keras import optimizers
from pylab import *
import tensorflow as tf


mpl.rcParams['font.sans-serif'] = ['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False


# 调用GPU加速
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
for gpu in gpus:
    tf.config.experimental.set_memory_growth(gpu, True)


def creat_dataset(dataset, look_back=10):
    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 np.array(dataX), np.array(dataY)


dataframe = pd.read_csv('天气.csv',header=0, parse_dates=[0],index_col=0, usecols=[0, 1])#header=0第0行为表头,index_col=0第一列为索引,usecols=[0, 1]选取第一列和第二列
dataset = dataframe.values
dataframe.head(10)

plt.figure(figsize=(10, 4),dpi=150)
dataframe.plot()
plt.ylabel('AQI')
plt.xlabel('time/day')
font = {'serif': 'Times New Roman','size': 20}
plt.rc('font', **font)
plt.show()


scaler = MinMaxScaler(feature_range=(0, 1))
dataset = scaler.fit_transform(dataset.reshape(-1, 1))


train_size = int(len(dataset)*0.8)
test_size = len(dataset)-train_size
train, test = dataset[0: train_size], dataset[train_size: len(dataset)]



look_back = 10
trainX, trainY = creat_dataset(train, look_back)
testX, testY = creat_dataset(test, look_back)


model = Sequential()
model.add(GRU(input_dim=1, units=50, return_sequences=True))
model.add(GRU(input_dim=50, units=100, return_sequences=True))
model.add(GRU(input_dim=100, units=200, return_sequences=True))
model.add(GRU(300, return_sequences=False))
model.add(Dropout(0.2))

model.add(Dense(100))
model.add(Dense(units=1))

model.add(Activation('relu'))
start = time.time()
model.compile(loss='mean_squared_error', optimizer='Adam')
model.summary()
len(model.layers)


history = model.fit(trainX, trainY, batch_size=64, epochs=100, validation_split=None, verbose=2)
print('compilatiom time:', time.time()-start)

#get_ipython().run_line_magic('matplotlib', 'notebook')
fig1 = plt.figure(figsize=(10, 3),dpi=150)
plt.plot(history.history['loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()


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)

testScore = math.sqrt(mean_squared_error(testY, testPredict[:, 0]))
print('Train Sccore %.4f RMSE' %(testScore))
testScore = mean_absolute_error(testY, testPredict[:, 0])
print('Train Sccore %.4f MAE' %(testScore))
testScore = r2_score(testY, testPredict[:, 0])
print('Train Sccore %.4f R2' %(testScore))


trainPredictPlot = np.empty_like(dataset)
trainPredictPlot[:] = np.nan
trainPredictPlot = np.reshape(trainPredictPlot, (dataset.shape[0], 1))
trainPredictPlot[look_back: len(trainPredict)+look_back, :] = trainPredict


testPredictPlot = np.empty_like(dataset)
testPredictPlot[:] = np.nan
testPredictPlot = np.reshape(testPredictPlot, (dataset.shape[0], 1))
testPredictPlot[len(trainPredict)+(look_back*2)+1: len(dataset)-1, :] = testPredict


dataset = scaler.inverse_transform(dataset)


#get_ipython().run_line_magic('matplotlib', 'notebook')
plt.figure(figsize=(10, 4),dpi=150)
plt.title(' Prediction',size=15)
plt.plot(dataset, color='red', linewidth=1.5, linestyle="-",label='Actual')
plt.plot(testPredictPlot,  color='blue',linewidth=2,linestyle="--", label='Prediction')
plt.legend()
plt.ylabel('AQI',size=15)
plt.xlabel('time/day',size=15)
plt.show()


time_end = time.time()  
time_sum = time_end - time_start  
print(time_sum)

更多时间序列预测代码获取:时间序列预测算法全集合--深度学习

相关推荐
Loacnasfhia94 分钟前
卷烟爆珠气泡缺陷检测与分类_YOLO11创新点改进_C3k2与MLCA模块融合结构研究_1
人工智能·目标跟踪·分类
雨大王5124 分钟前
汽车制造数字化转型如何选择靠谱的产业链服务商?
人工智能
好物种草官7 分钟前
广州儿童眼镜店深度测评:6家主流品牌横向对比与选择策略
大数据·人工智能·经验分享
qwy71522925816310 分钟前
11-图像的缩放
人工智能·opencv·计算机视觉
工业相机定制与开发11 分钟前
云钥科技AI智能相机为图文印刷行业提供全流程检测解决方案
人工智能·数码相机
XX風18 分钟前
3.3 GMM (高斯混合模型)
人工智能·算法·机器学习
星爷AG I26 分钟前
9-24 视觉叙事(AGI基础理论)
前端·人工智能
量子-Alex26 分钟前
【大模型技术报告】ChatGLM大模型技术报告深度解读
人工智能
zy_destiny35 分钟前
【工业场景】用YOLOv26实现8种道路隐患检测
人工智能·深度学习·算法·yolo·机器学习·计算机视觉·目标跟踪
(; ̄ェ ̄)。39 分钟前
机器学习入门(二十)支持向量机SVM
人工智能·机器学习·支持向量机