Eigene Loss-Funktionen

Maschinelles Lernen für Finanzen in Python

Nathan George

Data Science Professor

Richtungsfehler

Maschinelles Lernen für Finanzen in Python

MSE mit Richtungsstrafe

Wenn Vorhersage und Ziel dieselbe Richtung haben:

  • $ \sum(y - \hat{y})^2$

Sonst:

  • $\sum (y - \hat{y})^2 * \text{penalty} $
Maschinelles Lernen für Finanzen in Python

Eigene Loss-Funktionen implementieren

import tensorflow as tf
Maschinelles Lernen für Finanzen in Python

Eine Funktion erstellen

import tensorflow as tf

# Loss-Funktion erstellen def mean_squared_error(y_true, y_pred):
Maschinelles Lernen für Finanzen in Python

Mean-Squared-Error-Loss

import tensorflow as tf

# Loss-Funktion erstellen
def mean_squared_error(y_true, y_pred):

loss = tf.square(y_true - y_pred) return tf.reduce_mean(loss, axis=-1)
Maschinelles Lernen für Finanzen in Python

Custom Loss zu keras hinzufügen

import tensorflow as tf

# Loss-Funktion erstellen
def mean_squared_error(y_true, y_pred):
    loss = tf.square(y_true - y_pred)
    return tf.reduce_mean(loss, axis=-1)

# Verwendung der Loss in keras aktivieren import keras.losses keras.losses.mean_squared_error = mean_squared_error
# Modell mit unserer MSE-Loss-Funktion fitten
model.compile(optimizer='adam', loss=mean_squared_error)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Maschinelles Lernen für Finanzen in Python

Auf korrekte Richtung prüfen

tf.less(y_true * y_pred, 0)

Richtige Richtung:

  • neg * neg = pos
  • pos * pos = pos

Falsche Richtung:

  • neg * pos = neg
  • pos * neg = neg
Maschinelles Lernen für Finanzen in Python

tf.where() verwenden

# Loss-Funktion erstellen
def sign_penalty(y_true, y_pred):
    penalty = 10.
    loss = tf.where(tf.less(y_true * y_pred, 0), 
                    penalty * tf.square(y_true - y_pred), 
                    tf.square(y_true - y_pred))
Maschinelles Lernen für Finanzen in Python

Alles zusammenführen

# Loss-Funktion erstellen
def sign_penalty(y_true, y_pred):
    penalty = 100.
    loss = tf.where(tf.less(y_true * y_pred, 0),
                    penalty * tf.square(y_true - y_pred), 
                    tf.square(y_true - y_pred))

    return tf.reduce_mean(loss, axis=-1)

# Verwendung der Loss in keras aktivieren keras.losses.sign_penalty = sign_penalty
Maschinelles Lernen für Finanzen in Python

Die Custom Loss verwenden

# Modell erstellen
model = Sequential()
model.add(Dense(50,
                input_dim=scaled_train_features.shape[1],
                activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(1, activation='linear'))
# Modell mit unserer 'sign_penalty'-Loss-Funktion fitten
model.compile(optimizer='adam', loss=sign_penalty)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Maschinelles Lernen für Finanzen in Python

Die Fliegenkopf-Form

train_preds = model.predict(scaled_train_features)
# Vorhersagen vs. Istwerte als Scatterplot
plt.scatter(train_preds, train_targets)
plt.xlabel('predictions')
plt.ylabel('actual')
plt.show()

Fliegenkopf-Form

Maschinelles Lernen für Finanzen in Python

Erstelle deine eigene Loss-Funktion!

Maschinelles Lernen für Finanzen in Python

Preparing Video For Download...