[PYTHON] À propos du contenu de développement de l'apprentissage automatique (exemple)

introduction

Écrivez le contenu de développement réel (*) du contenu écrit dans Dernier blog.

Important pour démarrer avec l'apprentissage automatique! !!

・ Ayez un objectif clair pour étudier!

Cela ne dure pas comme si j'étudiais.

・ Si vous voulez vraiment le faire, étudiez par vous-même

Même si vous demandez à une personne, cela sera fragmenté, vous penserez donc que vous avez pu le faire. De plus, même si je demande aux ingénieurs sur cette route, souvent je ne comprends même pas ce que je dis parce que c'est extrêmement difficile (rires). .. .. Même si une formule était expliquée par une nouvelle formule ... c'était comme!

(*) À propos de SIVA en cours de développement [facebook] https://www.facebook.com/AIkeiba/ [Twitter] https://twitter.com/Siva_keiba Je l'aime car il sera en direct de temps en temps! Suis-moi s'il te plait.

Puis au sujet principal!

La première étape de l'apprentissage automatique (marketing)

Lors du démarrage de l'apprentissage automatique pour la prédiction des courses de chevaux, nous avons d'abord rassemblé les informations cibles. Je ne comprenais pas du tout les courses de chevaux et je n'y étais pas intéressé, donc je ne les comprenais pas du tout, mais j'y ai fait référence parce qu'il y avait des informations sur le net que diverses personnes essayaient réellement.

http://stockedge.hatenablog.com/entry/2016/01/03/103428 http://www.mm-lab.jp/analysis/expect_the_arima_kinen_in_multiple_regression_analysis/

Collecte de données sur les courses de chevaux (collecte de données)

Quand j'ai demandé à diverses personnes sur Facebook, j'ai entendu dire que la météo, le sexe du cheval, l'âge du cheval et les informations sur les courses passées étaient nécessaires, j'ai donc décidé de les collecter.

Heureusement, j'ai trouvé une personne qui recueille des données, alors j'ai les données. Je vais le donner à git avec le programme pour que vous puissiez l'utiliser.

https://github.com/tsunaki00/horse_racing

Nettoyage, analyse et classification des informations

Je voulais classer les informations dans une certaine mesure, mais j'ai abandonné parce que j'étais un amateur de courses de chevaux. .. Par conséquent, les informations sur la course et les paramètres du cheval ont été maîtrisées et quantifiées dans le programme.

Création et expérimentation de modèles prédictifs

Préparez le programme suivant et créez un modèle

Les données préparées sont le CSV suivant (de JRA-VAN)

Nom de l'étiquette La description
date de l'événement yyyy-mm-dd
Hippodrome
Numéro de course
Nom de la course
cours saleté
Orbite En cas de saleté ou de gazon, «droite» pour une rotation dans le sens horaire, «gauche» pour une rotation antihoraire
distance [m]
État de Baba Ryo
Prix [Dix mille yens]
Nombre de têtes
Ordre d'arrivée
Numéro de cadre
Numéro de cheval
Nom du cheval
sexe
âge
Cavalier
temps [s]
Différence La différence avec le premier cheval,cou,
Ordre passant
Montée 3F Dernier 600m temps[s]
Quantité de répulsion [kg]
Poids du cheval [kg]
Augmentation Diminution Changement de poids du cheval par rapport à la course précédente[kg]
Populaire cote décroissante
Chances
Clignotant Clignotant(Bandeau)Si oui, "B"
Entraîneur
Commentaire de formation
Évaluation de la formation

Installation du package

  $ pip install numpy
  $ pip install sklearn

Programme de prédiction

#coding:utf-8
import csv

from sklearn.externals import joblib
from sklearn.ensemble import RandomForestClassifier

