НачатьНачать бесплатно

Пользовательская функция потерь

До сих пор мы использовали среднеквадратичную ошибку в качестве функции потерь. Это вполне рабочий подход, однако при прогнозировании цен акций бывает полезно реализовать собственную функцию потерь. Она позволяет улучшить качество модели именно в тех аспектах, которые важны для нас. Например, мы создадим пользовательскую функцию потерь с большим штрафом за предсказание движения цены в неверном направлении. Это поможет нейронной сети научиться правильно определять направление изменения цены.

Для этого нужно написать функцию, принимающую аргументы (y_true, y_predicted). Мы также воспользуемся функциональностью бэкенда keras (через tensorflow), чтобы находить случаи, когда знаки истинного значения и предсказания не совпадают, и штрафовать за них.

Это упражнение является частью курса

Машинное обучение для финансов на 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)
Редактировать и запускать код