Niestandardowa funkcja straty
Do tej pory korzystaliśmy ze średniego błędu kwadratowego jako funkcji straty. Sprawdza się to dobrze, jednak przy przewidywaniu cen akcji warto czasem zaimplementować własną funkcję straty. Taka niestandardowa funkcja może pomóc poprawić działanie modelu w wybrany przez nas sposób. Na przykład stworzymy teraz funkcję straty z wysoką karą za przewidywanie ruchów ceny w złym kierunku. Dzięki temu sieć nauczy się przynajmniej poprawnie przewidywać kierunek zmian ceny.
Aby to zrobić, musimy napisać funkcję przyjmującą argumenty (y_true, y_predicted). Skorzystamy też z funkcjonalności backendu keras (opartego na tensorflow), aby wykryć przypadki, w których prawdziwa wartość i predykcja mają różne znaki, a następnie nałożyć na nie karę.
To ćwiczenie jest częścią kursu
Uczenie maszynowe w finansach z Pythonem
Instrukcje do ćwiczenia
- Ustaw argumenty funkcji
sign_penalty()jakoy_trueiy_pred. - Pomnóż błąd kwadratowy (
tf.square(y_true - y_pred)) przezpenaltyw przypadkach, gdy znakiy_trueiy_predsą różne. - Zwróć średnią zmiennej
lossz funkcji – jest to średni błąd kwadratowy (z naszą karą za przeciwne znaki wartości rzeczywistych i predykcji).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)