ruby - 在 Ruby 中训练神经网络

标签 ruby artificial-intelligence neural-network

在神经网络方面,我完全是个初学者。我整天都在与 ruby​​-fann 和 ai4r 搏斗,不幸的是我没有任何东西可以展示,所以我想我会来到 Stack Overflow 并询问这里的知识渊博的人。

我有一组样本——每天都有一个数据点,但它们不符合我能够找出的任何明确模式(我尝试了几次回归)。不过,我认为看看是否有任何方法可以仅从日期预测 future 的数据会很好,而且我认为神经网络将是生成希望表达这种关系的函数的好方法.

日期是 DateTime 对象,数据点是十进制数,例如 7.68。我一直在将 DateTime 对象转换为 float ,然后除以 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]) # Always something random, and always the same number no matter what date I request it for

对于 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

我觉得我在这里缺少一些非常基本的东西。我知道这是一个相当开放的问题,但如果有人能帮助我弄清楚我是如何错误地教授我的神经网络,我将不胜感激!

最佳答案

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

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

然后您可以教神经网络生成当天的值作为函数 例如,前十天值(value)的窗口;你也可以保留日期 参数作为 [0, 1] 之间的真实输入比例,因为您认为它具有显着影响 当天的值(value)。

关于ruby - 在 Ruby 中训练神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9746062/

相关文章:

ruby - 使用 rvmsudo 自定义环境变量

artificial-intelligence - 这个分类结果可以接受吗?

C# - 如何改进行为树中的方法覆盖性能?

python - TensorFlow DCGAN 模型 : stability and convergence problems

ruby-on-rails - 在最后一次出现字符时拆分字符串

Ruby,删除 super 数组

ruby-on-rails - 为什么 `a.is_a? Array && !a.empty?` 引发 NoMethodError?

algorithm - 关于带有 alpha beta 修剪的随机性和 minmax 算法

c++ - 简单人工神经网络的问题——添加

python - 如何在我自己的数据集图像上测试 mnist