開始使用免費開始

自訂損失函式

到目前為止,我們一直使用均方誤差作為損失函式。這樣做沒問題,不過在股價預測上,自訂損失函式會更有幫助。自訂損失函式可以針對我們在意的方向來提升模型表現。例如,我們要建立一個自訂損失函式,對於「預測的漲跌方向」與實際相反的情況給予較大的懲罰。這可以幫助網路至少學會正確預測價格的變動方向。

為了做到這點,我們需要撰寫一個接受 (y_true, y_predicted) 作為引數的函式。我們也會使用後端 keras(使用 tensorflow)的功能,找出實際值與預測值符號不一致的情況,然後對那些情況施加懲罰。

本練習屬於課程

Python 金融 Machine Learning

檢視課程

練習說明

  • 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)
編輯並執行程式碼