Neural network 用pybrain,python训练LSTM神经网络预测时间序列

Neural network 用pybrain,python训练LSTM神经网络预测时间序列,neural-network,sequence,prediction,forecasting,pybrain,Neural Network,Sequence,Prediction,Forecasting,Pybrain,我用PyBrain创建了一个神经网络,用于预测时间序列 我正在使用sequential dataset函数,并尝试使用前5个值的滑动窗口来预测第6个值。我的一个问题是,我不知道如何通过将前5个值附加到输入,将第6个值作为输出来创建所需的数据集 我也不确定一旦网络被训练,如何准确地预测序列中的值 在下面发布我的代码: from pybrain.datasets import SupervisedDataSet from pybrain.datasets import SequentialDataS

我用PyBrain创建了一个神经网络,用于预测时间序列

我正在使用sequential dataset函数,并尝试使用前5个值的滑动窗口来预测第6个值。我的一个问题是,我不知道如何通过将前5个值附加到输入,将第6个值作为输出来创建所需的数据集

我也不确定一旦网络被训练,如何准确地预测序列中的值

在下面发布我的代码:

from pybrain.datasets import SupervisedDataSet
from pybrain.datasets import SequentialDataSet
from pybrain.tools.shortcuts import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.supervised.trainers import RPropMinusTrainer
from pylab import ion, ioff, figure, draw, contourf, clf, show, hold, plot
from pybrain.structure import RecurrentNetwork
from pybrain.structure import FeedForwardNetwork
from pybrain.structure import LinearLayer, SigmoidLayer, TanhLayer
from pybrain.structure import FullConnection
from pybrain.structure import LSTMLayer
from pybrain.structure import BiasUnit
from pybrain.rl.learners.valuebased import Q
import pybrain
import matplotlib as plt
import translate
import time
import pickle
import scipy as sp
import numpy as np
import pylab as pl
import itertools

#Opening data from database
data = translate.translate(3600)
time, price, volume = zip(*data)

#Creating data lists instead of tuples
timeList = []
priceList = []
volumeList = []

for record in time:
    timeList.append(record)

for record in price:
    priceList.append(record)

for record in volume:
    volumeList.append(record)

#Creating lookback window and target
datain = priceList[:5] 
dataout = priceList[6]
print datain
print dataout
#Creating the dataset
ds = SequentialDataSet(5, 1)

for x, y in itertools.izip(datain, dataout):
    ds.newSequence()
    ds.appendLinked(tuple(x), tuple(y))
    print (x, y)

print ds

#Building the network
n = RecurrentNetwork()

#Create the network modules
n.addInputModule(SigmoidLayer(5, name = 'in'))
n.addModule(LSTMLayer(100, name = 'LSTM'))
n.addModule(LSTMLayer(100, name = 'LSTM2'))
n.addOutputModule(SigmoidLayer(1, name = 'out'))

#Add the network connections
n.addConnection(FullConnection(n['in'], n['LSTM'], name = 'c_in_to_LSTM'))
n.addConnection(FullConnection(n['in'], n['LSTM2'], name = 'c_in_to_LSTM2'))
n.addConnection(FullConnection(n['LSTM'], n['out'], name = 'c_LSTM_to_out'))
n.addConnection(FullConnection(n['LSTM2'], n['out'], name = 'c_LSTM2_to_out'))

n.sortModules()
n.randomize()

#Creating the trainer
trainer = BackpropTrainer(n, ds)

#Training the network
#for i in range (1000):
#   print trainer.train()

#Make predictions

#Plotting the results
pl.plot(time, price)


pl.show()
上述代码给出: TypeError:izip参数#2必须支持迭代

我看到了下面链接的问题,但是我没有成功

在这个伟大的网站上的第一个问题,非常感谢您的帮助

#创建回望窗口和目标
数据输入=价格表[:5]
数据输出=价格表[6]


不是专家。但是,似乎您的数据输入是一个长度为6的列表,而数据输出不是。

我猜类型错误说明了一切。鉴于
priceList[:5]
是一个列表,因此是可编辑的,
priceList[6]
是一个元素

你可能想要像这样的东西

datain = priceList[:5] 
dataout = priceList[6:6]
这将使
dataout
成为一个包含单个元素的列表