2012-03-17 143 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]之間的實際輸入比例,因爲您認爲它對當天的價值有顯着的影響 。