【发布时间】:2012-04-02 12:22:04
【问题描述】:
在神经网络方面,我完全是初学者。我整天都在和 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]) # 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
我觉得我在这里错过了一些非常基本的东西。我知道这是一个相当开放的问题,但如果有人能帮助我弄清楚我是如何不正确地教授我的神经网络的,我将不胜感激!
【问题讨论】:
-
您的问题之一是您处理的数字太小。当我将所需的错误设置为 0.0001 时,我什至无法正确预测您上面提到的训练数据。您应该考虑任何其他方式来编码您的输入和输出。单独输入年、月和日是否合理?也许您可以对这些功能中的任何一个使用 1-of-c 编码 (ftp.sas.com/pub/neural/FAQ2.html#A_cat)。
-
我遇到了同样的问题 - 你有没有搞清楚这个问题?我们一定是神经网络出了问题,我不明白..
标签: ruby artificial-intelligence neural-network