2012-08-16 15 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 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.予測

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

} 

)私は物事が良くなったので、現在より/以下でテストニューラルネットワーク1000にデータを供給しています。

2,3。)16個の入力パラメータがあります。ホームチームのポイント、ホームチームのホームの勝利、ドロー、ロス、ホームチームの合計ウォン、ロスト、ドロー、フォーム(過去5試合のポイント獲得)で構成されます。同じデータはホームチームの勝利、引き分け、損失の代わりに離れたチームのためだけに行く 離れたチーム離れた勝利、引き分け、損失が使用されます。私は別のトレーニングデータを試してみます。

答えて

5

情報が与えられて間違っているとは言い難いですが、複数の理由が考えられます。しかしここにいくつかの潜在的な解決策があります。

1)トレーニングデータをニューラルネットワークに何回提供していますか?通常は、ネットワークを収束させるためにトレーニングデータに複数のパスを入力する必要があります。特に90のトレーニングデータしかない場合は、1回では不十分です。

2)トレーニングデータに入力されている入力パラメータの数は何ですか?通常、隠れ層ノードの数を入力パラメータの数に合わせる必要があります。これに厳しいルールはありませんが、通常、入力パラメータとして隠れ層ノードの数の少なくとも2倍から始めます。

3)異なるテストデータを選択しましたか?私はあなたの訓練とテストのデータが異なると仮定しています。トレーニングデータとまったくマッチしないため、選択したテストデータに問題がある可能性があります。また、あなたの方法から信頼できる推定値を得ることは不可能である可能性もあります。あなたの入力パラメータは、どのマッチに勝つのかを予測するには完全に不十分かもしれません。これは、ごみの中のごみです。

+0

ありがとうございました。隠されたノードの数については、80%予測の最小値が1または0の前にはるかに現実的な予測が得られたので、多くの助けになりました。最初の投稿を回答で更新します。チェックアウトしてコメントを追加してください! – user1533166

+0

私はEncogを使用して同じ問題を抱えています。これに関する更新はありますか? –

+0

「ネットワークを収束させるためにトレーニングデータに複数のパスを入力する必要があります」と言いますと、どういう意味ですか?私のデータを訓練するとき、私は 'do {train.Iteration()} while(train.Error> 0.001);でそれを通します。これで足りないの?注:私のデータは収束しておらず、エラー率は92%です。データは約200行しかありません。 – user1477388