3

我想使用神经网络根据 A 系列(我有 A 系列的完整历史)和未来 30 天内的事件 E 列表(E 是一个列表)来预测未来 30 天内的时间序列 B二进制单位)。知道 B 与 A 成线性比例,并且当第 i 天的事件发生时(E[i] = 1),它会触发 B 的峰值(比率未知)。我有包含(A,E,B)元组的训练数据。我已经用前馈网络进行了测试,但它的表现不是很好(不能预测正确的尖峰)。我应该使用循环网络吗?我该如何做那个 neurolab 或 pybrain ?谢谢。

您可以在这里查看一个示例。

编辑:代码有点复杂,所以我不能在这里粘贴。但是我的想法是我将 A + E 作为输入并预测 B,所以有 30 + 30 个输入单元,30 个输出单元,没有隐藏层(我已经测试了 1 个隐藏层,包括 30 个单元和 90 个单元,但它们没有t表现更好)。时间序列数据显示在上面的链接中。(红线是B,A是类似的形状,没有尖刺)。

A_list, B_list, E_list = input()
X, Y = [A + E for A, E in zip(A_list, E_list)], B_list
indim, outdim = len(X[0]), len(Y[0])
network = nl.net.newp([[-1, 1]]*indim, outdim, transf=nl.trans.LogSig())    

errors = network.train(norm_X(X),                                                        
                       norm_Y(Y),
                       epochs=4000, show=1000,
                       lr=0.01)

其中 norm_X(X) 将 X 缩放为 [-1,1],norm_Y 将 Y 缩放为 [0, 1]。

4

1 回答 1

3

尝试使用neurolab.net.newfftrain_bfgs

network = nl.net.newff([[-1, 1]]*indim, [10,outdim], transf=nl.trans.LogSig()) 
network.trainf = nl.train.train_bfgs
network.train(...)

使用循环网络,您可能会看到:http ://packages.python.org/neurolab/ex_newelm.html

于 2012-09-22T08:17:53.487 回答