2012-03-17 125 views
6

我是神经网络的初学者。我一整天都在和ruby-fann和ai4r搏斗,不幸的是我没有任何东西可以表现出来,所以我想我会进入Stack Overflow并询问这里的知识渊博的人。我有一组样本 - 每一天都有一个数据点,但它们不适合任何我能弄清楚的清晰模式(我尝试了几次回归)。尽管如此,我认为看看是否有任何方法可以预测未来的数据,并且我认为神经网络将是产生可能希望表达这种关系的函数的好方法。在Ruby中训练神经网络

日期是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都会返回一个常数,通常是样本范围中间的某个数。下面是红宝石范文芳代码:

@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 

我觉得我失去了真正的基本的东西在这里。我知道这是一个相当开放的问题,但如果有人能帮我弄清楚我是如何不正确地教导我的神经网络的,我真的很感激它!

+1

你的问题之一是你处理的方式太少。当我将所需的错误设置为0.0001时,我甚至无法正确预测上面提到的训练数据。你应该想出任何其他方式来编码你的输入和输出。给年,月和日分别输入可能是合理的吗?也许你可以使用1-of-c编码来实现这些功能(ftp://ftp.sas.com/pub/neural/FAQ2.html#A_cat)。 – alfa 2012-03-17 12:22:37

+0

我有同样的问题 - 你有没有想过这个想法?我们必须在神经网络上做错事,我不明白。 – Kevin 2015-06-28 06:42:42

回答

3

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

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

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