Funcții de pierdere personalizate

Machine Learning pentru finanțe în Python

Nathan George

Data Science Professor

nepotrivire de direcție

Machine Learning pentru finanțe în Python

MSE cu penalizare direcțională

Dacă predicția și ținta au aceeași direcție:

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

Dacă nu:

  • $\sum (y - \hat{y})^2 * \text{penalty} $
Machine Learning pentru finanțe în Python

Implementarea funcțiilor de pierdere personalizate

import tensorflow as tf
Machine Learning pentru finanțe în Python

Crearea unei funcții

import tensorflow as tf

# create loss function def mean_squared_error(y_true, y_pred):
Machine Learning pentru finanțe în Python

Funcția de pierdere pentru eroarea medie pătratică

import tensorflow as tf

# create loss function
def mean_squared_error(y_true, y_pred):

loss = tf.square(y_true - y_pred) return tf.reduce_mean(loss, axis=-1)
Machine Learning pentru finanțe în Python

Adăugarea pierderii personalizate în Keras

import tensorflow as tf

# create loss function
def mean_squared_error(y_true, y_pred):
    loss = tf.square(y_true - y_pred)
    return tf.reduce_mean(loss, axis=-1)

# enable use of loss with keras import keras.losses keras.losses.mean_squared_error = mean_squared_error
# fit the model with our mse loss function
model.compile(optimizer='adam', loss=mean_squared_error)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Machine Learning pentru finanțe în Python

Verificarea direcției corecte

tf.less(y_true * y_pred, 0)

Direcție corectă:

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

Direcție greșită:

  • neg * pos = neg
  • pos * neg = neg
Machine Learning pentru finanțe în Python

Utilizarea `tf.where()`

# create loss function
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))
Machine Learning pentru finanțe în Python

Asamblarea componentelor

# create loss function
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)

# enable use of loss with keras keras.losses.sign_penalty = sign_penalty
Machine Learning pentru finanțe în Python

Utilizarea pierderii personalizate

# create the model
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'))
# fit the model with our custom 'sign_penalty' loss function
model.compile(optimizer='adam', loss=sign_penalty)
history = model.fit(scaled_train_features, train_targets, epochs=50)
Machine Learning pentru finanțe în Python

Forma de papion

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

grafic tip papion

Machine Learning pentru finanțe în Python

Creați propria funcție de pierdere!

Machine Learning pentru finanțe în Python

Preparing Video For Download...