class Predict:
  def __init__ (self) :
    self.model = None
    self.horse_data = []  
    self.train_data = []  
    self.train_target = [] 
    #Cible de test
    self.test_row_no = -1 

    self.master = {
      1 : {
        "Fukushima": 0, "Ogura": 1, "Kyoto": 2, "Hakodate": 3,
        "Nakayama": 4, "Sapporo": 5, "Tokyo": 6,
        "Hanshin": 7, "Chukyo": 8, "Niigata": 9 
      },
      4 :  { "Shiba" : 0, "saleté" : 1, "Obstacle" : 2 },
      5 :  { "droite" : 0, "la gauche" : 1, "Shiba" : 2, "Ligne droite" : 3, "droite2周" : 4 },
      7 :  { "Mal" : 0,  "Lourd" : 1, "稍Lourd" : 2, "Bien" : 3 },
      14 : {"Masculin" : 0, "Femme" : 1, "Sen" : 2},
      29 : {"A" : 0, "B" : 1, "C" : 2, "D" : 3, "E" : 4, "nan" : -1 }
    }

  def train(self):
    hurdle_race_count = 0
    header = []
    label = []
    with open("data/jra_race_result.csv", "r") as f:
      reader = csv.reader(f)
      #Créer des données de prédiction avec des données hors échecs
      for idx, row in enumerate(reader):
        if idx == 0:
          for i, col in enumerate(row):
            header = row
          continue
        elif row[4] == 'Obstacle' :
          hurdle_race_count += 1
          continue
        horse = []
        parameter = []
        #Quantifier avec les données de base
        for i, col in enumerate(row):
          if i in {3, 13, 16, 18, 19, 26, 27, 28}:
            horse.append(col)
            continue
          elif i == 0 : 
            if self.test_row_no == -1 and col == '2016-09-17' :
              self.test_row_no = (idx - hurdle_race_count)
            parameter.append(col.replace('-',''))
          elif i == 10 : 
            label.append(header[i])
            horse.append(col)
            self.train_target.append(col)
          elif self.master.has_key(i) :
            if i == 1 :
              horse.append(col)
            label.append(header[i])
            parameter.append(self.master[i][col])
          else :
            if i in (2, 12) :
              horse.append(col)
            label.append(header[i])
            if col == ''  or col == ' - ': 
              col = -1
            parameter.append(float(col))
        self.horse_data.append(horse)
        self.train_data.append(parameter)
    
    #Créer un modèle d'apprentissage(L'algorithme est Random Forest)
    #Exemple de paramètre n_estimators=xx, max_features="auto", n_jobs=-1
    self.model = RandomForestClassifier()
    #Apprenez avec forme(9/Apprenez jusqu'à 17)
    self.model.fit(self.train_data[0 : self.test_row_no - 1], self.train_target[0 : self.test_row_no - 1])
    #Lors de la sérialisation d'un modèle
    # joblib.dump(model, 'model.pkl') 
    #Importance de l'identité (importance à la branche de Random Forest)
    for i, xi in enumerate(self.model.feature_importances_): 
      print '{0}\t{1:.1f}%'.format(label[i], xi * 100)

  def predict(self):
    for i, val in enumerate(self.train_data[self.test_row_no:]):
      #Prédire avec prédire
      predict = self.model.predict([val])[0]
      if int(predict) == 1 :
        result = "☓"
        if int(predict) == int(self.horse_data[i][3]) :
          result = "○"
        print '{0} {1}R {2} {3} {4}Ordre d'arrivée réel: {5}Arrivée{6}'.format(self.horse_data[i][0],
                                                             self.horse_data[i][1],
                                                             self.horse_data[i][2],
                                                             self.horse_data[i][4],
                                                             self.horse_data[i][5],
                                                             self.horse_data[i][3], result )

if __name__ == "__main__":
  predict = Predict()
  predict.train()
  predict.predict()

résultat

Ça ne frappe pas du tout (rires)

