在Ruby中训练神经网络

Ver*_*cus 6 ruby artificial-intelligence neural-network

在神经网络方面,我是一个初学者.我整天都和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"]
]
Run Code Online (Sandbox Code Playgroud)

转换时看起来像这样:

[
  [0.13317696, 0.000768],
  [0.13316832, 0.0004221],
  [0.13315968, 0.0012212],
  [0.13315104, 0.00421]
]
Run Code Online (Sandbox Code Playgroud)

我有点希望这种转变不是必要的,但我离题了.问题是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]) # Always something random, and always the same number no matter what date I request it for
Run Code Online (Sandbox Code Playgroud)

对于ai4r:

@ai4r = Ai4r::NeuralNetwork::Backpropagation.new([1, 3, 3, 1])
1000.times do
  formatted_data.each do |data|
    @ai4r.train(data.first, data.last)
  end
end
@ai4r.eval([DateTime.now.to_f / 10000000000.0]) # A different result frmo above, but always seemingly random and the same for any requested date
Run Code Online (Sandbox Code Playgroud)

我觉得我在这里遗漏了一些非常基本的东西.我知道这是一个相当开放的问题,但如果有人能帮我弄清楚我是如何不正当地教我的神经网络的话,我真的很感激!

JB *_*ohn 3

alfa 在他的评论中有一个很好的观点,使用神经网络的替代方法可能更合适。

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

然后,您可以教神经网络根据前十天值的窗口函数生成当天的值;您还可以将日期参数保留为 [0, 1] 之间的实际输入比例,因为您认为它对当天的值有显着影响。