Bradley-Terry's Model Dies ist ein Modell für "Stärke". Einfach ausgedrückt ist das Konzept, dass jede "Stärke" aus den Ergebnissen des Spiels quantifiziert werden kann. Die folgenden Dokumente waren hilfreich. Weitere Informationen finden Sie hier. Quantitative Bewertungsmethode für "Stärke" und ihre Anwendung
Es gibt n Elemente (Teams und Einzelpersonen) und es wird eine Art Match gespielt. Das Match ist ein Match von einem Element zu einem Element und das Ergebnis ist nur ein Sieg oder eine Niederlage gegen ein Element. Die "Stärke" jedes Elements wird aus den Ergebnissen mehrerer Schlachten gemessen. Unter der Annahme, dass die Wahrscheinlichkeit, dass Element i Element j gewinnt, für alle Kombinationen Pij ist, Pij = πi / πi + πj (1) Führe πi ein. Der relationale Ausdruck von Gleichung (1) wird als Bradley-Terry (BT) -Modell bezeichnet. Im BT-Modell kann man sich vorstellen, dass πi die Stärke des Elements i darstellt.
Ich verweise auf die Vorlesungsinhalte in der Data Mining-Studiengruppe basierend auf statistischer Verarbeitung und maschinellem Lernen # 03, an der ich neulich teilgenommen habe. Hier ist eine Python-Implementierung von Bradley-Terrys Modell. (Die Zahl, die ws zugewiesen wurde, ist eine Liste der Gesamtzahl der Siege der 6 Se League-Teams im Jahr 2014, ausgenommen die Ergebnisse des Austauschspiels. Der Einfachheit halber wird die Auslosung mit 0,5 gezählt.) Das hier erhaltene Theta ist der numerische Wert der "Stärke" jedes Teams.
import numpy as np
theta = np.ones(6)/6.0 # \Theta-Anfangswert
t = np.zeros(6)
r = 24.0 #Anzahl der Übereinstimmungen
ws = np.array([66.5, 66.5, 66, 56.5, 55, 50.5]) #Gesamtzahl der Siege
for iloop in range(0, 100):
for i in range(0,6):
acc = 0 #Akku für insgesamt
for j in range(0,6):
if (j == i):
pass
else:
acc += r / (theta[i]+theta[j])
t[i] = ws[i]/acc
s = sum(t)
for i in range(0, 6):
theta[i] = t[i] / s
Mit Bezug auf das obige Bradley-Terry-Modell habe ich versucht, den Übergang der Se League über 5 Jahre mit matplotlib grafisch darzustellen.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import os
theta = np.ones(6) / 6.0
t = np.zeros(6)
r = 24.0
teams = [u"Riese", u"Hanshin", u"Hiroshima", u"Chunichi", u"Yokohama", u"Yakult"]
colors = ["#f27b00", "#ffff00", "#ff0000", "#002468", "#044a90", "#111c3c"]
scores = [[67.5, 68, 48, 68.5, 42.5, 65.5], [66, 61, 57, 66, 43.5, 66.5], [76.5, 51.5, 55.5, 69, 43, 64.5], [74, 62.5, 58.5, 57.5, 55, 51.5], [66.5, 66.5, 66, 56.5, 55, 50.5]]
years = ["2010", "2011", "2012", "2013", "2014"]
points = [[], [], [], [], [], []]
def reset():
global theta
theta = np.ones(6) / 6.0
def bradley_terry(ws):
for iloop in range(0, 100):
for i in range(0, 6):
acc = 0
for j in range(0, 6):
if i == j:
pass
else:
acc += r / (theta[i] + theta[j])
t[i] = ws[i] / acc
s = sum(t)
for i in range(0, 6):
theta[i] = t[i] / s
if __name__ == '__main__':
for score in scores:
reset()
bradley_terry(score)
for i in range(0, 6):
points[i].append(theta[i])
for i in range(0, 6):
data = np.loadtxt(points[i])
plt.plot(
data,
linestyle="-",
color=colors[i],
label=teams[i],
linewidth=2
)
plt.ylim(0, 0.5)
X = np.arange(len(years))
plt.xticks(X, years)
plt.tick_params(labelleft="off")
plt.xlabel("Year")
plt.ylabel("BradleyTerry Rate")
plt.title("Central League")
plt.grid(True)
plt.legend(loc="best")
plt.rcParams.update({"font.size": 20})
os.chdir("graph/")
plt.savefig("central.eps")
plt.show()
Es stellte sich heraus, dass es so etwas war. ・ Stabile Stärke der Riesen ・ Chunichi, Yakults Abhang ・ Hiroshima und Yokohama steigen auf Ich denke du kannst lesen ...
Wenn Sie dasselbe in der Pa League versuchen, sieht die Grafik wie folgt aus.
Verglichen mit der Grafik der Central League ist es charakteristisch, dass 6 gestrichelte Linien durcheinander sind. Sie können oft das "gemischte Pa" ausdrücken, das auftritt, wenn die AB-Klasse in den Jahren 2013 und 2014 vollständig ersetzt wird!
Recommended Posts