Ich habe versucht, die Spielprognose der J League auf der Grundlage früherer Daten zu erstellen 55% Chance, Gewinne, Verluste und Unentschieden vorherzusagen (Lerndaten 2573 Spiele, Testdaten 200 Spiele)
Wir sind nicht verantwortlich für die Verwendung des Inhalts des Artikels
Google prognostizierte für 2014 Weltcup-Siege und -Verluste "Wenn Google Big Data analysiert und die Weltmeisterschaft vorhersagt, wird es in allen Spielen das Viertelfinale erreichen. Wird es enden? " Als ich mir diesen Artikel ansah, beschloss ich, eine Vorhersage für die J League zu machen. Was mich an Googles Bemühungen interessiert hat Informationen zu allen Spieler- und Ballpositionen können den Fußballdaten OPTA entnommen werden. (Ich habe nach Daten gesucht, aber es scheint unvernünftig, sie einzeln abzurufen.) Zum Beispiel das ganze Spiel mit der Monte-Carlo-Methode simulieren.
Es gibt einige Websites über die J League. Ich habe die Daten leise gesammelt, um keine Unannehmlichkeiten zu verursachen.
(Die Gesamtzahl der Lernvariablen beträgt 754)
Beschriftet mit 0,1,2 für Gewinnen, Verlieren oder Unentschieden
Dieses Mal habe ich zum ersten Mal ernsthaft mit beautifulsoup gearbeitet, um Daten aus HTML zu extrahieren. Es ist zu bequem. Ich hätte es früher benutzen sollen. Sie sollten auch auf 0 zu 1 normalisieren. Mit np.max können Sie dies problemlos in etwa 2 Zeilen tun.
Ziemlich gewöhnlicher Scicit-Lerncode
import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import classification_report
from sklearn.svm import SVC
all_input_np = np.load('input.npy')
all_label_np = np.load('label.npy')
train_input = all_input_np[:-200]
test_input = all_input_np[-200:]
train_result = all_label_np[:-200]
test_result = all_label_np[-200:]
tuned_parameters = [{'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]
clf = GridSearchCV(SVC(), tuned_parameters, n_jobs=4, scoring="accuracy")
print(">>>START")
clf.fit(train_input, train_result)
print("Best parameters set found on development set: %s" % clf.best_params_)
print("Grid scores on development set:")
means = clf.cv_results_['mean_test_score']
stds = clf.cv_results_['std_test_score']
for mean, std, params in zip(means, stds, clf.cv_results_['params']):
print("%0.3f (+/-%0.03f) for %r" % (mean, std * 2, params))
print("The scores are computed on the full evaluation set.")
y_true, y_pred = test_result, clf.predict(test_input)
print(classification_report(y_true, y_pred))
print(accuracy_score(y_true, y_pred))
precision recall f1-score support
0.0 0.61 0.56 0.59 87
1.0 0.51 0.78 0.62 78
2.0 0.00 0.00 0.00 35
avg / total 0.46 0.55 0.50 200
0.55
55% ist die richtige Antwortrate Was das Label betrifft, verliert 0, 1 gewinnt und 2 zieht.
Hier ist ein Einfallsreichtum. Es scheint, dass ungefähr 20% aller Fußballspiele gezogen werden Um die insgesamt korrekte Antwortrate zu erhöhen, sagt das Lernen daher voraus, dass die Auslosung gewinnen wird. Ich habe versucht, nur Gewinne und Verluste vorherzusagen. (Umgekehrt ist die Auslosung nicht vorhersehbar)
Die richtige Rücklaufquote lag bei ca. 50% Mehrschichtiges Perceptron (3 Schichten, Elu, Abbrecherquote 0,5)
Schließlich ist es schwierig, nur auf begrenzte Daten zuzugreifen. Mit den diesmal gesammelten Daten denke ich, dass selbst wenn das mathematische Modell bis an die Grenze angehoben wird, die korrekte Antwortrate höchstens etwa 60% beträgt. Ich denke, es ist eine gute Idee für eine ganze Spielsimulation wie Google Es ist skeptisch, dass Fußball nur durch die Erfolgsquote des Passes und andere Zahlen reproduziert werden kann. Schließlich haben die Menschen durch das Verknüpfen der Daten eines Bildes des Spiels dies nicht bemerkt, oder Ein Punkt ist, dass es möglich sein kann, Analyseverarbeitungen durchzuführen, die Menschen nicht ertragen können. Das andere ist, wenn wir den Prozess der Datenanalyse visualisieren können Ich denke, wir können die Richtung der Verbesserung des Modells und der Eingabedaten erkennen.
Recommended Posts