Inizia subitoInizia gratis

Funzione di loss personalizzata

Finora abbiamo usato il mean squared error come funzione di loss. Funziona bene, ma nella previsione dei prezzi azionari può essere utile implementare una funzione di loss personalizzata. Una loss personalizzata può migliorare le prestazioni del nostro modello in modi specifici che scegliamo. Per esempio, creeremo una funzione di loss con una penalità elevata quando si predicono movimenti di prezzo nella direzione sbagliata. Questo aiuterà la nostra rete a imparare almeno a prevedere correttamente la direzione dei movimenti.

Per farlo, dobbiamo scrivere una funzione che accetti come argomenti (y_true, y_predicted). Useremo anche funzionalità del backend di keras (con tensorflow) per trovare i casi in cui il valore reale e la previsione hanno segni diversi, e penalizzare tali casi.

Questo esercizio fa parte del corso

Machine Learning per la finanza in Python

Visualizza corso

Istruzioni dell'esercizio

  • Imposta gli argomenti della funzione sign_penalty() come y_true e y_pred.
  • Moltiplica l'errore quadratico (tf.square(y_true - y_pred)) per penalty quando i segni di y_true e y_pred sono diversi.
  • Restituisci la media della variabile loss dalla funzione: è il mean squared error (con la nostra penalità per segni opposti tra valore reale e previsione).

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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)
Modifica ed esegui il codice