自訂損失函式
到目前為止,我們一直使用均方誤差作為損失函式。這樣做沒問題,不過在股價預測上,自訂損失函式會更有幫助。自訂損失函式可以針對我們在意的方向來提升模型表現。例如,我們要建立一個自訂損失函式,對於「預測的漲跌方向」與實際相反的情況給予較大的懲罰。這可以幫助網路至少學會正確預測價格的變動方向。
為了做到這點,我們需要撰寫一個接受 (y_true, y_predicted) 作為引數的函式。我們也會使用後端 keras(使用 tensorflow)的功能,找出實際值與預測值符號不一致的情況,然後對那些情況施加懲罰。
本練習屬於課程
Python 金融 Machine Learning
練習說明
- 將
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)