• 大小: 5KB
    文件类型: .py
    金币: 2
    下载: 1 次
    发布日期: 2021-05-13
  • 语言: Python
  • 标签: LSTM  一维预测  

资源简介

采用LSTM循环神经网络对时序数据进行预测,根据评价指标对测试集进行误差计算,具有较好的预测精度

资源截图

代码片段和文件信息

# -*- coding: utf-8 -*-
“““
Created on Fri Nov 17 11:09:14 2017

@author: Administrator

“““
import time
import numpy
from math import sqrt
from numpy import concatenate
from matplotlib import pyplot
from pandas import read_csv
from pandas import Dataframe
from pandas import concat
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import mean_squared_error
from keras.models import Sequential
from keras.layers import DenseActivationdropout
from keras.layers import LSTM


# convert series to supervised learning 将序列转换成监督学习问题
def series_to_supervised(data n_in=1 n_out=1 dropnan=True):
    n_vars = 1 if type(data) is list else data.shape[1]
    df = Dataframe(data)
    cols names = list() list()
    # input sequence (t-n ... t-1)
    for i in range(n_in 0 -1):
        cols.append(df.shift(i))
        names += [(‘var%d(t-%d)‘ % (j + 1 i)) for j in range(n_vars)]


    # forecast sequence (t t+1 ... t+n)
    for i in range(0 n_out):
        cols.append(df.shift(-i))
        if i == 0:
            names += [(‘var%d(t)‘ % (j + 1)) for j in range(n_vars)]
        else:
            names += [(‘var%d(t+%d)‘ % (j + 1 i)) for j in range(n_vars)]
    # put it all together
    agg = concat(cols axis=1)
    agg.columns = names
    # drop rows with NaN values
    if dropnan:
        agg.dropna(inplace=True)
    return agg


# load dataset
dataset = read_csv(‘tuoluoyi-A-kewen1-csv.csv‘ header=0 index_col=0)  #header 第一列为编号  index_col为取索引的参数
values = dataset.values
pyplot.figure(1)
pyplot.plot(values) 
pyplot.show()
# integer encode direction
#encoder = LabelEncoder()   #简单来说 LabelEncoder 是对不连续的数字或者文本进行编号
#values[: 4] = encoder.fit_transform(values[: 4])  #将第四列进行文本编码
# ensure all data is float
values = values.astype(‘float32‘)  #转化为浮点型
# normalize features
scaler = MinMaxScaler(feature_range=(0 1))    #归一化处理
scaled = scaler.fit_transform(values)
# frame as supervised learning
reframed = series_to_supervised(scaled 1 1)  #转化为监督学习  设计预测维数
# drop columns we don‘t want to predict
#reframed.drop(reframed.columns[[567]] axis=1 inplace=True) #reframed.drop 删除不预测的列
print(reframed.head())

# split into train and test sets
values = reframed.values
n_train_hours = 41000
train = values[:n_train_hours :]
test = values[n_train_hours: :]
# split into input and outputs
train_X train_y = train[: :-1]

评论

共有 条评论