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
Istruzioni dell'esercizio
- Imposta gli argomenti della funzione
sign_penalty()comey_trueey_pred. - Moltiplica l'errore quadratico (
tf.square(y_true - y_pred)) perpenaltyquando i segni diy_trueey_predsono diversi. - Restituisci la media della variabile
lossdalla 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)