Écrivez le contenu de développement réel (*) du contenu écrit dans Dernier blog.
Cela ne dure pas comme si j'étudiais.
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!
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/
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
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.
Préparez le programme suivant et créez un modèle
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 |
$ pip install numpy
$ pip install sklearn
#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()
Ç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 ☓
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.
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.
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.
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