训练LSTM神经网络预测pybrain,python中的时间序列

时间:2014-07-06 15:43:13

标签: neural-network sequence prediction forecasting pybrain

我有一个使用PyBrain创建的神经网络,旨在预测时间序列。

我正在使用顺序数据集函数,并尝试使用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必须支持迭代

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

Event Sequences, Recurrent Neural Networks, PyBrain

在这个伟大的网站上的第一个问题,任何帮助表示赞赏

2 个答案:

答案 0 :(得分:0)

#Creating lookback window and target datain = priceList[:5] dataout = priceList[6]

不是专家。但似乎您的数据是长度= 6的列表,而数据输出则不是。

答案 1 :(得分:0)

我猜测TypeError就是这么说的。 priceList[:5]是一个列表,因此是可迭代的,priceList[6]是一个单独的元素。

你可能想要像

这样的东西
datain = priceList[:5] 
dataout = priceList[6:6]

这将使dataout成为包含单个元素的列表。