[PYTHON] Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe

Einführung

Neulich habe ich an einem Wettbewerb für maschinelles Lernen teilgenommen. Ich habe viele Male mein Bestes versucht, um das Wochenende zu töten. Obwohl ich keinen Preis gewonnen habe, konnte ich in den Top 3% sein, was mir Selbstvertrauen gab. Ich habe nicht viel Erfahrung mit Wettbewerben, daher können sich meine Gedanken in Zukunft ändern, aber zuerst werde ich an dieser Stelle auf diese Erfahrung zurückblicken und sie als Memo hinterlassen.

Motivation zur Teilnahme

Ich lerne maschinelles Lernen, indem ich Bücher lese und Videos anschaue, aber ich wollte objektiv wissen, wie viel meine Fähigkeiten waren.

Annahme

Ich kann die Details des Wettbewerbs nicht sagen, aber es ist ein Tischwettbewerb. Ich habe in der folgenden Kampfumgebung gekämpft.

Hardware (1 Einheit)

Software

Zurückblicken

Es gibt viele großartige Bücher über Techniken des maschinellen Lernens, daher möchte ich hier die schlammigen Dinge auflisten, die ich tatsächlich gefühlt habe, als ich sie in den Wettbewerb aufgenommen habe.

Skript erstellt

Im Wettbewerb haben wir ein vielseitiges Befehlszeilenskript für die beiden Aufgaben der Merkmalsauswahl und der Erstellung von Vorhersagemodellen erstellt und die anderen (Visualisierung, kleine Vorverarbeitung usw.) mit Einwegbefehlen behandelt. Beispielsweise kann beim Erstellen eines Vorhersagemodells die Auswahl des Lernalgorithmus, des zufälligen Startwerts, der Anzahl der Kreuzvalidierungen usw. so weit wie möglich durch Argumente angegeben werden. Auch wenn ein neuer Algorithmus hinzugefügt wird, kann er mit einem Minimum an Änderungen hinzugefügt werden. Auf diese Weise konnte ich meine Produktivität verbessern, indem ich das ändern konnte, was ich tun wollte, indem ich einfach das Argument des Befehls änderte oder es in Stapeln stapelte.

Reproduzierbarkeit

Bei Wettbewerben ist es oft obligatorisch, ein Skript bereitzustellen, das die Erstellung und Vorhersage von Modellen reproduziert, wenn ein Preis gewonnen und Preise erhalten werden (glaube ich). Es kann eine ziemliche Überarbeitung sein, herauszufinden, wie man es reproduziert, wenn die Punktzahl steigt und der Preis sichtbar ist. Daher ist es notwendig, eine Methode zu etablieren, um die Reproduzierbarkeit zum frühestmöglichen Zeitpunkt sicherzustellen. Algorithmen, die Zufälligkeit in die Ergebnisse einbeziehen, haben häufig Parameter wie "random_state", daher habe ich versucht, sie zu untersuchen und zu spezifizieren. Bei der Berechnung mit der GPU scheint es jedoch schwierig zu sein, das Problem zu beheben (diesmal wurde die GPU nur von Keras verwendet, daher habe ich sie nicht sehr gründlich untersucht).

Das Folgende kann als Ziel für die Festlegung des Zufallszahlen-Startwerts betrachtet werden.

Log

Ich habe einige gute Ergebnisse mit den Ergebnissen einer Feature-Auswahlmethode erzielt, aber ich wusste nicht, wie ich die erste Feature-Auswahl erstellen sollte, also habe ich von vorne angefangen. Es ist wichtig, in jedem Skript ein Protokoll zu führen, damit dies nicht geschieht.

Ich habe nicht alle folgenden Elemente implementiert, aber im Rückblick kann das Folgende als Dinge betrachtet werden, die protokolliert werden sollten.

