Ich habe das folgende Setup für ein Forschungsprojekt im Bereich Finanzen / Maschinelles Lernen an meiner Universität: Ich wende ein (Deep) Neural Network (MLP) mit der folgenden Struktur in Keras / Theano an, um überdurchschnittliche Aktien (Label 1) von unterdurchschnittlichen Aktien zu unterscheiden (Label 1). Etikett 0). Erstens verwende ich nur tatsächliche und histrorische Bewertungsmultiplikatoren. Da es sich um Bestandsdaten handelt, kann man mit sehr verrauschten Daten rechnen. Darüber hinaus könnte in diesem Bereich bereits eine stabile Genauigkeit außerhalb der Stichprobe von über 52% als gut angesehen werden.
Die Struktur des Netzwerks:
- Dichte Ebene mit 30 Funktionen als Eingabe
- Relu-Aktivierung
- Batch Normalization Layer (Ohne das konvergiert das Netzwerk teilweise überhaupt nicht)
- Optionale Dropout-Ebene
- Dicht
- Relu
- Stapel
- Aussteigen
- .... Weitere Schichten mit gleicher Struktur
- Dichte Schicht mit Sigmoid-Aktivierung
Optimierer: RMSprop
Verlustfunktion: Binäre Kreuzentropie
Das einzige, was ich für die Vorverarbeitung mache, ist eine Neuskalierung der Features auf den Bereich [0,1].
Jetzt stoße ich auf ein typisches Über- / Unteranpassungsproblem, das ich normalerweise mit Dropout- oder / und L1- und L2-Kernel-Regularisierung angehen würde. In diesem Fall wirken sich jedoch sowohl die Dropout- als auch die L1- und L2-Regularisierung negativ auf die Leistung aus, wie Sie in den folgenden Diagrammen sehen können.
Meine Grundeinstellung ist: 5 Schicht NN (inkl. Eingabe- und Ausgabeschicht), 60 Neuronen pro Schicht, Lernrate von 0,02, kein L1 / L2 und kein Ausfall, 100 Epochen, Chargennormalisierung, Chargengröße 1000. Alles ist darauf trainiert 76000 Eingangsproben (nahezu ausgeglichene Klassen 45% / 55%) und auf ungefähr die gleiche Anzahl von Testproben angewendet. Für die Diagramme habe ich jeweils nur einen Parameter geändert. "Perf-Diff" bezeichnet die durchschnittliche Differenz der Aktienperformance von Aktien, die als 1 klassifiziert sind, und Aktien, die als 0 klassifiziert sind. Dies ist im Grunde die Kernmetrik am Ende. (Höher ist besser)
Im Fall l1 klassifiziert das Netzwerk grundsätzlich jede Stichprobe einer Klasse. Die Spitze tritt auf, weil das Netzwerk dies erneut tut, aber 25 Stichproben zufällig korrekt klassifiziert. Diese Spitze sollte also nicht als gutes Ergebnis interpretiert werden, sondern als Ausreißer.
Die anderen Parameter haben folgende Auswirkungen:
Haben Sie Ideen, wie ich meine Ergebnisse verbessern kann? Gibt es einen offensichtlichen Fehler, den ich mache, oder gibt es eine einfache Antwort auf die Regularisierungsergebnisse? Würden Sie vorschlagen, vor dem Training eine Funktionsauswahl vorzunehmen (z. B. PCA)?
Antworten:
Angesichts der Finanzdaten ist es wahrscheinlich, dass die Feature-Verteilungen in Ihren Zug- und Validierungssätzen unterschiedlich sind - ein Phänomen, das als Kovariatenverschiebung bezeichnet wird - und neuronale Netze damit nicht gut spielen. Unterschiedliche Funktionsverteilungen können zu Überanpassungen führen, selbst wenn das Netzwerk relativ klein ist.
Angesichts der Tatsache, dass l1 und l2 nichts helfen, vermute ich, dass andere Standard-Regularisierungsmaßnahmen wie das Hinzufügen von Rauschen zu Eingaben / Gewichten / Verläufen wahrscheinlich nicht helfen, aber es könnte einen Versuch wert sein.
Ich wäre versucht, einen Klassifizierungsalgorithmus auszuprobieren, der weniger von den absoluten Größen der Merkmale beeinflusst wird, wie z. B. Bäume mit Gradientenverstärkung.
quelle