我正在制作一个使用encog预测足球比赛结果的程序。我已经创建了一个神经网络,并用耐性传播训练方法对90个比赛的数据进行了培训。我将比赛结果标记为主队获胜的1,平局为0,客队获胜为-1。
问题在于预测。有时我会得到50%的成功率,而有时我会得到低至33%的成功率。这就像使用随机函数一样。我注意到几乎总是最常预测的结果是1(约70%)。我尝试改变隐藏层数和训练次数,但没有运气,仍然波动不定。如果我做错了什么,任何人都可以帮助我或指引我正确的方向吗?
以下是神经网络的代码。我从数据库获取训练数据和预测数据。
预测
问题在于预测。有时我会得到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场比赛中的积分增长。客队相同的数据与主队不同,只是用客队的客场胜利、平局、失利代替主队的主场胜利、平局、失利。我将尝试使用不同的训练数据。
do { train.Iteration() } while (train.Error > 0.001);
进行传递。这样做不够吗?注意:我的数据没有收敛,误差率为92%,而且我只有大约200行数据。 - user1477388