use*_*166 9 java neural-network encog
我正在制作一个程序,使用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();
}
Run Code Online (Sandbox Code Playgroud)
训练
public void train(int epoch){
int i =0;
final Train train =new ResilientPropagation(network,trainingSet);
while(i<=epoch){
train.iteration();
i++;
}
}
Run Code Online (Sandbox Code Playgroud)
预测
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);
}
Run Code Online (Sandbox Code Playgroud)
1.)我将数据提供给神经网络1000.目前正在进行更多/更少的测试,因为事情变得更好.
2,3.)我有16个输入参数.他们包括:主队积分,主场主场胜利,平局,失利,主队总胜场,失利,平局和形式(最近5场比赛得分).相同的数据仅用于客场球队,而不是主队主场胜利,平局,失去球队客场胜利,平局,亏损被使用.我将尝试不同的训练数据.
鉴于信息很难说出现了什么问题,可能有多种原因.但这里有一些潜在的解决方案.
1)您将训练数据提供给神经网络的次数是多少?通常,您需要多次传递训练数据以使网络收敛.有一次是不够的,特别是如果你只有90个训练数据.
2)训练数据中有多少输入参数(以及它们是什么)?通常,您需要将隐藏层节点的数量调整为输入参数的数量.这没有硬性规则,但我通常以隐藏层节点数量的至少两倍作为输入参数开始.
3)您是否尝试过选择不同的测试数据?我假设你的训练和测试数据不同.您选择的测试数据可能有问题,因为它们完全不符合培训数据.完全有可能无法从您的方法中获得任何可靠的估计.您的输入参数可能完全不足以预测谁赢得任何给定的匹配.这是垃圾,垃圾,概念.
| 归档时间: |
|
| 查看次数: |
2494 次 |
| 最近记录: |