Nakayama 01R Sarah 3 ans non gagnée 14 Diap Pira Ordre d'arrivée réel:16 ☓
Nakayama 02R Sarah 3 ans non gagnée 1 Keiai Balance Ordre d'arrivée réel:1er ○
Nakayama 05R Sarah 3 ans non gagnée 16 Mieno Wonder Ordre d'arrivée réel:1er ○
Nakayama 05R Sarah 3 ans non gagnée 13 Belmure Ordre réel d'arrivée:12 ☓
Nakayama 06R Sarah 4 ans et moins de 5 millions de yens 14 Symbolis Wift Ordre d'arrivée réel:12 ☓
Nakayama 07R Sarah 4 ans et moins de 5 millions de yens 6 Symboli Sonne Ordre d'arrivée réel:12 ☓
Nakayama 08R Sarah 4 ans et moins de 10 millions de yens 13 Asakusa Marineba Ordre d'arrivée réel:11 ☓
Nakayama 09R Premiers piquets de lever de soleil 5 Prix d'adjudication Ordre d'arrivée réel:9 ☓
Nakayama 10R Junior Cup 14 Red Vivo Ordre d'arrivée réel:9 ☓
Nakayama 10R Junior Cup 11 Red Jive Ordre d'arrivée réel:10 ☓
Nakayama 11R Daily Sports Award Nakayama Gold Cup (GIII) 9 Justaway Ordre d'arrivée réel:3e ☓
Nakayama 11R Daily Sports Award Nakayama Gold Cup (GIII) 16 Ike Dragon Ordre d'arrivée réel:15 ☓
Nakayama 12R Sarah 4 ans et moins de 10 millions de yens 2 Omega Blue Hawaii Ordre d'arrivée réel:3e ☓
Kyoto 01R Sarah 3 ans non gagnée 8 Croix de Lorraine Ordre d'arrivée réel:3e ☓
Kyoto 01R Sarah 3 ans non gagnée 4 Denkou Showin Ordre d'arrivée réel:15 ☓
Kyoto 04R Sarah 4 ans et moins de 5 millions de yens 1 Mickey Chris S Ordre d'arrivée réel:8ème ☓
Kyoto 05R Sarah 3 ans non gagnée 13 Tanino Tuxedo Ordre d'arrivée réel:8ème ☓
Kyoto 06R Sarah 3 ans Shinma 11 Meishou Oniguma Ordre réel d'arrivée:8ème ☓
Kyoto 07R Sarah 4 ans et moins 5 millions de yens 5 Musashi occidental Ordre d'arrivée réel:8ème ☓
Kyoto 07R Sarah 4 ans et moins de 5 millions de yens 14 Soni Ordre réel d'arrivée:16 ☓
Kyoto 09R Fukujusou Special 12 Admire Dubai Ordre d'arrivée réel:2ème ☓
Kyoto 10R New Year Stakes 2 Taiki Percival Ordre d'arrivée réel:2ème ☓
Kyoto 11R Sports Nippon Award Kyoto Gold Cup (GIII) 11 Sound of Heart Ordre d'arrivée réel:4
Kyoto 12R Sarah 4 ans et moins de 10 millions de yens 2 Suzuka Jonburu Ordre d'arrivée réel:4
Nakayama 02R Sarah 3 ans non gagnée 9 Belmont Joey Ordre d'arrivée réel:7
Nakayama 03R Sarah 3 ans Shinma 8 Puissance au frappeur Ordre d'arrivée réel:7
Nakayama 05R Sarah 3 ans non gagnée 8 Ogonchacha Ordre d'arrivée réel:9 ☓
Nakayama 05R Sarah 3 ans non gagnée 9 Eaglemore Ordre d'arrivée réel:10 ☓
Nakayama 06R Sarah 3 ans Shinma 9 Macolon Ordre réel d'arrivée:8ème ☓
Nakayama 07R Sarah 4 ans et moins de 5 millions de yens 7 Torsen Airence Ordre d'arrivée réel:13 ☓
Nakayama 07R Sarah 4 ans et moins de 5 millions de yens 14 Cosmo dictat Ordre réel d'arrivée:14 ☓
Nakayama 08R Sarah 4 ans et moins de 10 millions de yens 4 Danon Schnaps Ordre réel d'arrivée:14 ☓
Nakayama 09R Kantake Award 12 Hikaru Pegasus Ordre d'arrivée réel:11 ☓
Nakayama 09R Kantake Award 4 Million Fresh Ordre d'arrivée réel:12 ☓
Nakayama 10R First Fuji Stakes 6 Stella Rossa Ordre d'arrivée réel:1er ○
Nakayama 10R First Fuji Stakes 2 Full Accelerator Ordre d'arrivée réel:2ème ☓
Nakayama 10R First Fuji Stakes 3 Maine Epona Ordre d'arrivée réel:11 ☓
Nakayama 11R January Stakes 5 Everest O Ordre réel d'arrivée:13 ☓
Nakayama 12R Sarah 4 ans et moins de 10 millions de yens 7 Cardinal symbolique Ordre d'arrivée réel:13 ☓
Kyoto 02R Sarah 3 ans non gagnée 6 Bamboo Baggio Ordre d'arrivée réel:14 ☓
Kyoto 03R Sarah 3 ans non gagnée 3 Road Crosite Ordre d'arrivée réel:13 ☓
Kyoto 05R Sarah 3 ans Shinma 7 Bright Idea Ordre d'arrivée réel:6 ☓
Kyoto 05R Sarah 3 ans Shinma 3 Unshackled Ordre d'arrivée réel:7
Kyoto 06R Sarah 3 ans 5 millions de yens ou moins 4 Makototan Hoiser Ordre d'arrivée réel:12 ☓
Kyoto 07R Sarah 4 ans et moins 5 millions de yens 9 Daisy Burrows Ordre réel d'arrivée:14 ☓
Kyoto 08R Sarah 4 ans et moins 10 millions de yens 14 Univers Nangoku Ordre d'arrivée réel:14 ☓
Kyoto 09R Hatsume Stakes 2 Takao Noboru Ordre d'arrivée réel:1er ○
Kyoto 09R Hatsume Stakes 7 Albaton Ordre d'arrivée réel:11 ☓
Kyoto 09R Hatsume Stakes 5 Mickey Ballard Ordre d'arrivée réel:12 ☓
Kyoto 10R Manyo Stakes 5 Fogetable Ordre d'arrivée réel:6 ☓
Kyoto 10R Manyo Stakes 4 Seika Presto Ordre d'arrivée réel:9 ☓
Kyoto 11R Daily Sports Award Shinzan Memorial (GIII) 16 À volonté Ordre réel d'arrivée:6 ☓

