ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • Setează argumentele funcției sign_penalty() la y_true și y_pred.
  • Înmulțește eroarea pătratică (tf.square(y_true - y_pred)) cu penalty atunci când semnele lui y_true și y_pred sunt diferite.
  • Returnează media variabilei loss din 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)
Editează și rulează codul