2012-08-16 25 views
9

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.

risposta

5

È difficile dire cosa è sbagliato, date le informazioni, potrebbero esserci più motivi. Ma ecco alcune potenziali soluzioni.

1) Quante volte si stanno alimentando i dati di allenamento sulla rete neurale? Di solito è necessario effettuare più passate che alimentano i dati di allenamento per far convergere la rete. Una volta non è sufficiente soprattutto se hai solo 90 dati di allenamento.

2) Quanti parametri di input sono presenti nei dati di allenamento (e quali sono)? In genere è necessario regolare il numero di nodi di livelli nascosti sul numero di parametri di input. Non ci sono regole rigide per questo, ma in genere inizio con almeno il doppio del numero di nodi del livello nascosto come parametri di input.

3) Hai provato a scegliere dati di test diversi? Suppongo che i tuoi dati di addestramento e test siano diversi. Potrebbe esserci qualcosa di sbagliato con i dati di test che hai selezionato, in quanto non corrispondono affatto ai dati di allenamento. Potrebbe anche essere del tutto possibile che sia impossibile ottenere una stima affidabile dai tuoi metodi. I parametri di input potrebbero essere del tutto insufficienti per prevedere chi vince una data partita. Questa è la spazzatura, spazzatura, concetto.

+0

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

+0

Sto avendo lo stesso problema usando Encog. Qualche aggiornamento su questo? –

+0

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

Problemi correlati