Gleiches gilt für andere Skripte wie die Funktionsauswahl. Beachten Sie, dass das Protokoll nicht aus einer Datei bestehen muss. Es reicht aus, für jede Ausführung einen Ausgabeordner zu erstellen und mehrere Arten von Protokolldateien einschließlich des Vorhersageergebnisses darunter auszugeben.

Nutzen Sie Ihre Zeit effektiv

Boruta der Merkmalsauswahl dauerte einen ganzen Tag mit 500 Iterationen gemäß den Wettbewerbsdaten. Je nach Ergebnis musste ich mehrmals von vorne anfangen. Wenn Sie Boruta ausführen, ohne etwas anzugeben, belegt es möglicherweise die CPU und Sie können möglicherweise keine anderen Arbeiten ausführen. Bei einer Verarbeitung, die die CPU auf diese Weise belegt, bleibt bei der Vorbereitung eines Arguments durch explizite Angabe der Anzahl der CPUs Platz für andere Arbeiten. Auf diese Weise können andere Arbeiten (z. B. die Suche nach Hyperparametern mit einem anderen Ergebnis der Merkmalsauswahl) ausgeführt werden, auch wenn Boruta ausgeführt wird, und die Zeit kann effektiv genutzt werden.

Berücksichtigen Sie die Ausführungsgeschwindigkeit des Vorhersagealgorithmus

Dieses Mal konnten wir die Genauigkeit verbessern, indem wir das Ensemble lernten, um das endgültige Vorhersagemodell zu erstellen, indem wir die Ausgabeergebnisse mehrerer Vorhersagealgorithmen kombinierten. Beim Lernen von Ensembles wird gesagt, dass die Genauigkeit umso höher ist, je größer die Vielfalt der Kombinationen ist. Dieses Mal konnte ich ein Allzweck-Skript erstellen und verschiedene Vorhersagealgorithmen hinzufügen, sodass ich so viele Algorithmen wie möglich kombinierte. Die Geschwindigkeit jedes Algorithmus war wie folgt.

Die Tatsache, dass es Zeit braucht, bedeutet, dass bei vielen Kombinationen der Parametersuche mehr Zeit für die Kombination benötigt wird. Aus diesem Grund wurden der ohne Merkmalsauswahl verwendete Algorithmus und der nach der Merkmalsauswahl verwendete Algorithmus richtig ausgewählt. Wir glauben, dass dies die effiziente Suche nach hochgenauen Modellen für jeden Vorhersagealgorithmus ermöglicht hat.

Glaube an Kreuzvalidierung

Am Ende des Wettbewerbs stieg der öffentliche Testwert nicht an, obwohl sich der Kreuzvalidierungswert erhöhte. Ich hatte große Probleme, aber im öffentlichen Test mit allen am Ende des Wettbewerbs veröffentlichten Daten war das Ergebnis fast das gleiche wie bei der Kreuzvalidierung. Nachdem ich eine Bewertungsmethode gefunden hatte, die ich für zuverlässig hielt, wurde mir klar, dass es wichtig ist, daran zu glauben und mich auf die Verbesserung der Genauigkeit zu konzentrieren.

Gib auf

Während des Wettbewerbs ist es möglicherweise nicht für alle Bemühungen wirksam. Zum Beispiel hatte diesmal die Erzeugung von Merkmalen durch genetische Programmierung keine Auswirkung (obwohl dies eine Frage der Methode sein kann). Ich konnte mir keinen Grund vorstellen. In einem solchen Fall halte ich es für wichtig, schnell aufzugeben und herauszufinden, was effektiv war (in diesem Fall Ensemble-Lernen).

abschließend

Rückblickend habe ich das Gefühl, dass ich nur die offensichtlichen Dinge geschrieben habe, aber dies ist wahrscheinlich mein aktuelles Niveau.

