Funcție de pierdere personalizată
Până acum, am folosit eroarea medie pătratică drept funcție de pierdere. Aceasta funcționează bine, însă în cazul predicției prețurilor bursiere poate fi util să implementăm o funcție de pierdere personalizată. O astfel de funcție ne permite să îmbunătățim performanța modelului în moduri pe care le alegem noi. De exemplu, vom crea o funcție de pierdere personalizată care aplică o penalizare mare atunci când modelul prezice mișcări de preț în direcția greșită. Aceasta va ajuta rețeaua să învețe cel puțin să prezică direcția corectă a mișcărilor de preț.
Pentru a face asta, trebuie să scriem o funcție care primește argumentele (y_true, y_predicted). Vom folosi și funcționalități din backend-ul keras (prin tensorflow) pentru a identifica situațiile în care valoarea reală și predicția au semne diferite, penalizând aceste cazuri.
Acest exercițiu face parte din cursul
Machine Learning pentru finanțe în Python
Instrucțiuni pentru exercițiu
- Setează argumentele funcției
sign_penalty()lay_trueșiy_pred. - Înmulțește eroarea pătratică (
tf.square(y_true - y_pred)) cupenaltyatunci când semnele luiy_trueșiy_predsunt diferite. - Returnează media variabilei
lossdin funcție -- aceasta reprezintă eroarea medie pătratică (cu penalizarea aplicată pentru semne opuse între valorile reale și predicții).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)