[PYTHON] Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen

Erstellen Sie ein Modell, das maschinelles Lernen verwendet, um die Position eines Agenten zu schätzen und das Human Wolf Intelligence-Turnier zu gewinnen

Ich nehme seit mehreren Jahren als Hobby am Human Wolf Intelligence Tournament teil, aber meine Noten sind nicht gut. Ich denke, es ist Zeit für unser Team, sich von der Regelbasis zu lösen und einen menschlichen Wolfs-Geheimdienstagenten zu schaffen, der maschinelles Lernen nutzt.

Als ersten Schritt werde ich versuchen, einen Klassifikator zu erstellen, um zu beurteilen, ob es sich um einen menschlichen Wolf handelt oder nicht, indem ich die Merkmalsmenge aus dem vergangenen Kampfprotokoll unter Bezugnahme auf "KI-Programmierung, die von der Intelligenz menschlicher Wölfe gelernt wurde" extrahiere. Wir haben das erstellte Modell jedoch noch nicht in den Geheimdienstagenten des menschlichen Wolfs integriert.

In Anbetracht der Leichtigkeit des Experimentierens haben wir uns entschieden, Java-Code (eine geringfügige Modifikation des offiziell verteilten Beispielcodes) für die Extraktion von Merkmalsmengen aus früheren Kampfprotokollen und Scikit-Learn zum Lernen und Schätzen zu verwenden. tat. Der Autor dieses Dokuments ist kein Experte für maschinelles Lernen, daher wäre ich Ihnen sehr dankbar, wenn Sie auf Fehler oder Missverständnisse hinweisen könnten.

Die Websites und Bücher, auf die ich mich bezog, sind am Ende des Satzes zusammengefasst.

Die diesmal ausgeführten Aufgaben sind wie folgt.

Spielprotokoll herunterladen

Laden Sie Ihr Lieblingsturnier aus dem "Past Tournament Log" unter Informationen für Entwickler des Human Wolf Intelligence Project herunter. Diesmal habe ich CEDEC 2017 heruntergeladen. * Wenn Sie es als Lerndaten verwenden, sollten Sie lieber die Ergebnisse von Wettbewerben verwenden, die die Entwickler ernsthaft optimiert haben, als kleine Wettbewerbe. Entpacke dieses Protokoll.

find cedec2017/ -type f -name "*.log.gz" -exec gunzip -d {} \;

Wenn Sie das Kampfprotokoll entpacken, finden Sie das nummerierte Verzeichnis und die darin enthaltene tatsächliche Protokolldatei (* .log). Das Human Wolf Intelligence-Turnier besteht aus 5 und 15 Spielern. In jedem Fall werden jedoch 5 Agenten / 15 Spieler repariert und 100 Schlachten ausgetragen, während ihre Positionen geändert werden. Die Protokolle in jedem Verzeichnis sind also die Kombination der teilnehmenden Agenten. Entspricht den gleichen 100 Schlachten. Dieses Mal werden wir versuchen, maschinelles Lernen unter Verwendung eines Teils von 100 Schlachten mit derselben Kombination von Agenten, die an der 15-Spieler-Schlacht teilnehmen, als Trainingsdaten und den Rest als Testdaten zu versuchen.

Um dieses Mal maschinelles Lernen mit kleinen Daten zu versuchen, erstellen Sie ein Verzeichnis mit dem Namen "cedec2017_small", kopieren Sie das Verzeichnis "004" in "cedec2017" und verwenden Sie es.

ls cedec2017_small/004
// 0300.log ... 0399.Bis zur Protokollierung werden 100 Dateien angezeigt

Fügen Sie eine Beschriftung aus dem Kampfprotokoll hinzu und extrahieren Sie die Feature-Menge

java -jar /{path_to_jar}/AIbook.jar book.LogdataToVector /{path_to_log}/cedec2017_small/ data/
import os
import subprocess
import sys

