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.
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
Estoy teniendo el mismo problema al utilizar Encog. ¿Alguna actualización sobre esto? –
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