Користувацька функція втрат
Дотепер ми використовували середньоквадратичну помилку як функцію втрат. Це працює добре, але для прогнозування ціни акції інколи корисно реалізувати користувацьку функцію втрат. Користувацька функція втрат може покращити роботу моделі в заданий нами спосіб. Наприклад, ми створимо функцію втрат із великим штрафом за прогноз руху ціни в хибному напрямку. Це допоможе нашій мережі принаймні передбачати напрямок руху ціни правильно.
Для цього нам потрібно написати функцію, яка приймає аргументи (y_true, y_predicted). Ми також використаємо функціональність бекенда keras (на базі tensorflow), щоб знайти випадки, коли знак істинного значення і прогнозу не збігаються, і застосувати до них штраф.
Ця вправа є частиною курсу
Machine Learning для фінансів у Python
Інструкції до вправи
- Задайте аргументи функції
sign_penalty()якy_trueіy_pred. - Помножте квадратичну помилку (
tf.square(y_true - y_pred)) наpenalty, коли знакиy_trueіy_predрізні. - Поверніть із функції середнє значення змінної
loss— це і є середньоквадратична помилка (з нашим штрафом за протилежні знаки фактичних значень та прогнозів).
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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)