足球预测程序encog: 预测结果不一致

9
我正在制作一个使用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场比赛中的积分增长。客队相同的数据与主队不同,只是用客队的客场胜利、平局、失利代替主队的主场胜利、平局、失利。我将尝试使用不同的训练数据。

1个回答

5
很难根据提供的信息确定问题出在哪里,可能有多个原因。但以下是一些潜在的解决方法。
1)您训练神经网络时输入了多少次训练数据?通常需要多次传递训练数据才能使网络收敛。如果您只有90个训练数据,那么一次是不够的。
2)训练数据中有多少个输入参数(以及它们是什么)?通常需要将隐藏层节点数调整为输入参数的数量。没有硬性规定,但我通常从隐藏层节点数至少是输入参数的两倍开始。
3)您是否尝试选择不同的测试数据?我假设您的训练和测试数据是不同的。您选择的测试数据可能有问题,例如它们与训练数据根本不匹配。也完全有可能从您的方法中无法得到任何可靠的估计值。您的输入参数可能完全不足以预测哪个队赢得任何比赛。这就是垃圾进垃圾出的概念。

感谢您的回答。有关隐藏节点数量的部分帮助了我很多,因为现在我的预测比以前更加真实,最少80%的预测结果不再只是1或0。我将更新第一篇帖子的答案,请查看并发表评论! - user1533166
我在使用Encog时遇到了同样的问题。有关此问题的任何更新吗? - Kevin Parker
当您说“您需要多次传递训练数据才能使网络收敛”时,您的意思是什么?当我训练数据时,我通过do { train.Iteration() } while (train.Error > 0.001);进行传递。这样做不够吗?注意:我的数据没有收敛,误差率为92%,而且我只有大约200行数据。 - user1477388

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接