当涉及神经网络时,我是一个彻头彻尾的新手。我一整天都在使用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
我感觉自己漏掉了一些非常基础的东西。虽然这是一个比较开放式的问题,但如果有人能帮助我弄清楚我如何不正确地教导我的神经网络,我将不胜感激!