[PYTHON] Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)

Einführung

Schreiben Sie den tatsächlichen Entwicklungsinhalt (*) des Inhalts in Letzter Blog.

Wichtig für den Einstieg in das maschinelle Lernen! !!

・ Haben Sie einen klaren Zweck zu studieren!

Es dauert nicht so, als würde ich studieren.

・ Wenn Sie es wirklich wollen, lernen Sie selbst

Selbst wenn Sie Leute fragen, wird es fragmentiert sein, so dass Sie denken, dass Sie es geschafft haben. Auch wenn ich die Ingenieure auf dieser Straße frage, verstehe ich oft nicht einmal, was ich sage, weil es extrem schwierig ist (lacht). .. .. Auch wenn eine Formel durch eine neue Formel erklärt wurde ... es war wie!

(*) Über die Entwicklung von SIVA [facebook] https://www.facebook.com/AIkeiba/ [Twitter] https://twitter.com/Siva_keiba Ich mag es, weil es von Zeit zu Zeit live sein wird! Bitte folgen Sie mir.

Dann zum Hauptthema!

Der erste Schritt des maschinellen Lernens (Marketing)

Beim Starten des maschinellen Lernens für die Vorhersage von Pferderennen haben wir zuerst die Zielinformationen gesammelt. Ich verstand Pferderennen überhaupt nicht und war auch nicht daran interessiert, also verstand ich es überhaupt nicht, aber ich bezog mich darauf, weil es Informationen im Internet gab, die verschiedene Leute tatsächlich versuchten.

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

Datenerfassung für Pferderennen (Datenerfassung)

Als ich verschiedene Leute auf Facebook fragte, hörte ich, dass das Wetter, das Geschlecht des Pferdes, das Alter des Pferdes und Informationen zu früheren Rennen notwendig sind, und beschloss, sie zu sammeln.

Glücklicherweise habe ich eine Person gefunden, die Daten sammelt, also habe ich die Daten erhalten. Ich werde es zusammen mit dem Programm geben, damit Sie es verwenden können.

https://github.com/tsunaki00/horse_racing

Bereinigung, Analyse und Klassifizierung von Informationen

Ich wollte die Informationen bis zu einem gewissen Grad klassifizieren, gab aber auf, weil ich ein Amateur im Pferderennen war. .. Daher wurden die Renninformationen und Pferdeparameterinformationen im Programm gemastert und quantifiziert.

Vorausschauende Modellerstellung und Experimentieren

Bereiten Sie das folgende Programm vor und erstellen Sie ein Modell

Die vorbereiteten Daten sind die folgenden CSV (von JRA-VAN)

Markenname Erläuterung
Veranstaltungsdatum yyyy-mm-dd
Rennbahn
Startnummer
Name des Rennens
Kurs Schmutz
Orbit Bei Schmutz oder Rasen "rechts" für die Drehung im Uhrzeigersinn, "links" für die Drehung gegen den Uhrzeigersinn
Entfernung [m]
Baba Staat Ryo
Preis [Zehntausend Yen]
Anzahl der Köpfe
Reihenfolge der Ankunft
Rahmennummer
Pferdenummer
Pferdename
Sex
Alter
Reiter
Zeit [s]
Unterschied Der Unterschied zum ersten Pferd,Hals,
Bestellung übergeben
Bergauf 3F Letzte 600m Zeit[s]
Abstoßungsmenge [kg]
Pferdegewicht [kg]
Erhöhen verringern Änderung des Pferdegewichts gegenüber dem vorherigen Rennen[kg]
Beliebt Gewinnchancen absteigende Zahl
Chancen
Blinker Blinker(Augenbinde)Wenn ja, "B"
Trainer
Trainingskommentar
Trainingsbewertung

Paketinstallation

  $ pip install numpy
  $ pip install sklearn

Vorhersageprogramm

