2013-03-10 83 views
4

我試圖預測給定的一組商品的銷售價格。我在pybrain中使用了RecurrentNetwork和BackpropTrainer。這是我的代碼,PyBrain預測錯誤

def nnet(train, target, valid): 

    ds = SupervisedDataSet(52-len(NU)+5, 1) 

    for i in range(len(train)): 
     ds.appendLinked(train[i], target[i]) 

    n = RecurrentNetwork() 

    n.addInputModule(LinearLayer(52-len(NU)+5, name='in')) 
    n.addModule(SigmoidLayer(3, name='hidden')) 
    n.addOutputModule(LinearLayer(1, name='out')) 

    n.addConnection(FullConnection(n['in'], n['hidden'], name='c1')) 
    n.addConnection(FullConnection(n['hidden'], n['out'], name='c2')) 
    n.addRecurrentConnection(FullConnection(n['hidden'], n['hidden'], name='c3')) 

    n.sortModules() 

    t = BackpropTrainer(n,learningrate=0.001,verbose=True) 
    t.trainOnDataset(ds, 20) 

    prediction = np.zeros((11573, 1), dtype = int) 
    for i in range(11573): 
     prediction[i] = n.activate(valid[i]) 

    return prediction 

這裏火車和目標,這是numpy的陣列,被用來訓練模式和52-LEN(NU)5是屬性數(特徵)。對於中的每個項目有效的,我們必須預測銷售價格。問題是,對於每個有效的商品,除第一個商品之外,我的銷售價格相同。我做錯了什麼?提前致謝。

陣列尺寸如下,

列車 - 401125,52-LEN(NU)5

目標 - 401125,1

有效 - 11573,52-LEN(NU)+ 5

+1

考慮到還沒有人回答,我建議在這裏問:https://github.com/pybrain/pybrain/issues – pablofiumara 2014-03-27 03:54:16

+2

我不知道PyBrain,但對於這類任務,我建議你看看在http://scikit-learn.org/stable/。 – blueSurfer 2014-04-04 15:57:48

+2

也許這是不相關的,但你有沒有嘗試過20多個時代訓練(你的學習率似乎有點低)?也許使用'trainUntilConvergence'方法? – agmangas 2014-04-09 16:10:25

回答

3

我不知道PyBrain的具體實施細則,但我看到兩種可能性。

1)反向傳播不與線性激活函數工作。根據PyBrain的實現細節,將「LinearLayer」的兩個實例更改爲「SigmoidLayer」可以解決此問題。

2)同迴歸神經網絡,則必須使用通過時間反向傳播(特別適合於RNNs的算法),而不是正常的反向傳播。根據PyBrain的實現細節,這個變體可能會有一個單獨的類。值得一試。