Recommended Posts

Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe
Ich habe Python zum ersten Mal mit Heroku ausprobiert
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Erstellen Sie eine Python-Umgebung für maschinelles Lernen unter Mac OS
Hinweise zur Python-Grammatik für maschinelles Lernen in PyQ
Hinweise zum lokalen Ausführen von Azure Machine Learning
Maschinelles Lernen mit Pytorch in Google Colab
Rückblick auf den Wettbewerb für maschinelles Lernen, an dem ich zum ersten Mal gearbeitet habe
Ich habe zum ersten Mal Tensorflow ausprobiert
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe Mind Meld zum ersten Mal ausprobiert
Was ich zum ersten Mal in Python bekommen habe
Zum ersten Mal habe ich etwas über Unix (Linux) gelernt.
AI Gaming Ich habe es zum ersten Mal versucht
Erster Kaggle (Kaggle ①)
Ich besuchte die Schule und nahm zum ersten Mal am SIGNATE BEGINNER Limited-Wettbewerb teil.
Kaguru zum ersten Mal
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Ich habe die Google Cloud Vision-API zum ersten Mal ausprobiert
Wenn Sie zum ersten Mal Linux lernen, tun Sie dies!
Siehe Python zum ersten Mal
Starten Sie Django zum ersten Mal
Unterschiede, die C # -Ingenieure beim ersten Erlernen von Python verspürten
Code, an den ich mich gerne erinnert hätte, als ich zum ersten Mal an AtCoder teilgenommen habe (Reflection 1 für das nächste Mal)
[Python] [Maschinelles Lernen] Anfänger ohne Wissen versuchen vorerst maschinelles Lernen
Rückblick auf 2016 in der Crystal-Sprache
MongoDB mit Python zum ersten Mal
Versuchen wir zum ersten Mal Linux
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
Die Geschichte, die nichts mit der Partition zu tun hatte, als ich zum ersten Mal eine Festplatten-Sicherung mit dd durchführte
Lassen Sie uns eine einfache Vorlage anzeigen, die ideal für den ersten Django ist
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich habe versucht, das Bild zu verarbeiten und zu transformieren und die Daten für maschinelles Lernen zu erweitern
Rückblick auf die Geschichte der Ausdrücke, die die Summe der Quadrate an Pythonic zurückgeben
So verwenden Sie MkDocs zum ersten Mal
Führen Sie yolov4 "vorerst" in Windows aus
Hinweise zum maschinellen Lernen (von Zeit zu Zeit aktualisiert)
Ich habe vorerst mit Floydhub gespielt
Installieren Sie die Bibliothek für maschinelles Lernen TensorFlow auf fedora23
Versuchen Sie zum ersten Mal, in Qiita zu posten
Ich werde versuchen, die Links zusammenzufassen, die vorerst nützlich erscheinen
Der erste Schritt des maschinellen Lernens ~ Für diejenigen, die versuchen möchten, mit Python zu implementieren ~
[CodeIQ] Ich habe die Wahrscheinlichkeitsverteilung von Würfeln geschrieben (aus dem CodeIQ-Mathematikkurs für maschinelles Lernen [Wahrscheinlichkeitsverteilung]).
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Ich möchte zum ersten Mal eine Django-Studie zum Mittagessen [EP1-4] erstellen
Registrieren Sie zum ersten Mal eine Aufgabe in cron
Versuchen Sie vorerst, Arch Linux zu installieren.
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Aufzeichnung der ersten Herausforderung des maschinellen Lernens mit Keras
14 E-Mail-Newsletter zum Sammeln von Informationen zum maschinellen Lernen
WebDriver-Methoden, nach denen Python-Anfänger zuerst gesucht haben
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Automatisches Round-Robin-Lernen (Regressionsanalyse) - Dies verkürzt die Zeit für die Parametereinstellung erheblich.
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Einführung in Deep Learning zum ersten Mal (Chainer) Erkennung japanischer Zeichen Kapitel 1 [Umgebungskonstruktion]
Ich möchte vorerst die Desktop-Umgebung von Ubuntu auf Android verwenden (Termux-Version)