if __name__ == '__main__':
    if len(sys.argv) != 3:
        print('Usage: # python %s input_dir output_file' % argvs[0])
        quit()
    dir_name = sys.argv[1] # '/{path_to_data}/data/'
    files = os.listdir(dir_name)
    out_file = sys.argv[2] # '/{path_to_outfile}/new.log.txt'
    os.system('rm ' + out_file)
    for fin in files:
        files_with_path = dir_name + fin
        subprocess.call('cat ' + files_with_path + ' >> ' + out_file, shell=True)

――Die fertige libSVM-Datei sieht folgendermaßen aus ――Für die Bedeutung der einzelnen Funktionen ist es schnell, den Quellcode von "LogdataToVector" zu lesen.

$ head -5 mini.log.txt
1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0
1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0
1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0
1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0
-1 1:0 2:0 3:0 4:0 5:0 6:0 7:0 8:0 9:0 10:0 11:0

Lernen / Schätzen

--Installieren Sie scikit-learn

pip install numpy
pip install scipy
pip install -U scikit-learn
from sklearn.datasets import load_svmlight_file
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn.metrics import classification_report, accuracy_score

x,y = load_svmlight_file('/{path_to_log}/new.log.txt')
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)
clf = svm.SVC(cache_size = 2000)
clf.fit(x_train, y_train)
y_pred = clf.predict(x_test)
print accuracy_score(y_test, y_pred)
print classification_report(y_test, y_pred)

――Ich habe dieses Ergebnis erhalten ――Da die positiven und negativen Fälle voreingenommen sind, ist unklar, ob das Ergebnis der Genauigkeit 0,82 zum Nennwert empfangen werden kann. Ich war auch besorgt, dass der Rückruf, als der Agent ein menschlicher Wolf war, extrem schlecht war.

             precision    recall  f1-score   support

       -1.0       0.74      0.20      0.31       626
        1.0       0.84      0.98      0.90      2614

avg / total       0.82      0.83      0.79      3240

Was ich zurückgelassen habe

Referenz

Recommended Posts

Erstellen eines Positionsschätzungsmodells für den Intelligenzwettbewerb menschlicher Wölfe mithilfe von maschinellem Lernen
Erstellen eines Lernmodells mit MNIST
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
xgboost: Effektives Modell für maschinelles Lernen für Tabellendaten
Ich habe versucht, Tensorboard zu verwenden, ein Visualisierungstool für maschinelles Lernen
Inverse Analyse des maschinellen Lernmodells
Künstliche Intelligenz durch maschinelles Lernen mit TensorFlow aus Null Wissen schaffen - Einführung 1
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]
Finde die Daten des verrückten Turniers heraus
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung
(Lesen der Zeitung) Jukebox: Ein generatives Modell für Musik Prafulla (Musik-Sampling mit VQ-VAE)
Ich habe versucht, verschiedene Methoden für maschinelles Lernen (Vorhersagemodell) mithilfe von Scicit-Learn zu implementieren
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Eine Geschichte über einfaches maschinelles Lernen mit TensorFlow
[Maschinelles Lernen] Überwachtes Lernen mithilfe der Kernel-Dichteschätzung Teil 2
Erstellen einer interaktiven Anwendung mithilfe eines Themenmodells
Erstellt ein Narrbild für das Modell der Untertitelgenerierung
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Erstellen Sie ein Diagramm mit der Plot-Schaltfläche und dem Schieberegler
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
(Hinweis) Eine Geschichte zum Erstellen eines Frage- und Antwortsystems mit Spring Boot und maschinellem Lernen (SVM).
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Vermeiden Sie die Fallstricke bei der Verwendung eines Mac (für Linux-Benutzer?)
Erstellen Sie eine Umgebung für maschinelles Lernen mit Python unter MacOSX
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Erstellen Sie ein seq2seq-Modell mit dem Functional API Model Building & Learning von keras
Probieren Sie die ähnliche Suche von Image Search mit Python SDK [Search] aus.
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Ich habe versucht, ein Deep-Learning-Modell von TensorFlow mit TensorFlow Serving zu hosten
Ich habe ein VGG16-Modell mit TensorFlow gemacht (unterwegs)
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Erstellen Sie eine PyData-Umgebung für eine Lernsitzung zum maschinellen Lernen (Januar 2017).
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API