[PYTHON] Sagen Sie die Anzahl der Titel voraus, die Sota Fujii 7. Dan durch Gradientenverstärkung gewonnen hat

Überblick

Es ist bereits drei Jahre her, dass Sota Fujii, ein genialer Spieler, sein professionelles Debüt als jüngster Spieler in der Geschichte gab und 29 Siege in Folge erzielte, was seit seinem Debüt beispiellos war und "Fujii-Fieber" in der Welt verursachte. Es wurde angenommen, dass es nur eine Frage der Zeit war, bis ich den Titel gewinnen konnte, aber letztes Jahr wurde ich mit nur einem weiteren Sieg bis zur Titelherausforderung besiegt, und bis April 2020 habe ich mich noch nicht für die Titelherausforderung entschieden. Andererseits hat sich in der Shogi-Welt in den letzten Jahren ein großer Wandel vollzogen. Die 'Hanyu-Generation', einschließlich Zenji Hanyu Kudan, der den Titel seit fast 30 Jahren innehat, wurde von jungen Menschen vorangetrieben, und mit der Entwicklung von Shogi-Software unter Verwendung von KI ist die Shogi-Welt zu einer Gruppe von Männern geworden, die den Titel gewonnen haben Die Situation ist nicht seltsam. Selbst mit Fujii 7th Dan ist es schwierig, immer zu gewinnen, und ich denke, der Titel ist hart. Daher habe ich die Anzahl der von Fujii Nanadan gewonnenen Titel anhand der Ergebnisse der Spieler vorhergesagt, die in den letzten drei Jahren im Titelkampf aufgetreten sind, und bewertet, wie nahe sie dem Titel waren. [^ 1] Der Code ist auf [GitHub] aufgeführt (https://github.com/tsekine2/Shogi-Title-Prediction).

Datensatz

Als Lerndaten von Japan Shogi Federation HP, ab 1. April 2020, ein oder mehrere Schwertkämpfer der B-Klasse, 2017 ~ (1) Alter, (2) Berufsalter, (3) Ranglisten-Kampfklasse [^ 2], (4) Drachenkönig-Kampfklasse [^ 3], (5) Thronliga [^ 4] im Titelkampf von 2019 Die Anzahl der Plätze, ⑥ King League [^ 5] regiert, ⑦ Siege, ⑧ Spiele, ⑨ allgemeine Spielgewinne [^ 6] werden zusammengefasst, und die Anzahl der Titelkampfauftritte und Titelakquisitionen werden in einer tsv-Datei zusammengefasst. Es gab 28 anwendbare Spieler. (Ursprünglich sollten alle Spieler als Ziel ausgewählt werden, aber da dies viel Zeit und Mühe kostet, werden wir eingrenzen.) Hier werden ③ bis ⑧ in den letzten 3 Jahren gezählt, und wenn es sich um einen Ranglistenkampf handelt, A-Note: 5 Punkte, B-Note 1 Gruppe: 4 Punkte, B Klasse 2 Gruppen: 3 Punkte, C Klasse 1 Gruppe: 2 Punkte, C Klasse 2 Gruppen 1 Punkt hinzugefügt, Ryuo Linie auch 1 Gruppe: 5 Punkte, 2 Gruppen: 4 Punkte, 3 Gruppen: 3 Punkte, 4 Gruppen: 2 Punkte, 5 Gruppen: 1 Punkt, 6 Gruppen: 0 Punkte werden hinzugefügt (maximal 15 Punkte) und die Anzahl der Einschreibungen * 1 Punkt (maximal 3 Punkte) wird der Thron- / Königsliga hinzugefügt.

Methode

Dieses Mal werden die Titel mithilfe der Gradientenverstärkung von lightGBM, die in der Kaggle-Welt häufig verwendet wird, unter Verwendung der Variablen ① bis ⑨ als Lernvariablen erfasst. Prognostizierte die Anzahl oder die Anzahl der Titelkampfauftritte. Informationen zur Gradientenverstärkung finden Sie unter hier. Das Ensemble-Lernen unter Verwendung eines Entscheidungsbaums wird durch die Verwendung der Gradientenabstiegsmethode charakterisiert, um den Fehler des vorherigen Baums zu verbessern. Zum Vergleich habe ich auch Vorhersagen unter Verwendung der linearen Regression und des neuronalen Netzwerks von scikit-learn gemacht.

Implementierung

Auch dieses Mal werden wir es mit Google Colaboratory implementieren.

Bibliotheksimport

Bibliotheksimport


import numpy as np
import pandas as pd
% matplotlib inline
import matplotlib.pyplot as plt
!pip install japanize-matplotlib
import japanize_matplotlib
import seaborn as sns
sns.set(font='IPAexGothic')
import lightgbm as lgb
from lightgbm import LGBMRegressor

Da matplotlib die japanische Notation nicht verwenden kann, importiere ich die Bibliothek. (Referenz)

Trainingsdaten

Trainingsdaten lesen


train_path = "/content/drive/My Drive/Colab Notebooks/Ergebnisse/Shogi-Titel/Gishi-Analyse(2017_2019) - train.tsv"
train = pd.read_csv(train_path, delimiter='\t')

Da die Daten diesmal meine eigene Arbeit sind, werde ich sie auf Google Drive ablegen, bereitstellen und lesen. Schauen wir uns die Dateninformationen an.

Informationen zu Trainingsdaten


train.head(len(train))

image.png

Die Reihenfolge basiert auf der Reihenfolge der Spitzenpositionen in der Japan Shogi Federation (Ryuo → Meister → Andere Titel → Qualifizierte Person für den Ewigen Titel → Rang (in der Reihenfolge der Schachman-Nummer)). Sie können denken, je jünger die Zahl, desto stärker ist sie. In Bezug auf die Anzahl der gewonnenen Titel stechen Ryuo Toyoshima und Master Watanabe sowie Triple Crown of Watanabe in den letzten Jahren hervor, gefolgt von Double Crown of Nagase und Kudan Hanyu. Lassen Sie uns die oben genannten Variablen für die Titelgewinner grafisch darstellen.

Visualisierung


train[train['get_titles'] > 0].plot.bar(x='name', figsize=(20,20), sharex=True, subplots=True, layout=(4,3))

image.png

Insbesondere haben die drei besten Spieler gemeinsam, dass sie zwischen 20 und 30 Jahre alt sind, mit Profis im Teenageralter sind und eine große Anzahl von Siegen und Spielen (Gewinnen) haben. Dies entspricht der Intuition.

Testdaten

Testdaten lesen


test_path = "/content/drive/My Drive/Colab Notebooks/Ergebnisse/Shogi-Titel/Gishi-Analyse(2017_2019) - test.tsv"
test = pd.read_csv(test_path, delimiter='\t')
test.head(len(test))

image.png

Schauen wir uns als nächstes die Testdaten an. Da es eine große Sache ist, habe ich neben Fujii Nanadan vier junge Spieler mitgebracht, von denen ich persönlich denke, dass sie in Zukunft vielversprechend sind.

Visualisierung


test.plot.bar(x='name', figsize=(15,10), sharex=True, subplots=True, layout=(3,3))

image.png

Daichi Sasaki 5. Dan ist auch erstaunlich, aber Sie können sehen, wie viel Sie aus der Anzahl der Spiele und der Anzahl der Siege von Fujii 7. Dan gewinnen.

Lernen

python


train_x = train.loc[:, 'age' : 'champions']
train_y = train['get_titles']
test_x = test.loc[:, "age" : "champions"]
params = {
    'learning_rate' : 0.01,
    'min_child_samples' : 0,
}
model = LGBMRegressor(**params)
model.fit(train_x, train_y)
y_pred = model.predict(test_x)

Ich werde tatsächlich lernen. Bestimmen Sie zunächst die Anzahl der gewonnenen Titel. Sie können die Hyperparameter festlegen, die in params an LGBMRegressor übergeben werden sollen. Da diesmal nur wenige Trainingsdaten vorhanden sind, sollte die Trainingsrate klein sein und min_child_samples (die Anzahl der im endgültigen Vorhersageknoten enthaltenen Samples) sollte minimiert werden.

Ergebnis

Zeichnen Sie die Ergebnisse.

Ergebnisanzeige


names = test["name"]
display(pd.DataFrame(y_pred, index=names, columns=['Anzahl der gewonnenen Titel']))

Es wird vorausgesagt, dass Fujii Nanadan für ungefähr 4 Begriffe gefangen wird. Dies ist bereits vergleichbar mit den Topspielern. Als nächstes war Masuda 6. Dan ungefähr 3. Amtszeit und Sasaki Daichi 5. Dan war 1.5. Amtszeit. Es stellt sich heraus, dass jeder so aktiv ist, dass vorausgesagt wird, dass er den Titel gewinnen wird. Außerdem können Sie die Variablen sehen, die in dem diesmal gelernten Modell hervorgehoben wurden.

Variable Bedeutung lernen


features = test.loc[:, 'age' : 'champions']
display(pd.DataFrame(model.feature_importances_, index=features.columns, columns=['importance']).sort_values('importance', ascending=False))

Die wichtigste Variable war "Alter". Dies ist überzeugend, denn je jünger der Shogi ist, desto vorteilhafter ist er und der jüngste Erfolg junger Shogi-Spieler. Als nächstes scheinen die Anzahl der Siege (je mehr Sie gewinnen, desto näher Sie dem Titel kommen), das Alter, in dem Sie in den Profi eintreten (im Allgemeinen jünger und professioneller), und die Anzahl der Spiele (je mehr Sie gewinnen, desto mehr Spiele Sie spielen) wichtig zu sein. Es ist unvermeidlich, dass Fujii Nanadan, der oben herausragende Zahlen hat, hoch bewertet wird. Auf der anderen Seite wird beurteilt, dass es nicht wichtig ist, in der Thronliga oder der Königsliga zu sein. Vielleicht liegt es daran, dass die Reihenfolge der Werte klein ist?

Vorhersage der Anzahl der Titelkämpfe

Vorhersage der Anzahl der Titelkämpfe


train_y2 = train['titles']
model.fit(train_x, train_y2)
y_pred2 = model.predict(test_x)
display(pd.DataFrame(y_pred2, index=names, columns=['Anzahl der Titel']))

Ich habe auch versucht vorherzusagen, indem ich das Ziel auf "Anzahl der Titelkampfauftritte" anstelle von "Anzahl der gewonnenen Titel" gesetzt habe. Sie sollten ungefähr das gleiche Ergebnis erzielen, es sollte jedoch größer sein als die Anzahl, die Sie verdient haben.

Interessanterweise stellten sich Fujii 7th Dan und Masuda 6th Dan an. Als nächstes waren Sasaki Daichi 5. Dan, Sasaki Yuki 7. Dan und Aoshima 5. Dan gleich. Im Vergleich zum vorherigen Ergebnis tritt Fujii Nanadan fünf Mal im Titelkampf auf und gewinnt vier davon (es ist beängstigend ...)

Variable Bedeutung lernen


display(pd.DataFrame(model.feature_importances_, index=features.columns, columns=['importance']).sort_values('importance', ascending=False))
image.png

Das Wichtigste ist diesmal das Zeitalter, in dem man Profi wird. War der Beitrag von Hanyu Kudan (15 Jahre alt mit einem Profi), der in vielen Titelkämpfen aufgetreten ist, effektiv?

Lineare Regression

Wie ist die lineare Regression mit der gradientenverstärkenden Regression zu vergleichen? Die lineare Regression passt zu einer linearen Funktion, wie in der folgenden Gleichung gezeigt.

y=b_0+b_1x_1+b_2x_2+\cdots+b_Nx_N \\
(b_0,b_1,\cdots,b_N \in \mathbb{R}, x_1, x_2,\cdots, x_N \in Lernvariablen)

Lineare Regression


from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(train_x, train_y)
lr_pred = reg.predict(test_x)

Fujii Nanadan war noch in der 4. Amtszeit, aber die Werte anderer Spieler änderten sich. Aoshima 5. Dan ist negativ geworden. Im Fall einer linearen Regression ist es eine gerade Linie, daher kann es negativ sein, aber es war überraschend, dass der Unterschied bisher war. Übrigens sind die Koeffizienten und Abschnitte dieses Modells wie folgt.

Koeffiziente Visualisierung


display(pd.DataFrame(reg.coef_, index=features.columns, columns=['coef']))
print('intercept = {}'.format(reg.intercept_))

Wenn der Koeffizient negativ ist, ist der vorhergesagte Wert umso höher, je niedriger der variable Wert ist. Sie können also sehen, dass das Alter und das Alter für den Eintritt in einen Profi negativ sind. Es ist jedoch verwirrend, dass die Punktzahl des Ranglistenkampfs und die Anzahl der Spiele negativ sind. In Bezug auf den Ranglistenkampf kann es sich um den Beitrag von Veteranen handeln, die nicht am Titel beteiligt sind, obwohl sie in der Klasse A oder B1 sind.

neurales Netzwerk

Lassen Sie uns abschließend eine Vorhersage mit einem neuronalen Netzwerk treffen.

neurales Netzwerk


from sklearn.neural_network import MLPRegressor
nn = MLPRegressor()
nn.fit(train_x, train_y)
nn_pred = nn.predict(test_x)
display(pd.DataFrame(nn_pred, index=names, columns=['Anzahl der gewonnenen Titel']))

Sasaki Yuuki 7. Dan war höher als Fujii 7. Dan. Das Ergebnis unterscheidet sich von der Intuition, wie Sasaki Daichi 5th Dan ganz unten. Ich frage mich, ob das neuronale Netzwerk für diese Aufgabe nützlich ist, da es nichtlineare Transformationen verwendet, um Vorhersagen zu treffen, aber zumindest standardmäßig hat es nicht so gut funktioniert wie andere Methoden.

Zusammenfassung

Dieses Mal habe ich versucht, die Anzahl der Titel, die Fujii 7th Dan gewonnen hat, anhand der Daten aus der neuen Ära von Shogi vorherzusagen. Obwohl Sie so aktiv sind, wurde der Titel noch nicht gewonnen. Wenn Sie jedoch die Ergebnisse mit dem Spieler vergleichen, der den Titel gewonnen hat, wird vorausgesagt, dass Sie in den letzten 3 Jahren etwa 4 Amtszeiten gewonnen haben, was nahe genug am Titel liegt. Das Ergebnis war. Darüber hinaus werden Samen, die diesmal nicht als Variablen betrachtet werden, jetzt in vielen Schlachten gespielt, und es scheint, dass die Wahrscheinlichkeit, in Zukunft den Titel zu gewinnen, steigt. Ich freue mich darauf als Shogi-Fan. Auch dieser Zeitleistungsvergleich (zum Beispiel der Vergleich der Quadratsumme der Differenz zwischen dem korrekten Antwortwert und dem vorhergesagten Wert) wird nicht durchgeführt, da alle Testdaten-Spieler 0 Titel gewonnen haben, sondern im Vergleich zur persönlichen Intuition die Gradientensteigerung Ich glaube, ich konnte das am besten vorhersagen. Wenn möglich, möchte ich mehr Daten sammeln und etwas erneut analysieren.

Verweise

[Alter mit einem professionellen Spieler](https://depalma01.com/2018/11/23/%E5%B0%86%E6%A3%8B%E3%81%AE%E6%A3%8B%E5%A3% AB% E3% 81% 8C% E3% 83% 97% E3% 83% AD% E5% 85% A5% E3% 82% 8A% E3% 81% 97% E3% 81% 9F% E5% B9% B4% E9% BD% A2% E3% 81% BE% E3% 81% A8% E3% 82% 81% E3% 80% 90% E6% 9C% 80% E5% B9% B4% E5% B0% 91% E3% 83% BB /) Kishibetsu-Alter Pandas-Grafikzeichnung [Wenn die lightGBM-Vorhersagen identisch sind](https://kiseno-log.com/2019/12/08/lightgbm%E3%81%A7%E3%81%AE%E4%BA%88%E6%B8% AC% E5% 80% A4% E3% 81% 8C% E3% 81% 99% E3% 81% B9% E3% 81% A6% E5% 90% 8C% E3% 81% 98% E5% 80% A4% E3% 81% AB% E3% 81% AA% E3% 82% 8B% E3% 81% A8% E3% 81% 8D% E3% 81% AE% E5% 8E% 9F% E5% 9B% A0% E3% 81% A8 /)

[^ 1]: Um es denjenigen kurz zu erklären, die nicht mit Shogi vertraut sind, gibt es derzeit acht Titel in der Shogi-Welt, und in jedem Kampf wird das ganze Jahr über ein Herausforderer sowie der Herausforderer und der aktuelle Titelverteidiger entschieden Spielt das Spiel und der Gewinner gewinnt den Titel. Es ist eine großartige Leistung, auch nur einen Titel zu holen.

[^ 2]: Der Rangkampf ist in 5 Klassen von A-Klasse bis C-Klasse-2-Gruppen unterteilt. Sie spielen das ganze Jahr über in der Klasse, die Oberschicht wird in die nächsthöhere Klasse befördert und die Unterschicht ist eine Unterschicht. Ich werde herabgestuft. Die höchste A-Klasse ist ein Beweis für den besten Schachspieler mit nur 10 Personen, und der Gewinner der A-Klasse fordert den Meister heraus (der traditionellste Titel in der Shogi-Welt). Fujii 7. Dan ist derzeit 2 Gruppen der B-Klasse, und der aktuelle Meister ist Masayuki Toyoshima.

[^ 3]: Die Ryuo-Schlacht ist in 6 Klassen von 1 Gruppe bis 6 Gruppen unterteilt, und in der Turnierschlacht in der Klasse wird die obere Klasse in die nächsthöhere Klasse befördert und der untere Spieler in die nächstniedrigere Klasse herabgestuft. .. Danach wird der Herausforderer von Ryuo (dem höchsten Titel in der Shogi-Welt) von den besten Spielern jeder Klasse bestimmt. Der große Unterschied zum Ranglistenkampf besteht darin, dass der Meister nur dann herausfordern kann, wenn er in der A-Klasse ist, während der Ryuo in jeder Klasse eine Chance hat. Fujii 7. Dan ist derzeit 3 Gruppen, und der aktuelle Ryuo ist Masayuki Toyoshima Ryuo.

[^ 4]: Die Thronliga ist in zwei Ligen unterteilt, die rote und die weiße Gruppe, und entscheidet den Herausforderer auf den Thron. Sie können nicht herausfordern, wenn Sie das strenge Qualifying nicht bestehen und in die Liga eintreten. Fujii Nanadan ist derzeit in der Thronliga eingeschrieben, und der aktuelle Thron ist Kimura Ichiki.

[^ 5]: Die King League ist eine Liga, die den Herausforderer zum König entscheidet. Sie können dies nur anfechten, wenn Sie das strenge Qualifying bestehen und in die Liga eintreten. Es wird gesagt, dass es eine der schwierigsten Ligen in der Schachwelt ist, weil es nur wenige Slots gibt. Fujii Nanadan ist derzeit in der King League eingeschrieben, und der derzeitige König ist Akira Watanabe.

[^ 6]: Neben den 8 Haupttiteln gibt es auch Wettbewerbe wie TV-Wettbewerbe, bei denen der Gewinner das ganze Jahr über ermittelt wird. Im Gegensatz zum Titelmatch können Sie selbst dann nicht gewinnen, wenn Sie das Turnier im folgenden Jahr gewinnen. Fujii Nanadan hat zum zweiten Mal in Folge das Asahi Cup Shogi Open Game gewonnen und auch das Rookie King-Spiel gewonnen, an dem nur junge Spieler teilnehmen.

Recommended Posts

Sagen Sie die Anzahl der Titel voraus, die Sota Fujii 7. Dan durch Gradientenverstärkung gewonnen hat
Minimieren Sie die Anzahl der Polierungen, indem Sie die Kombination optimieren
Sagen Sie die Anzahl der mit COVID-19 infizierten Personen mit Prophet voraus
Vorhersage des Vorhandenseins oder Nichtvorhandenseins von Untreue durch maschinelles Lernen