Programa de previsão de futebol encog: Predições inconsistentes

9

Estou fazendo um programa que prevê o resultado de uma partida de futebol usando o encog. Eu criei uma rede neural, treinei com dados de 90 partidas com o método de treinamento de propagação resiliente. Marquei os resultados do jogo como 1 para vitória em casa, 0 para empate e -1 para vitória fora.

O problema está na previsão. Às vezes recebo uma taxa de sucesso de 50% e outras vezes chego a 33%. É como usar a função aleatória. O que eu notei é que quase sempre o resultado mais esperado é 1 (cerca de 70%). Eu tentei mudar o número de camadas escondidas, número de treinamento, mas sem sorte, ainda é oscilante. Alguém por favor pode me ajudar ou me colocar na direção certa se eu estiver fazendo algo errado.

Aqui está o código para a rede neural. Estou recebendo dados de treinamento e dados de previsão do banco de dados.

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

Treinamento

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

}

Prevendo

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) Eu estou alimentando os dados para a rede neural 1000. Atualmente testando com mais / menos desde que as coisas melhoraram.

2,3.) Eu tenho 16 parâmetros de entrada. Eles consistem de: Pontos da equipe da casa, vitórias da equipe da casa em casa, empates, derrotas, total da equipe da casa venceu, perdeu, empates e forma (ganho de pontos nos últimos 5 jogos). Os mesmos dados vão para a equipe visitante, ao invés de vitórias em casa, empates, derrotas fora de casa a equipe vence, empata, as perdas são usadas. Vou tentar com diferentes dados de treinamento.

    
por user1533166 16.08.2012 в 02:18
fonte

1 resposta

5

É difícil dizer o que está errado, dadas as informações, pode haver várias razões. Mas aqui estão algumas soluções possíveis.

1) Quantas vezes você está alimentando os dados de treinamento para a rede neural? Normalmente, você precisará fazer vários passes alimentando os dados de treinamento para fazer a rede convergir. Uma vez não é suficiente, especialmente se você tiver apenas 90 dados de treinamento.

2) Quantos parâmetros de entrada estão nos dados de treinamento (e quais são eles)? Normalmente, você precisa ajustar o número de nós de camadas ocultas ao número de parâmetros de entrada. Não há regras rígidas para isso, mas eu geralmente começo com pelo menos duas vezes o número de nós da camada oculta como parâmetros de entrada.

3) Você já tentou escolher dados de teste diferentes? Estou assumindo que seus dados de treinamento e teste são diferentes. Pode haver algo errado com os dados de teste que você selecionou, pois eles não correspondem aos dados de treinamento. Também pode ser inteiramente possível que seja impossível obter qualquer estimativa confiável de seus métodos. Seus parâmetros de entrada podem ser completamente insuficientes para prever quem ganha uma determinada partida. Este é o lixo dentro, lixo fora, conceito.

    
por umps 16.08.2012 / 16:03
fonte