Benutzerdefinierte Verlustfunktion
Bisher haben wir die mittlere quadratische Abweichung als Verlustfunktion verwendet. Das funktioniert gut, aber bei der Vorhersage von Aktienkursen kann es sinnvoll sein, eine benutzerdefinierte Verlustfunktion zu implementieren. Eine benutzerdefinierte Verlustfunktion kann die Leistung unseres Modells in von uns gewählten Punkten verbessern. Wir werden zum Beispiel eine benutzerdefinierte Verlustfunktion erstellen, die eine hohe Strafe verhängt, wenn Kursbewegungen in die falsche Richtung vorhergesagt werden. So lernt unser Netz zumindest, Bewegungen in die richtige Richtung zu prognostizieren.
Dafür müssen wir eine Funktion schreiben, die die Argumente (y_true, y_predicted) entgegennimmt. Außerdem verwenden wir Funktionalität aus dem Backend von keras (mit tensorflow), um Fälle zu finden, in denen sich das Vorzeichen von wahrem Wert und Vorhersage unterscheidet, und bestrafen diese Fälle dann entsprechend.
Diese Übung ist Teil des Kurses
<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>Übungsanweisungen
- Setze die Argumente der Funktion
sign_penalty()aufy_trueundy_pred. - Multipliziere den quadratischen Fehler (
tf.square(y_true - y_pred)) mitpenalty, wenn sich die Vorzeichen vony_trueundy_predunterscheiden. - Gib den Durchschnitt der Variable
lossaus der Funktion zurück – das ist die mittlere quadratische Abweichung (mit unserer Strafterm-Erweiterung für entgegengesetzte Vorzeichen von Ist vs. Vorhersage).
Interaktive praktische Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
import keras.losses
import tensorflow as tf
# Create loss function
def sign_penalty(____, ____):
penalty = 100.
loss = tf.where(tf.less(y_true * y_pred, 0), \
____ * tf.square(y_true - y_pred), \
tf.square(y_true - y_pred))
return tf.reduce_mean(____, axis=-1)
keras.losses.sign_penalty = sign_penalty # enable use of loss with keras
print(keras.losses.sign_penalty)