开始使用免费开始使用

自定义损失函数

到目前为止,我们一直使用均方误差作为损失函数。这通常可行,但在股票价格预测中,实现一个自定义损失函数会更有用。自定义损失函数可以按照我们设定的方式,提升模型在特定方面的表现。例如,我们将创建一个自定义损失函数:当预测的价格变动方向与真实方向相反时,给予较大的惩罚。这样可以帮助神经网络至少学会预测正确的变动方向。

为此,我们需要编写一个接收 (y_true, y_predicted) 作为参数的函数。我们还会使用后端 keras(基于 tensorflow)的功能,找出真实值与预测值符号不一致的情况,并对这些样本施加惩罚。

本练习是课程的一部分

Python 金融机器学习

查看课程

练习说明

  • sign_penalty() 函数的参数设置为 y_truey_pred
  • y_truey_pred 的符号不同时时,将平方误差(tf.square(y_true - y_pred))乘以 penalty
  • 从函数中返回 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)
编辑并运行代码