Sto facendo un programma che prevede l'esito di una partita di calcio usando l'encog. Ho creato una rete neurale, addestrandola con i dati di 90 partite con un metodo di addestramento di propagazione resiliente. Ho segnato i risultati della partita come 1 per la vittoria in casa, 0 per l'estrazione e -1 per la vittoria in trasferta.Encog del programma di previsione del calcio: previsioni incoerenti
Il problema è nella previsione. A volte ho un tasso di successo del 50% e altre volte ho un minimo del 33%. È come usare la funzione casuale. Quello che ho notato è che quasi sempre il risultato più previsto è 1 (circa il 70%). Ho provato a cambiare il numero di livelli nascosti, il numero di allenamenti, ma senza fortuna, è ancora in oscillazione. Qualcuno può aiutarmi o mettermi nella giusta direzione se sto facendo qualcosa di sbagliato.
Questo è il codice per la rete neurale. Sto ottenendo dati di addestramento e dati di previsione dal database.
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();
}
Formazione
public void train(int epoch){
int i =0;
final Train train =new ResilientPropagation(network,trainingSet);
while(i<=epoch){
train.iteration();
i++;
}
}
Predire
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.) sto dando da mangiare i dati alla rete neurale 1000. Attualmente il test con più/meno dal momento che le cose sono migliorate.
2,3.) Ho 16 parametri di input. Consistono in: punti della squadra di casa, vittorie in casa della squadra di casa, pareggi, sconfitte, totale della squadra di casa vinta, perso, pareggio e forma (guadagno punti nelle ultime 5 partite). Lo stesso dato vale per la squadra ospite, invece di vittorie casalinghe, pareggi, sconfitte in trasferta le vittorie in trasferta, i pareggi, le perdite. Proverò con dati di allenamento diversi.
Grazie per la risposta. La parte relativa al numero di nodi nascosti ha aiutato molto da quando ora ottengo previsioni molto più realistiche rispetto a prima quando il minimo dell'80% delle previsioni era 1 o 0. Aggiornerò il primo post con le risposte, verificarlo e inserire un commento ! – user1533166
Sto avendo lo stesso problema usando Encog. Qualche aggiornamento su questo? –
Quando si dice "è necessario effettuare più passaggi che alimentano i dati di allenamento per far convergere la rete", cosa intendi? Quando alleno i miei dati, lo passo attraverso 'do {treno.Iterazione()} mentre (treno.Errore> 0.001);'. Non è abbastanza? Nota: i miei dati non convergono, il tasso di errore è del 92% e ho solo circa 200 righe di dati. – user1477388