#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 = [] 
    #Testziel
    self.test_row_no = -1 

    self.master = {
      1 : {
        "Fukushima": 0, "Ogura": 1, "Kyoto": 2, "Hakodate": 3,
        "Nakayama": 4, "Sapporo": 5, "Tokio": 6,
        "Hanshin": 7, "Chukyo": 8, "Niigata": 9 
      },
      4 :  { "Shiba" : 0, "Schmutz" : 1, "Hindernis" : 2 },
      5 :  { "richtig" : 0, "links" : 1, "Shiba" : 2, "Gerade Linie" : 3, "richtig2周" : 4 },
      7 :  { "Schlecht" : 0,  "Schwer" : 1, "稍Schwer" : 2, "Gut" : 3 },
      14 : {"Männlich" : 0, "Weiblich" : 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)
      #Erstellen Sie Vorhersagedaten mit Daten ohne Fehler
      for idx, row in enumerate(reader):
        if idx == 0:
          for i, col in enumerate(row):
            header = row
          continue
        elif row[4] == 'Hindernis' :
          hurdle_race_count += 1
          continue
        horse = []
        parameter = []
        #Mit Stammdaten quantifizieren
        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)
    
    #Erstellen Sie ein Lernmodell(Der Algorithmus ist Random Forest)
    #Parameterbeispiel n_estimators=xx, max_features="auto", n_jobs=-1
    self.model = RandomForestClassifier()
    #Lernen Sie mit fit(9/Lerne bis zu 17)
    self.model.fit(self.train_data[0 : self.test_row_no - 1], self.train_target[0 : self.test_row_no - 1])
    #Bei der Serialisierung eines Modells
    # joblib.dump(model, 'model.pkl') 
    #Bedeutung der Identität (Bedeutung im Zweig von 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:]):
      #Vorhersagen mit Vorhersagen
      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}Tatsächliche Reihenfolge der Ankunft: {5}Ankunft{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()

Ergebnis

Es trifft überhaupt nicht (lacht)

Nakayama 01R Sarah 3 Jahre alt, nicht gewonnen 14 Diap Pira Tatsächliche Reihenfolge der Ankunft:16. ☓
Nakayama 02R Sarah 3 Jahre alt nicht gewonnen 1 Keiai Libra Tatsächliche Reihenfolge der Ankunft:1. ○
Nakayama 05R Sarah 3 Jahre alt, nicht gewonnen 16 Mieno Wonder Tatsächliche Reihenfolge der Ankunft:1. ○
Nakayama 05R Sarah 3 Jahre alt, nicht gewonnen 13 Belmure Tatsächliche Reihenfolge der Ankunft:12. ☓
Nakayama 06R Sarah 4 Jahre alt und unter 5 Millionen Yen 14 Symbolis Wift Tatsächliche Reihenfolge der Ankunft:12. ☓
Nakayama 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 6 Symboli Sonne Tatsächliche Reihenfolge der Ankunft:12. ☓
Nakayama 08R Sarah 4 Jahre alt und unter 10 Millionen Yen 13 Asakusa Marineba Tatsächliche Reihenfolge der Ankunft:11. ☓
Nakayama 09R Erster Einsatz bei Sonnenaufgang 5 Zuschlagspreis Tatsächliche Reihenfolge der Ankunft:9. ☓
Nakayama 10R Junior Cup 14 Red Vivo Tatsächliche Reihenfolge der Ankunft:9. ☓
Nakayama 10R Junior Cup 11 Red Jive Tatsächliche Reihenfolge der Ankunft:10. ☓
Nakayama 11R Daily Sports Award Nakayama Gold Cup (GIII) 9 Justaway Tatsächliche Reihenfolge der Ankunft:3. ☓
Nakayama 11R Daily Sports Award Nakayama Gold Cup (GIII) 16 Ike Dragon Tatsächliche Reihenfolge der Ankunft:15. ☓
Nakayama 12R Sarah 4 Jahre alt und unter 10 Millionen Yen 2 Omega Blue Hawaii Tatsächliche Reihenfolge der Ankunft:3. ☓
Kyoto 01R Sarah 3 Jahre alt, nicht gewonnen 8 Lorraine Cross Tatsächliche Reihenfolge der Ankunft:3. ☓
Kyoto 01R Sarah 3 Jahre alt, nicht gewonnen 4 Denkou Showin Tatsächliche Reihenfolge der Ankunft:15. ☓
Kyoto 04R Sarah 4 Jahre alt und unter 5 Millionen Yen 1 Mickey Chris S Tatsächliche Reihenfolge der Ankunft:8. ☓
Kyoto 05R Sarah 3 Jahre alt, nicht gewonnen 13 Tanino Tuxedo Tatsächliche Reihenfolge der Ankunft:8. ☓
Kyoto 06R Sarah 3 Jahre Shinma 11 Meishou Oniguma Tatsächliche Reihenfolge der Ankunft:8. ☓
Kyoto 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 5 Western Musashi Tatsächliche Reihenfolge der Ankunft:8. ☓
Kyoto 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 14 Soni Tatsächliche Reihenfolge der Ankunft:16. ☓
Kyoto 09R Fukujusou Special 12 Bewundern Sie Dubai Tatsächliche Reihenfolge der Ankunft:2. ☓
Kyoto 10R New Year Stakes 2 Taiki Percival Tatsächliche Reihenfolge der Ankunft:2. ☓
Kyoto 11R Sports Nippon Award Kyoto Gold Cup (GIII) 11 Sound of Heart Tatsächliche Reihenfolge der Ankunft:4. ☓
Kyoto 12R Sarah 4 Jahre alt und unter 10 Millionen Yen 2 Suzuka Jonburu Tatsächliche Reihenfolge der Ankunft:4. ☓
Nakayama 02R Sarah 3 Jahre alt, nicht gewonnen 9 Belmont Joey Tatsächliche Reihenfolge der Ankunft:7. ☓
Nakayama 03R Sarah 3 Jahre Shinma 8 Schlagkraft Tatsächliche Reihenfolge der Ankunft:7. ☓
Nakayama 05R Sarah 3 Jahre alt, nicht gewonnen 8 Ogonchacha Tatsächliche Reihenfolge der Ankunft:9. ☓
Nakayama 05R Sarah 3 Jahre alt, nicht gewonnen 9 Eaglemore Tatsächliche Reihenfolge der Ankunft:10. ☓
Nakayama 06R Sarah 3 Jahre Shinma 9 Macolon Tatsächliche Reihenfolge der Ankunft:8. ☓
Nakayama 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 7 Torsen Airence Tatsächliche Reihenfolge der Ankunft:13. ☓
Nakayama 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 14 Cosmo dictat Tatsächliche Reihenfolge der Ankunft:14. ☓
Nakayama 08R Sarah 4 Jahre alt und unter 10 Millionen Yen 4 Danon Schnaps Tatsächliche Reihenfolge der Ankunft:14. ☓
Nakayama 09R Kantake Award 12 Hikaru Pegasus Tatsächliche Reihenfolge der Ankunft:11. ☓
Nakayama 09R Kantake Award 4 Millionen Frische Tatsächliche Reihenfolge der Ankunft:12. ☓
Nakayama 10R First Fuji Stakes 6 Stella Rossa Tatsächliche Reihenfolge der Ankunft:1. ○
Nakayama 10R First Fuji Stakes 2 Full Accelerator Tatsächliche Reihenfolge der Ankunft:2. ☓
Nakayama 10R First Fuji Stakes 3 Maine Epona Tatsächliche Reihenfolge der Ankunft:11. ☓
Nakayama 11R January Stakes 5 Everest O Tatsächliche Reihenfolge der Ankunft:13. ☓
Nakayama 12R Sarah 4 Jahre alt und unter 10 Millionen Yen 7 Symbolischer Kardinal Tatsächliche Reihenfolge der Ankunft:13. ☓
Kyoto 02R Sarah 3 Jahre alt, nicht gewonnen 6 Bamboo Baggio Tatsächliche Reihenfolge der Ankunft:14. ☓
Kyoto 03R Sarah 3 Jahre alt, nicht gewonnen 3 Road Crosite Tatsächliche Reihenfolge der Ankunft:13. ☓
Kyoto 05R Sarah 3 Jahre Shinma 7 Bright Idea Tatsächliche Reihenfolge der Ankunft:6. ☓
Kyoto 05R Sarah 3 Jahre Shinma 3 Unshackled Tatsächliche Reihenfolge der Ankunft:7. ☓
Kyoto 06R Sarah 3 Jahre alt 5 Millionen Yen oder weniger 4 Makototan Hoiser Tatsächliche Reihenfolge der Ankunft:12. ☓
Kyoto 07R Sarah 4 Jahre alt und unter 5 Millionen Yen 9 Daisy Burrows Tatsächliche Reihenfolge der Ankunft:14. ☓
Kyoto 08R Sarah 4 Jahre alt und unter 10 Millionen Yen 14 Nangoku Universe Tatsächliche Reihenfolge der Ankunft:14. ☓
Kyoto 09R Hatsume Stakes 2 Takao Noboru Tatsächliche Reihenfolge der Ankunft:1. ○
Kyoto 09R Hatsume Stakes 7 Albaton Tatsächliche Reihenfolge der Ankunft:11. ☓
Kyoto 09R Hatsume Stakes 5 Mickey Ballard Tatsächliche Reihenfolge der Ankunft:12. ☓
Kyoto 10R Manyo Stakes 5 Fogetable Tatsächliche Reihenfolge der Ankunft:6. ☓
Kyoto 10R Manyo Stakes 4 Seika Presto Tatsächliche Reihenfolge der Ankunft:9. ☓
Kyoto 11R Daily Sports Award Shinzan-Denkmal (GIII) 16 Nach Belieben Tatsächliche Reihenfolge der Ankunft:6. ☓

Schließlich

Das ist alles für heute. Wir werden in Zukunft auch die Parameteroptimierungsmethode und die Datennormalisierungsmethode aktualisieren.

(Bonus) Auslöser für die SIVA-Entwicklung

Der Grund für dieses Projekt war, dass mein Freund mich während des Mitte Oktober abgehaltenen Informationsverarbeitungstests kontaktierte und sagte: "Ich habe den Test möglicherweise nicht bestanden!".

Deshalb habe ich mich entschlossen, die Prüfungsfragen für das maschinelle Lernen im nächsten Jahr vorherzusagen, über die ich lange nachgedacht hatte.

Die für das Programm verwendete Bibliothek verwendete scicit-learn, das viele Informationen enthält. [Was ich getan habe] Ich habe die Probleme von GJ2013 bis GJ2016 kategorisiert und die Problemkategorien vorhergesagt, die nächstes Jahr auftreten werden.

14642235_1785738458343919_3303819700484393142_n.jpg

Als ich es zum ersten Mal berührte, hatte ich das Gefühl, dass die Schwierigkeit des Programms gering war, aber ich war ratlos, als ich einen Algorithmus auswählte. (Ich weiß immer noch nicht, was richtig ist (lacht)) Ich habe einige nützliche Informationen gefunden, daher werde ich sie weitergeben.

14721760_1785764201674678_6869920007789574956_n.jpg

Die Ergebnisse können jedoch nicht sofort durch die Vorhersage des nationalen Tests verifiziert werden! !! !!

Ich möchte die Probleme des Informationsverarbeitungstests vorhersagen und sofort überprüfen, aber ich kenne das Ergebnis nicht, da es bis zum nächsten Frühjahr keinen Test geben wird ... Da es ein solches Problem gab, entschied ich mich für SIVA, damit ich sofort Ergebnisse erzielen konnte.

Ich werde wieder schreiben! SIVA wird jederzeit live sein, also mag ich es! Bitte folgen Sie mir. [facebook] https://www.facebook.com/AIkeiba/ [Twitter] https://twitter.com/Siva_keiba

Recommended Posts

Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
Über das Testen bei der Implementierung von Modellen für maschinelles Lernen
Maschinelles Lernen Über Overlearning
Maschinelles Lernen des Sports - Analyse der J-League als Beispiel - ②
Informationen zur Datenvorverarbeitung von Systemen, die maschinelles Lernen verwenden
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
Grundlagen des maschinellen Lernens (Denkmal)
Über maschinelles Lernen gemischte Matrix
Bedeutung von Datensätzen für maschinelles Lernen
Über die Komponenten von Luigi
Über die Funktionen von Python
Simulation des Inhalts der Brieftasche
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Das Ergebnis des maschinellen Lernens von Java-Ingenieuren mit Python www
Vorhersage des Vorhandenseins oder Nichtvorhandenseins von Untreue durch maschinelles Lernen
So erhöhen Sie die Anzahl der Datensatzbilder für maschinelles Lernen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Verstehen Sie den Inhalt der sklearn-Pipeline
Über den Rückgabewert von pthread_mutex_init ()
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
Über den Rückgabewert des Histogramms.
Über den Grundtyp von Go
Siehe den Inhalt von Kumantic Segumantion
Über die Obergrenze von Threads-max
Über das Verhalten von Yield_per von SqlAlchemy
Über die Größe der Punkte in Matplotlib
Informationen zur Grundlagenliste der Python-Grundlagen
Anwendungsentwicklung mit Azure Machine Learning
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
[Maschinelles Lernen] Überprüfen Sie die Leistung des Klassifikators anhand handgeschriebener Zeichendaten
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 4)
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 5)
Ich habe den Inhalt des Docker-Volumes überprüft
Algorithmus für maschinelles Lernen (Verallgemeinerung der linearen Regression)
Über die Reihenfolge des Lernens von Programmiersprachen (vom Anfänger bis zum Fortgeschrittenen) Teil 2
Notieren Sie die Schritte zum Verständnis des maschinellen Lernens
Othello-Aus der dritten Zeile von "Implementation Deep Learning" (3)
Notizen vom Anfang von Python 1 lernen
Informationen zum Verhalten von enable_backprop von Chainer v2
Informationen zur virtuellen Umgebung von Python Version 3.7
Wie nutzt man maschinelles Lernen für die Arbeit? 02_AI Entwicklungsprojektübersicht
Eine Geschichte über maschinelles Lernen mit Kyasuket
2020 Empfohlen 20 Auswahlmöglichkeiten für einführende Bücher zum maschinellen Lernen
Maschinelles Lernen
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
Persönliche Notizen und Links zum maschinellen Lernen ① (Maschinelles Lernen)
Über die Argumente der Setup-Funktion von PyCaret
Über die Normalgleichung der linearen Regression
Lesen Sie den gesamten Inhalt von proc / [pid]
[Maschinelles Lernen] Liste der häufig verwendeten Pakete
[Maschinelles Lernen] Was ist LP-Norm?
Lassen Sie die Maschine die Regeln von FizzBuzz "lernen"
Grundlegendes maschinelles Lernverfahren: ③ Vergleichen und untersuchen Sie die Auswahlmethode für die Merkmalsmenge
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Notizen vom Anfang von Python 2 lernen