2012-08-16 32 views
9

我正在製作一個程序,使用encog預測足球比賽的結果。我創建了一個神經網絡,用彈性傳播訓練方法訓練了90個數據。主場比賽我的比賽成績爲1,平局爲0,客場勝利爲-1。足球預測程序encog:不一致的預測

問題在於預測。有時我獲得50%的成功率,其他時間我得到33%的低。這就像使用隨機函數。我注意到,幾乎最常見的預測結果是1(約70%)。我試圖改變隱藏層的數量,訓練的次數,但沒有運氣,它仍然是擺動的。任何人都可以幫助我,或者讓我進入正確的方向,如果我做錯了什麼。

這裏是神經網絡的代碼。我正在從數據庫中獲取訓練數據和預測數據。

Predictor(NeuralDataSet trainingData){ 
    trainingSet = trainingData; 
    network = new BasicNetwork(); 
    network.addLayer(new BasicLayer(16)); 
    network.addLayer(new BasicLayer(3)); 
    network.addLayer(new BasicLayer(1)); 
    network.getStructure().finalizeStructure(); 
    network.reset(); 
} 

培訓

public void train(int epoch){ 
    int i =0; 
    final Train train =new ResilientPropagation(network,trainingSet); 
    while(i<=epoch){ 
     train.iteration(); 
     i++; 
    } 

} 

預測

public void successRate(NeuralDataSet trainingData){ 
    int counter = 0; 
    int correct = 0; 
    int home=0; 
    int away=0; 
    int draw=0; 
    for(MLDataPair pair: trainingData) { 
     final MLData output = network.compute(pair.getInput()); 
     if(pair.getIdeal().getData(0)==Math.round(output.getData(0))) 
      correct++; 
     counter++; 
    } 
    System.out.println((double)correct/(double)counter); 
} 

1)我喂的數據神經網絡1000目前有更多/更少,因爲事情變得更好的測試。

2,3)我有16個輸入參數。他們包括:主隊得分,主隊主場贏球,平局,失球,主隊總勝數,輸球,平局和形式(最近5場比賽獲得積分)。同樣的數據僅供客場客隊客場取勝,主隊客場主勝,平局客場客場客場客場贏球,平局,失利。我會嘗試不同的訓練數據。

回答

5

給出信息很難說出了什麼問題,可能有多種原因。但這裏有一些潛在的解決方案。

1)您將訓練數據提供給神經網絡多少次?通常情況下,您需要在訓練數據中進行多次傳遞才能使網絡趨於一致。如果你只有90個訓練數據,一次是不夠的。

2)訓練數據中有多少個輸入參數(以及它們是什麼)?通常,您需要將隱藏層節點的數量調整爲輸入參數的數量。對此沒有硬性規定,但我通常從隱藏層節點的數量至少兩倍作爲輸入參數。

3)您是否嘗試過選擇不同的測試數據?我假設你的訓練和測試數據是不同的。您選擇的測試數據可能有問題,因爲它們與訓練數據根本不匹配。從您的方法中獲得可靠估計也是完全可能的。您的輸入參數可能完全不足以預測誰贏得了任何給定的比賽。這是垃圾,垃圾,概念。

+0

謝謝你的回答。關於隱藏節點數量的部分幫助很大,因爲我現在得到的預測遠比80%預測的最小值爲1或0時更現實。我將用答案更新第一篇文章,請查看並發表評論! – user1533166 2012-08-16 15:01:23

+0

我使用Encog遇到同樣的問題。對此有何更新? – 2012-10-16 19:49:56

+0

當你說「你需要多次通過培訓數據才能使網絡匯合」時,你是什麼意思?當我訓練我的數據時,我通過'do {train.Iteration()}傳遞它(train.Error> 0.001);'。這是不夠的?注意:我的數據沒有收斂,錯誤率爲92%,而我只有大約200行數據。 – user1477388 2014-02-12 16:16:27