2012-08-16 16 views
9

Przygotowuję program, który przewiduje wynik meczu piłkarskiego za pomocą encog. Stworzyłem sieć neuronową, wyszkoliłem ją z danymi z 90 dopasowań za pomocą metody treningu propagacji sprężystej. Mam oznaczone wyniki meczu jako 1 dla wygranej gospodarza, 0 dla remisu i -1 dla wygranej na wyjeździe.Program do przewidywania futbolu: Niespójne prognozy

Problem jest przewidywany. Czasami osiągam wskaźnik sukcesu na poziomie 50%, a innym razem osiągam zaledwie 33%. To tak, jak przy użyciu funkcji losowej. Zauważyłem, że prawie alwayst ma najbardziej przewidywalny wynik 1 (około 70%). Próbowałem zmienić liczbę ukrytych warstw, liczbę treningów, ale bez powodzenia, to wciąż oscyluje. Czy ktoś może mi pomóc lub pint mnie we właściwym kierunku, jeśli robię coś złego.

Oto kod sieci neuronowej. Otrzymuję dane treningowe i dane prognozy z bazy danych.

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

Szkolenie

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

} 

Przewidywanie

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.) Mam wprowadzanie danych do sieci neuronowej 1000. Obecnie testuje się więcej/mniej od rzeczy jeszcze lepsze.

2,3.) Mam 16 parametrów wejściowych. Składają się na to: Punkty drużyny gospodarzy, wygrane drużyny gospodarzy, remisy, porażki, wygrana gospodarzy, przegrana, remisy i forma (zdobyte punkty w ostatnich 5 meczach). Te same dane odnoszą się tylko do drużyny wyjazdowej, a nie do wygranej gospodarzy gospodarzy, remisów, przegranych z dala od wygranej drużyny, remisów, strat. Spróbuję z różnymi danymi treningowymi.

Odpowiedz

5

Trudno powiedzieć, co jest nie tak z uwagi na informacje, może być wiele przyczyn. Ale oto kilka potencjalnych rozwiązań.

1) Ile razy karmisz dane treningowe siecią neuronową? Zazwyczaj w danych treningowych trzeba wprowadzić wiele przebiegów, aby sieć się zbiegła. Jeden raz to za mało, szczególnie jeśli masz tylko 90 danych treningowych.

2) Ile parametrów wejściowych znajduje się w danych treningowych (i jakie one są)? Zazwyczaj musisz dostosować liczbę ukrytych węzłów warstw do liczby parametrów wejściowych. Nie ma na to twardych reguł, ale zwykle zaczynam od co najmniej dwukrotności liczby ukrytych węzłów warstw jako parametrów wejściowych.

3) Czy próbowałeś wybierać różne dane testowe? Zakładam, że twoje dane treningowe i testowe są inne. Może być coś nie tak z wybranymi danymi testowymi, ponieważ w ogóle nie pasują one do danych treningowych. Może być również całkowicie możliwe, że niemożliwe jest uzyskanie wiarygodnego oszacowania na podstawie twoich metod. Twoje parametry wejściowe mogą być zupełnie niewystarczające, aby przewidzieć, kto wygra dany mecz. To jest śmieci, śmieci, koncepcja.

+0

Dziękuję za odpowiedź. Część o liczbie ukrytych węzłów pomogła dużo, ponieważ teraz dostaję prognozy, które są znacznie bardziej realistyczne niż wtedy, gdy min. 80% przewidywań wynosiło 1 lub 0. Najpierw zaktualizuję pierwszy wpis odpowiedziami, sprawdź to i umieść komentarz ! – user1533166

+0

Mam ten sam problem za pomocą Encog. Wszelkie aktualizacje na ten temat? –

+0

Kiedy mówisz "będziesz musiał wprowadzić wiele przebiegów w danych treningowych, aby sieć się zbiegła", co masz na myśli? Kiedy szkolę swoje dane, przechodzę przez nie przez 'do {train.Iteration()} while (train.Error> 0.001);'. Czy to nie wystarczy? Uwaga: Moje dane nie są zbieżne, współczynnik błędów wynosi 92%, a mam tylko około 200 wierszy danych. – user1477388

Powiązane problemy