ฟังก์ชัน loss แบบกำหนดเอง
ที่ผ่านมา เราใช้ mean squared error เป็น loss function ซึ่งทำงานได้ดี แต่สำหรับการพยากรณ์ราคาหุ้น การสร้าง loss function แบบกำหนดเองอาจมีประโยชน์มากกว่า เพราะช่วยให้โมเดลเรียนรู้ในแบบที่เราต้องการได้อย่างเฉพาะเจาะจง
ตัวอย่างเช่น เราจะสร้าง loss function แบบกำหนดเองที่กำหนดบทลงโทษหนักเป็นพิเศษ เมื่อโมเดลพยากรณ์ทิศทางการเคลื่อนไหวของราคาผิดทิศ วิธีนี้จะช่วยให้โครงข่ายประสาทเทียมเรียนรู้ที่จะพยากรณ์ทิศทางราคาได้ถูกต้องมากขึ้น
ในการทำเช่นนี้ เราต้องเขียนฟังก์ชันที่รับอาร์กิวเมนต์ (y_true, y_predicted) และใช้ฟังก์ชันจาก backend keras (ผ่าน tensorflow) เพื่อหากรณีที่ค่าจริงกับค่าพยากรณ์มีเครื่องหมายไม่ตรงกัน แล้วกำหนดบทลงโทษในกรณีเหล่านั้น
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Machine Learning สำหรับการเงินด้วย Python
คำแนะนำการฝึกหัด
- กำหนดอาร์กิวเมนต์ของฟังก์ชัน
sign_penalty()ให้เป็นy_trueและy_pred - คูณค่า squared error (
tf.square(y_true - y_pred)) ด้วยpenaltyเมื่อเครื่องหมายของy_trueและy_predต่างกัน - ส่งคืนค่าเฉลี่ยของตัวแปร
lossจากฟังก์ชัน ซึ่งก็คือ mean squared error (พร้อมบทลงโทษสำหรับกรณีที่เครื่องหมายของค่าจริงและค่าพยากรณ์ตรงข้ามกัน)
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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)