encog を使用してサッカーの試合結果を予測するプログラムを作成しています。ニューラル ネットワークを作成し、90 試合のデータを使用して回復力のある伝播トレーニング方法でトレーニングしました。試合の結果は、ホームでの勝利を 1、引き分けで 0、アウェイでの勝利を -1 としてマークしました。
問題は予測にあります。成功率が 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 試合で獲得したポイント) で構成されます。同じデータは、ホーム チームのホームの勝ち、引き分け、負けではなく、アウェイ チームのみに当てはまり、アウェイ チームのアウェイの勝ち、引き分け、負けが使用されます。さまざまなトレーニング データで試してみます。