我正在制作一个使用 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 场比赛的得分)。相同的数据仅适用于客队,而不是使用主队主场胜、平、负客队客场胜、平、负。我将尝试使用不同的训练数据。