Issam Laradji的工作是为我预测序列的序列,除了我的pybrain版本要求UnserpervisedDataSet对象有一个元组:
from pybrain.tools.shortcuts import buildNetworkfrom pybrain.supervised.trainers import BackpropTrainerfrom pybrain.datasets import SupervisedDataSet,UnsupervisedDataSetfrom pybrain.structure import LinearLayerds = SupervisedDataSet(21, 21)ds.addSample(map(int,'1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6'.split()),map(int,'1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6'.split()))ds.addSample(map(int,'1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6'.split()),map(int,'1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split()))net = buildNetwork(21, 20, 21, outclass=LinearLayer,bias=True, recurrent=True)trainer = BackpropTrainer(net, ds)trainer.trainEpochs(100)ts = UnsupervisedDataSet(21,)ts.addSample(map(int,'1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split()))[ int(round(i)) for i in net.activateonDataset(ts)[0]]
给出:
=> [1, 2, 5, 6, 2, 4, 5, 6, 1, 2, 5, 6, 7, 1, 4, 6, 1, 2, 2, 3, 6]
要预测较小的序列,只需将其训练为子序列或重叠序列(此处显示重叠)即可:
from pybrain.tools.shortcuts import buildNetworkfrom pybrain.supervised.trainers import BackpropTrainerfrom pybrain.datasets import SupervisedDataSet,UnsupervisedDataSetfrom pybrain.structure import LinearLayerds = SupervisedDataSet(10, 11)z = map(int,'1 2 4 6 2 3 4 5 1 3 5 6 7 1 4 7 1 2 3 5 6 1 2 5 6 2 4 4 5 1 2 5 6 7 1 4 6 1 2 3 3 6 1 3 5 7 2 4 6 7 1 3 5 6 7 1 4 6 1 2 2 3 7'.split())obsLen = 10predLen = 11for i in xrange(len(z)): if i+(obsLen-1)+predLen < len(z): ds.addSample([z[d] for d in range(i,i+obsLen)],[z[d] for d in range(i+1,i+1+predLen)])net = buildNetwork(10, 20, 11, outclass=LinearLayer,bias=True, recurrent=True)trainer = BackpropTrainer(net, ds)trainer.trainEpochs(100)ts = UnsupervisedDataSet(10,)ts.addSample(map(int,'1 3 5 7 2 4 6 7 1 3'.split()))[ int(round(i)) for i in net.activateonDataset(ts)[0]]
给出:
=> [3, 5, 6, 2, 4, 5, 6, 1, 2, 5, 6]
不太好…



