2012-08-16 1 views
9

Je fais un programme qui prédit le résultat d'un match de football en utilisant encog. J'ai créé un réseau de neurones, l'ai formé avec des données de 90 correspondances avec la méthode de formation de propagation résiliente. J'ai marqué des résultats de match comme 1 pour la victoire à la maison, 0 pour le tirage au sort et -1 pour la victoire à l'extérieur.Programme de prédiction du football encog: Prédictions incohérentes

Le problème est en prévision. Parfois, j'obtiens un taux de succès de 50% et d'autres fois je reçois aussi bas que 33%. C'est comme utiliser une fonction aléatoire. Ce que j'ai remarqué est que presque toujours le résultat le plus prédit est 1 (environ 70%). J'ai essayé de changer le nombre de couches cachées, nombre de formation mais sans chance, il oscille toujours. Peut n'importe qui s'il vous plaît aidez-moi ou pinte moi dans la bonne direction si je fais quelque chose de mal.

Voici le code du réseau de neurones. Je reçois des données d'entraînement et des données de prédiction de la base de données.

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(); 
} 

Formation

public void train(int epoch){ 
    int i =0; 
    final Train train =new ResilientPropagation(network,trainingSet); 
    while(i<=epoch){ 
     train.iteration(); 
     i++; 
    } 

} 

Prédire

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.) Je nourrissais les données réseau de neurones 1000. actuellement à l'essai avec plus/moins depuis les choses se sont améliorées.

2,3.) J'ai 16 paramètres d'entrée. Ils comprennent: les points de l'équipe locale, les victoires à domicile, les matchs nuls, les défaites, le total des équipes à domicile gagnées, perdues, nuls et formées (les points gagnent au cours des 5 derniers matchs). Mêmes données vont pour l'équipe à l'extérieur seulement au lieu de l'équipe à la maison victoires, tirages, pertes l'équipe à l'extérieur gagne, tire, les pertes sont utilisées. Je vais essayer avec différentes données d'entraînement.

Répondre

5

Il est difficile de dire ce qui ne va pas compte tenu des informations, il pourrait y avoir plusieurs raisons. Mais voici quelques solutions possibles.

1) Combien de fois transmettez-vous les données d'entraînement au réseau de neurones? Habituellement, vous devrez effectuer plusieurs passes dans les données d'apprentissage pour faire converger le réseau. Une fois n'est pas suffisant surtout si vous avez seulement 90 données d'entraînement.

2) Combien y a-t-il de paramètres d'entrée dans les données d'entraînement (et de quoi s'agit-il)? Généralement, vous devez ajuster le nombre de nœuds de calques cachés au nombre de paramètres d'entrée. Il n'y a pas de règles strictes à cela, mais je commence généralement avec au moins deux fois le nombre de nœuds de couche cachés en tant que paramètres d'entrée.

3) Avez-vous essayé de choisir différentes données de test? Je suppose que vos données d'entraînement et de test sont différentes. Il peut y avoir un problème avec les données de test que vous avez sélectionnées, car elles ne correspondent pas du tout aux données d'entraînement. Il pourrait également être tout à fait possible qu'il est impossible d'obtenir une estimation fiable de vos méthodes. Vos paramètres d'entrée peuvent être complètement insuffisants pour prédire qui gagne une partie donnée. C'est le garbage in, garbage out, concept.

+0

Merci de votre réponse. La partie sur le nombre de nœuds cachés a aidé beaucoup puisque je reçois maintenant des prédictions qui sont beaucoup plus réalistes qu'auparavant quand min de 80% prédictions étaient soit 1 ou 0. Je vais mettre à jour le premier post avec des réponses, s'il vous plaît vérifier et placer un commentaire ! – user1533166

+0

J'ai le même problème en utilisant Encog. Des mises à jour à ce sujet? –

+0

Quand vous dites "vous aurez besoin de faire des passes multiples alimentant les données d'entraînement pour faire converger le réseau", que voulez-vous dire? Quand j'entraîne mes données, je les passe via 'do {train.Iteration()} while (train.Error> 0.001);'. Est-ce que ce n'est pas suffisant? Remarque: Mes données ne convergent pas, le taux d'erreur est de 92% et je n'ai que 200 lignes de données. – user1477388

Questions connexes