[PYTHON] Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique

Créez un modèle qui utilise l'apprentissage automatique pour estimer la position d'un agent afin de gagner le tournoi Human Wolf Intelligence

Je participe au tournoi Human Wolf Intelligence en tant que passe-temps depuis plusieurs années, mais mes notes ne sont pas bonnes. Je pense qu'il est temps pour notre équipe de rompre avec la base de règles et de créer un agent de renseignement humain-loup qui utilise l'apprentissage automatique.

Comme première étape pour cela, je vais essayer de faire un classificateur pour juger s'il s'agit d'un loup humain ou non en extrayant la quantité de caractéristiques du journal de bataille passé en référence à "la programmation d'IA apprise par l'intelligence humaine du loup". Cependant, nous n'avons pas encore incorporé le modèle créé dans l'agent de renseignement humain loup.

Compte tenu de la facilité d'expérimentation, nous avons décidé d'utiliser le code Java (une modification mineure de l'exemple de code officiellement distribué) pour l'extraction de la quantité de fonctionnalités à partir des journaux de bataille passés, et scikit-learn pour l'apprentissage et l'estimation. fait. L'auteur de ce document n'est pas un expert en apprentissage automatique, je vous serais donc très reconnaissant de bien vouloir signaler des erreurs ou des malentendus.

Les sites et livres auxquels j'ai fait référence sont résumés à la fin de la phrase.

Les tâches effectuées cette fois sont les suivantes.

--Télécharger le journal des matchs --Étiquette du journal de bataille et extraire le montant de la fonctionnalité (code Java presque officiel) --Apprentissage et estimation du problème de classification binaire de savoir s'il s'agit ou non d'un loup humain (Scikit-learn de Python)

Télécharger le journal des matchs

Téléchargez votre tournoi préféré à partir du "Journal des tournois passés" dans Information pour les développeurs de Human Wolf Intelligence Project. Cette fois, j'ai téléchargé CEDEC 2017. * Lorsque vous les utilisez comme données d'apprentissage, il est préférable d'utiliser les résultats de concours que les développeurs ont sérieusement réglés, plutôt que des concours à petite échelle. Décompressez ce journal.

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

Lorsque vous décompressez le journal de combat, vous trouverez le répertoire numéroté et le fichier journal réel (* .log) qu'il contient. Il y a 5 et 15 joueurs dans le tournoi Human Wolf Intelligence, mais dans chaque cas, 5 agents / 15 joueurs seront corrigés et 100 batailles auront lieu tout en changeant de position, donc les journaux dans chaque répertoire sont la combinaison des agents participants. Correspond aux mêmes 100 batailles. Cette fois, nous allons essayer l'apprentissage automatique en utilisant une partie de 100 batailles avec la même combinaison d'agents participant à la bataille à 15 joueurs que les données d'entraînement et le reste comme données de test.

Cette fois, pour essayer le machine learning avec de petites données, créez un répertoire appelé cedec2017_small, copiez le répertoire de 004 dans cedec2017 et utilisez-le.

ls cedec2017_small/004
// 0300.log ... 0399.100 fichiers sont affichés jusqu'à la journalisation

Ajoutez une étiquette du journal de bataille et extrayez le montant de la fonctionnalité

java -jar /{path_to_jar}/AIbook.jar book.LogdataToVector /{path_to_log}/cedec2017_small/ data/

--Combinez les 100 fichiers créés ci-dessus en un seul (peut ne pas être nécessaire)

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)

――Le fichier libSVM terminé ressemble à ceci

$ 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

Apprentissage / estimation

--Installez 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)

――J'ai ce résultat ―― Étant donné que les cas positifs et négatifs sont biaisés, il est difficile de savoir si le résultat de la précision 0,82 peut être reçu à sa valeur nominale. De plus, je craignais que le rappel lorsque l'agent était un loup humain soit extrêmement mauvais.

             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

Ce que j'ai laissé derrière

référence

Recommended Posts

Création d'un modèle d'estimation de position pour la compétition d'intelligence humaine de loup à l'aide de l'apprentissage automatique
Créer un modèle d'apprentissage à l'aide de MNIST
Créer un environnement de développement pour l'apprentissage automatique
Mémo de construction d'environnement d'apprentissage automatique par Python
xgboost: modèle d'apprentissage automatique efficace pour les données de table
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
Analyse inverse du modèle d'apprentissage automatique
Créer une intelligence artificielle par apprentissage automatique à l'aide de TensorFlow à partir de zéro connaissance - Introduction 1
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Découvrez les dates du tournoi fou
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
(Lecture du papier) Jukebox: A Generative Model for Music Prafulla (Échantillonnage de musique avec VQ-VAE)
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
Une histoire sur l'apprentissage automatique simple avec TensorFlow
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
Création d'une application interactive à l'aide d'un modèle de rubrique
Création d'une image trompeuse pour le modèle de génération de légende
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Créez un graphique à l'aide du bouton et du curseur de l'intrigue
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
(Remarque) Une histoire sur la création d'un système de questions et réponses à l'aide de Spring Boot et de l'apprentissage automatique (SVM).
L'histoire de la création d'un canal VIP dans le chatwork en interne
Éviter les pièges de l'utilisation d'un Mac (pour les utilisateurs Linux?)
Créer un environnement d'apprentissage automatique à l'aide de Python sur MacOSX
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Construire un modèle seq2seq en utilisant la création et l'apprentissage du modèle d'API fonctionnelle de Keras
Essayez une recherche similaire de recherche d'images à l'aide du SDK Python [Recherche]
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Créer un environnement PyData pour une session d'étude sur l'apprentissage automatique (janvier 2017)
L'histoire de la création d'une base de données à l'aide de l'API Google Analytics