自定义损失函数
到目前为止,我们一直使用均方误差作为损失函数。这通常可行,但在股票价格预测中,实现一个自定义损失函数会更有用。自定义损失函数可以按照我们设定的方式,提升模型在特定方面的表现。例如,我们将创建一个自定义损失函数:当预测的价格变动方向与真实方向相反时,给予较大的惩罚。这样可以帮助神经网络至少学会预测正确的变动方向。
为此,我们需要编写一个接收 (y_true, y_predicted) 作为参数的函数。我们还会使用后端 keras(基于 tensorflow)的功能,找出真实值与预测值符号不一致的情况,并对这些样本施加惩罚。
本练习是课程的一部分
Python 金融机器学习
练习说明
- 将
sign_penalty()函数的参数设置为y_true和y_pred。 - 当
y_true与y_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)