2012-08-16 11 views
9

Estoy haciendo un programa que predice el resultado de un partido de fútbol con el uso de encog. Creé una red neuronal, la entrené con datos de 90 coincidencias con un método de entrenamiento de propagación resistente. He marcado los resultados del partido como 1 para la victoria en casa, 0 para el sorteo y -1 para la victoria fuera.Codificación del programa de predicción de fútbol: predicciones inconsistentes

El problema está en la predicción. A veces obtengo una tasa de éxito del 50% y en otro momento alcanzo el 33%. Es como usar la función aleatoria. Lo que noté es que casi siempre el resultado más predicho es 1 (alrededor del 70%). He intentado cambiar el número de capas ocultas, el número de entrenamientos pero, sin suerte, sigue oscilando. ¿Puede alguien ayudarme o apresurarme en la dirección correcta si estoy haciendo algo mal?

Aquí está el código de la red neuronal. Estoy recibiendo datos de entrenamiento y datos de predicción de la base de datos.

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

Formación

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

} 

Predecir

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.) me la alimentación de los datos a la red neuronal 1000. Actualmente las pruebas con mayor/menor ya que las cosas se pusieron mejor.

2,3.) Tengo 16 parámetros de entrada. Consisten en: puntos del equipo local, victorias locales del equipo local, empates, derrotas, total del equipo local ganado, perdido, empates y forma (puntos ganados en los últimos 5 partidos). Los mismos datos corresponden al equipo visitante, en lugar de las victorias, los sorteos, las derrotas del equipo local fuera de casa, se usan victorias, empates, pérdidas. Lo intentaré con diferentes datos de entrenamiento.

Respuesta

5

Es difícil decir qué es lo que está mal dada la información, podría haber múltiples razones. Pero aquí hay algunas soluciones potenciales.

1) ¿Cuántas veces está alimentando los datos de entrenamiento a la red neuronal? Por lo general, deberá realizar varios pases alimentándose en los datos de entrenamiento para hacer que la red converja. Una vez no es suficiente, especialmente si solo tiene 90 datos de entrenamiento.

2) ¿Cuántos parámetros de entrada hay en los datos de entrenamiento (y cuáles son)? Normalmente, debe ajustar el número de nodos de capas ocultas a la cantidad de parámetros de entrada. No hay reglas duras para esto, pero normalmente empiezo con al menos el doble de nodos de capa oculta como parámetros de entrada.

3) ¿Ha intentado elegir diferentes datos de prueba? Supongo que sus datos de entrenamiento y prueba son diferentes. Puede haber algún problema con los datos de prueba que ha seleccionado, ya que no coinciden en absoluto con los datos de capacitación. También podría ser completamente posible que sea imposible obtener una estimación confiable de sus métodos. Sus parámetros de entrada pueden ser completamente insuficientes para predecir quién gana una partida determinada. Este es el concepto de basura, basura, concepto.

+0

Gracias por su respuesta. La parte sobre el número de nodos ocultos ayudó mucho porque ahora obtengo una predicción que es mucho más realista que antes, cuando el mínimo de 80% de las predicciones era 1 o 0. Actualizaré la primera publicación con respuestas, por favor compruébalo y pon un comentario ! – user1533166

+0

Estoy teniendo el mismo problema al utilizar Encog. ¿Alguna actualización sobre esto? –

+0

Cuando dice "necesitará hacer varias pasadas para alimentar los datos de entrenamiento para hacer que la red converja", ¿a qué se refiere? Cuando entreno mis datos, los paso a través de 'do {train.Iteration()} mientras (train.Error> 0.001);'. ¿No es esto suficiente? Nota: Mis datos no convergen, la tasa de error es del 92% y solo tengo unas 200 filas de datos. – user1477388

Cuestiones relacionadas