python神经网络训练股票,python-用于股票预测的PyBrain神经网络不会学习

我正在尝试编写一个可以预测一些数据的神经网络.因此,我将PyBrain用于python.我发现SupervisedDataset非常适合此任务.我提取了一些库存数据,并将其中的5个值用作输入,将六分之一作为目标.然后,我使用buildNetwork函数构建前馈网络,并使用BackpropTrainer对其进行了培训.

无论如何,错误不会减少.它停留在〜0.6,似乎在附近振荡.我试图调整势头和学习率,但没有帮助.我究竟做错了什么?

from pybrain.datasets import SupervisedDataSet

DS = SupervisedDataSet(5, 1)

DS.addSample((44.055, 44.54, 44.04, 43.975, 43.49), (42.04,))

DS.addSample((44.54, 44.04, 43.975, 43.49, 42.04), (42.6,))

DS.addSample((44.04, 43.975, 43.49, 42.04, 42.6), (42.46,))

DS.addSample((43.975, 43.49, 42.04, 42.6, 42.46), (41.405,))

DS.addSample((43.49, 42.04, 42.6, 42.46, 41.405), (42.385,))

DS.addSample((42.04, 42.6, 42.46, 41.405, 42.385), (42.655,))

DS.addSample((42.6, 42.46, 41.405, 42.385, 42.655), (41.53,))

DS.addSample((42.46, 41.405, 42.385, 42.655, 41.53), (40.09,))

DS.addSample((41.405, 42.385, 42.655, 41.53, 40.09), (39.8,))

DS.addSample((42.385, 42.655, 41.53, 40.09, 39.8), (40.2,))

DS.addSample((42.655, 41.53, 40.09, 39.8, 40.2), (39.915,))

DS.addSample((41.53, 40.09, 39.8, 40.2, 39.915), (40.21,))

DS.addSample((40.09, 39.8, 40.2, 39.915, 40.21), (40.34,))

DS.addSample((39.8, 40.2, 39.915, 40.21, 40.34), (41.195,))

DS.addSample((40.2, 39.915, 40.21, 40.34, 41.195), (41.595,))

DS.addSample((39.915, 40.21, 40.34, 41.195, 41.595), (41.975,))

DS.addSample((40.21, 40.34, 41.195, 41.595, 41.975), (42.045,))

DS.addSample((40.34, 41.195, 41.595, 41.975, 42.045), (40.13,))

DS.addSample((41.195, 41.595, 41.975, 42.045, 40.13), (38.99,))

DS.addSample((41.595, 41.975, 42.045, 40.13, 38.99), (39.81,))

DS.addSample((41.975, 42.045, 40.13, 38.99, 39.81), (40.23,))

DS.addSample((42.045, 40.13, 38.99, 39.81, 40.23), (40.47,))

DS.addSample((40.13, 38.99, 39.81, 40.23, 40.47), (40.45,))

DS.addSample((38.99, 39.81, 40.23, 40.47, 40.45), (40.01,))

DS.addSample((39.81, 40.23, 40.47, 40.45, 40.01), (40.23,))

DS.addSample((40.23, 40.47, 40.45, 40.01, 40.23), (40.2,))

DS.addSample((40.47, 40.45, 40.01, 40.23, 40.2), (41.605,))

DS.addSample((40.45, 40.01, 40.23, 40.2, 41.605), (42.1,))

DS.addSample((40.01, 40.23, 40.2, 41.605, 42.1), (42.135,))

DS.addSample((40.23, 40.2, 41.605, 42.1, 42.135), (41.95,))

DS.addSample((40.2, 41.605, 42.1, 42.135, 41.95), (41.145,))

DS.addSample((41.605, 42.1, 42.135, 41.95, 41.145), (40.635,))

DS.addSample((42.1, 42.135, 41.95, 41.145, 40.635), (41.25,))

DS.addSample((42.135, 41.95, 41.145, 40.635, 41.25), (41.19,))

DS.addSample((41.95, 41.145, 40.635, 41.25, 41.19), (42.065,))

DS.addSample((41.145, 40.635, 41.25, 41.19, 42.065), (42.025,))

DS.addSample((40.635, 41.25, 41.19, 42.065, 42.025), (42.09,))

DS.addSample((41.25, 41.19, 42.065, 42.025, 42.09), (41.79,))

DS.addSample((41.19, 42.065, 42.025, 42.09, 41.79), (43.11,))

from pybrain.tools.shortcuts import buildNetwork

FNN = buildNetwork(DS.indim, 15, DS.outdim, bias=True)

from pybrain.supervised.trainers import BackpropTrainer

TRAINER = BackpropTrainer(FNN, dataset=DS, learningrate = 0.005, \

momentum=0.1, verbose=True)

for i in range(1000):

TRAINER.train()

编辑:一些评论怀疑这些数据是否适合一般的神经网络.因此,我在MATLAB中执行了相同的网络,并且工作正常.经过11次训练后,误差小于0.002.

此外,我尝试使用来自PyBrain的SupervisedDataset,但这不能正常工作.我现在没主意了.

解决方法:

我找到了解决方案.原来库存数据必须先进行标准化.所以我写了这个函数:

def normalization(data, new_max, new_min):

old_max = 0

old_min = 0

# Finde altes Max- und Minimum

for i in range(len(data)):

if old_max < data[i]:

old_max = data[i]

elif old_min > data[i]:

old_min = data[i]

old_range = (old_max - old_min)

for i in range(len(data)):

if old_range == 0:

data[i] = new_min

else:

new_range = (new_max - new_min)

data[i] = (((data[i] - old_min) * new_range) / old_range) + new_min

我将数据缩放到0到1之间,然后最终确定-网络将最终学习.

标签:pybrain,python

来源: https://codeday.me/bug/20191121/2050451.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值