使用Ruby训练神经网络

我对神经网络完全是个新手。我今天一直在与ruby-fann和ai4r这两个库搏斗,但不幸的是我没有任何成果,所以我想来Stack Overflow问问这里的专家们。

我有一组样本——每一天有一个数据点,但它们似乎不符合我能识别出的任何明显模式(我尝试了几种回归分析)。尽管如此,我认为如果能够预测未来数据仅凭日期将会非常有趣,我认为神经网络是一个生成能够表达这种关系的函数的好方法。

日期是DateTime对象,数据点是小数,例如7.68。我已经将DateTime对象转换为浮点数,然后除以10,000,000,000以得到0到1之间的数字,我还将小数除以1,000以同样得到0到1之间的数字。我有超过一千个样本…这里是一个简短摘录的样貌:

[  ["2012-03-15", "7.68"],  ["2012-03-14", "4.221"],  ["2012-03-13", "12.212"],  ["2012-03-12", "42.1"]]

转换后看起来像这样:

[  [0.13317696, 0.000768],  [0.13316832, 0.0004221],  [0.13315968, 0.0012212],  [0.13315104, 0.00421]]

我希望这种转换不是必要的,但这是题外话。问题是,当我运行ai4r和ruby-fann时,它们都返回一个常数,通常是样本范围中的中间值。这是ruby-fann的代码:

@fann = RubyFann::Standard.new(:num_inputs=>1, :hidden_neurons=>[3, 3], :num_outputs=>1)training_data = RubyFann::TrainData.new(:inputs => formatted_data.collect{|d| [d.first]}, :desired_outputs => formatted_data.collect{|d| [d.last]})@fann.train_on_data(training_data, 1000, 1, 0.0001)@fann.run([DateTime.now.to_f / 10000000000.0]) # 总是返回一个随机数,并且无论我请求什么日期,返回的数总是相同的

而对于ai4r:

@ai4r = Ai4r::NeuralNetwork::Backpropagation.new([1, 3, 3, 1])1000.times do  formatted_data.each do |data|    @ai4r.train(data.first, data.last)  endend@ai4r.eval([DateTime.now.to_f / 10000000000.0]) # 与上面不同,但似乎总是随机的,并且对于任何请求的日期都是相同的

我觉得我在这里错过了什么非常基本的东西。我知道这是一个相当开放的问题,但如果有人能帮助我弄清楚我如何错误地训练我的神经网络,我将非常感激!


回答:

alfa在评论中提出了一个很好的观点,可能使用神经网络的其他方式会更合适。

这取决于问题,但如果当天的值部分是前几天值的函数,将其视为时间序列可能会产生更好的结果。

然后,你可以训练神经网络生成当天的值作为一个窗口的函数,例如前十天的值;你也可以保留日期参数作为一个真实的输入,缩放到[0, 1]之间,因为你认为它对当天的值有显著影响。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注