finalement

C'est tout pour aujourd'hui. Nous mettrons également à jour la méthode de réglage des paramètres et la méthode de normalisation des données à l'avenir.

(Bonus) Déclencheur pour le développement de SIVA

La raison de ce projet était que mon ami m'a contacté lors du test de traitement de l'information organisé à la mi-octobre en disant "J'ai peut-être échoué au test!"

J'ai donc décidé de prédire les questions d'examen de l'année prochaine pour l'apprentissage automatique, que je pensais apprendre depuis longtemps.

La bibliothèque utilisée pour le programme utilise scicit-learn, qui contient beaucoup d'informations. [Ce que j'ai fait] J'ai catégorisé les problèmes de FY2013 à FY2016 et prédit les catégories de problèmes qui apparaîtront l'année prochaine.

14642235_1785738458343919_3303819700484393142_n.jpg

Quand je l'ai touché pour la première fois, j'ai senti que la difficulté du programme était faible, mais j'étais perdu au moment de choisir un algorithme. (Je ne sais toujours pas ce qui est juste (rires)) J'ai trouvé des informations utiles, je vais donc les partager.

14721760_1785764201674678_6869920007789574956_n.jpg

Cependant, les résultats ne peuvent pas être vérifiés immédiatement par la prédiction du test national! !! !!

Je veux prédire les problèmes du test de traitement de l'information et le vérifier immédiatement, mais je ne connais pas le résultat car il n'y aura pas de test avant le printemps prochain ... Puisqu'il y avait un tel problème, j'ai décidé de proposer SIVA afin que je puisse obtenir des résultats immédiatement.

J'écrirai encore! SIVA sera en direct à tout moment, alors j'aime ça! Suis-moi s'il te plait. [facebook] https://www.facebook.com/AIkeiba/ [Twitter] https://twitter.com/Siva_keiba

Recommended Posts

À propos du contenu de développement de l'apprentissage automatique (exemple)
À propos des tests dans la mise en œuvre de modèles d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique du sport-Analyse de la J-League à titre d'exemple-②
À propos du prétraitement des données des systèmes utilisant l'apprentissage automatique
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
Résumé du flux de base de l'apprentissage automatique avec Python
Bilan du premier défi du machine learning avec Keras
Bases de l'apprentissage automatique (mémoire)
À propos de la matrice mixte d'apprentissage automatique
Importance des ensembles de données d'apprentissage automatique
À propos des composants de Luigi
À propos des fonctionnalités de Python
Simulation du contenu du portefeuille
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Le résultat de l'apprentissage automatique des ingénieurs Java avec Python www
Prédire la présence ou l'absence d'infidélité par l'apprentissage automatique
Comment augmenter le nombre d'images de jeux de données d'apprentissage automatique
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Comprendre le contenu du pipeline sklearn
À propos de la valeur de retour de pthread_mutex_init ()
Apprentissage automatique ③ Résumé de l'arbre de décision
À propos de la valeur de retour de l'histogramme.
À propos du type de base de Go
Voir le contenu de Kumantic Segumantion
À propos de la limite supérieure de threads-max
À propos du comportement de yield_per de SqlAlchemy
À propos de la taille des points dans matplotlib
À propos de la liste de base des bases de Python
Développement d'applications à l'aide d'Azure Machine Learning
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
[Apprentissage automatique] Vérifiez les performances du classificateur à l'aide de données de caractères manuscrites
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
J'ai vérifié le contenu du volume du docker
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
À propos de l'ordre d'apprentissage des langages de programmation (de débutant à intermédiaire) Partie 2
Enregistrez les étapes pour comprendre l'apprentissage automatique
Othello-De la troisième ligne de "Implementation Deep Learning" (3)
Notes d'apprentissage depuis le début de Python 1
A propos du comportement de enable_backprop de Chainer v2
À propos de l'environnement virtuel de Python version 3.7
Comment utiliser l'apprentissage automatique pour le travail? 02_Aperçu du projet de développement AI
Une histoire sur l'apprentissage automatique avec Kyasuket
20 sélections recommandées en 2020 de livres d'introduction à l'apprentissage automatique
Apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
Notes personnelles et liens sur l'apprentissage automatique ① (Machine learning)
A propos des arguments de la fonction setup de PyCaret
À propos de l'équation normale de la régression linéaire
Lire tout le contenu de proc / [pid]
[Apprentissage automatique] Liste des packages fréquemment utilisés
[Apprentissage automatique] Qu'est-ce que la norme LP?
Laissez la machine "apprendre" les règles de FizzBuzz
Procédure d'apprentissage automatique de base: ③ Comparez et examinez la méthode de sélection de la quantité de caractéristiques
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Créer un environnement de développement pour l'apprentissage automatique
Notes d'apprentissage depuis le début de Python 2