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.
Ich lerne maschinelles Lernen, indem ich Bücher lese und Videos anschaue, aber ich wollte objektiv wissen, wie viel meine Fähigkeiten waren.
Ich kann die Details des Wettbewerbs nicht sagen, aber es ist ein Tischwettbewerb. Ich habe in der folgenden Kampfumgebung gekämpft.
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.
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.
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.
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.
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.
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.
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.
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).
Rückblickend habe ich das Gefühl, dass ich nur die offensichtlichen Dinge geschrieben habe, aber dies ist wahrscheinlich mein aktuelles Niveau.
Recommended Posts