Aan de slagBegin gratis

Aangepaste verliesfunctie

Tot nu toe hebben we de mean squared error gebruikt als verliesfunctie. Dat werkt prima, maar bij het voorspellen van aandelenkoersen kan het nuttig zijn om een aangepaste verliesfunctie te implementeren. Een aangepaste verliesfunctie kan helpen om de prestaties van ons model te verbeteren op manieren die wij belangrijk vinden. We gaan bijvoorbeeld een aangepaste verliesfunctie maken met een zware straf voor het verkeerd voorspellen van de richting van de koersbeweging. Dit helpt ons netwerk om in elk geval de richting van de koersbeweging goed te leren voorspellen.

Daarvoor moeten we een functie schrijven die de argumenten (y_true, y_predicted) aanneemt. We gebruiken ook functionaliteit uit de backend van keras (met tensorflow) om gevallen te vinden waar de werkelijke waarde en de voorspelling een verschillend teken hebben, en straffen die gevallen vervolgens.

Deze oefening maakt deel uit van de cursus

Machine Learning voor finance in Python

Bekijk cursus

Oefeninstructies

  • Stel de argumenten van de functie sign_penalty() in op y_true en y_pred.
  • Vermenigvuldig de kwadratische fout (tf.square(y_true - y_pred)) met penalty wanneer de tekens van y_true en y_pred verschillend zijn.
  • Retourneer het gemiddelde van de variabele loss vanuit de functie — dit is de mean squared error (met onze straf voor tegengestelde tekens van werkelijk vs. voorspellingen).

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

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)
Code bewerken en uitvoeren