/ Machine Learning

วิธีการแบ่งข้อมูลสำหรับสอนและวัดผลโมเดล

Machine Learning ประเภทที่ถูกใช้งานมากที่สุดคือ Supervised Learning ซึ่งเป็นการสอนโมเดล ให้แปลง input เป็น target ที่ต้องการ

ในขั้นตอนการสร้างโมเดล มนุษย์ต้องเป็นผู้กำหนด target ที่ถูกต้อง (label) ให้กับ input แต่ละตัว หลังจากมีข้อมูลครบถ้วนแล้ว เราต้องนำข้อมูลที่มีอยู่มาสอนและวัดผลโมเดลให้เกิดประสิทธิภาพสูงสุด โดยแบ่งข้อมูลออกเป็นหลายชุดตามจุดประสงค์ต่างๆ

แบ่งข้อมูลไว้สำหรับวัดผล

เราไม่สามารถเอาข้อมูลทั้งหมดที่มีไปใช้สอนโมเดลได้ เพราะจะไม่เหลือข้อมูลที่เป็นอิสระสำหรับทดสอบประสิทธิภาพของโมเดล อันดับแรกเราจึงต้องดึงข้อมูลออกมาส่วนหนึ่ง เรียกว่า Test set เพื่อใช้วัดความถูกต้องของโมเดลที่จะนำไปใช้จริง

แบ่งข้อมูลไว้สำหรับเลือกโมเดล

โดยปกติเรามักจะสร้างหลายโมเดล เช่น เราอาจสร้างโมเดลด้วย Decision Trees และ Neural Networks ขึ้นมาหลายๆ แบบ จากนั้นค่อยคัดเลือกโมเดลที่ดีที่สุด

ดังนั้นเราจึงต้องมีข้อมูลชุดหนึ่งสำหรับสอนโมเดล เรียกว่า Training set และอีกชุดหนึ่งสำหรับวัดผลเพื่อเลือกโมเดลที่ดีที่สุด เรียกว่า Dev set หรือ Validation set โดยเราจะใช้ข้อมูลที่ไม่ใช่ Test set มาแบ่งเป็น Training set กับ Dev set

Training / Dev / Test

สรุปคือ โดยทั่วไปเราต้องแบ่งข้อมูลออกเป็น 3 ชุด

  • Training set ใช้สอนโมเดลทั้งหมด
  • Dev set ใช้วัดผลโมเดลทั้งหมด เพื่อเลือกโมเดลที่ดีที่สุดมาใช้จริง
  • Test set ใช้วัดผลโมเดลที่ดีที่สุดที่เลือกมา

โดยปกติ เราจะเลือก Dev set และ Test set ก่อน โดยเลือกให้มีปริมาณมากพอใช้วัดผลอย่างน่าเชื่อถือได้ ส่วนข้อมูลที่เหลือจัดเป็น Training set อาจแบ่งโดยมีสัดส่วนเป็น Training : Dev : Test = 80 : 10 : 10

หลังจากเลือกโมเดลที่ดีที่สุดจากการวัดผลบน Dev set แล้ว อาจนำ Training set และ Dev set มารวมกันให้เป็น Training set ชุดที่ใหญ่ขึ้น เพื่อสอนโมเดลตัวนี้อีกครั้งก่อนวัดผลบน Test set และนำไปใช้จริง เพื่อให้เรามีข้อมูลสำหรับสอนโมเดลมากขึ้นอีกนิดหน่อย

คำถาม: เราสามารถใช้ Test set เลือกโมเดลเลยโดยไม่ต้องมี Dev set ได้มั้ย

ไม่ได้ เพราะถ้าเราเลือกโมเดลที่ดีที่สุดตามผลการวัดที่ได้จาก Test set จะทำให้ผลการวัดนี้ไม่เป็นอิสระจากโมเดล และไม่สะท้อนความถูกต้องของโมเดลในการใช้งานจริง ซึ่งขัดกับจุดประสงค์การวัดผลบน Test set

กรณีที่การแบ่งข้อมูลออกเป็น 3 ชุดยังไม่พอ

ในกรณีที่เรามีข้อมูลในสถานการณ์จริงไม่มากพอ เราอาจจะใช้ข้อมูลในสถานการณ์ใกล้เคียงกันมาเสริม ตัวอย่างเช่น สมมติว่าเราต้องการทำ image classification สำหรับรูปถ่ายจากกล้องมือถือ แต่ตอนเริ่มโครงการ เรามีข้อมูลรูปภาพที่ถ่ายโดยใช้กล้องมือถือน้อยมาก เราจึงหารูปถ่ายจากแหล่งอื่นที่คล้ายกันมาเสริม

เพื่อให้การวัดผลถูกต้อง Dev set และ Test set ต้องประกอบด้วยข้อมูลในสถานการณ์จริง ในตัวอย่างนี้คือรูปถ่ายโดยกล้องมือถือเท่านั้น ส่วน Training set มีข้อมูลในสถานการณ์ใกล้เคียงรวมอยู่ด้วยได้ ในตัวอย่างนี้คือรูปถ่ายจากแหล่งอื่นๆ

ในกรณีที่เราสร้างโมเดลแล้ว โมเดลทำงานได้ดีบน Training set แต่ทำงานได้ไม่ดีบน Dev set มีความเป็นไปได้อยู่สองประการคือ

  • โมเดล overfit กับ Training set
  • ข้อมูลจากสองแหล่งแตกต่างกันมากเกินไป

กรณีเช่นนี้ อาจารย์ Andrew Ng ผู้สอน Deep Learning บน Coursera แนะนำให้แบ่งข้อมูลส่วนหนึ่งออกมาจาก Training set เรียกว่า Train-dev set หลังจากสอนโมเดลด้วย Training set แล้ว ให้วัดผลบน Train-dev set ก่อน จนมั่นใจว่าไม่มีปัญหา overfit กับ Training set ค่อยไปวัดผลบน Dev set ถ้าโมเดลทำงานได้ดีบน Training set และ Train-dev set แต่ทำงานได้ไม่ดีบน Dev set แปลว่าลักษณะของข้อมูลจากสองแหล่งแตกต่างกันมากเกินไป ไม่สามารถใช้แทนกันได้

สรุปคำศัพท์

  • Training set ข้อมูลที่ใช้สอนโมเดลทั้งหมด
  • Train-dev set ข้อมูลที่ใช้วัดผลโมเดลทั้งหมดก่อนวัดผลบน Dev set เพื่อตรวจสอบปัญหา overfitting ในกรณีที่เราใช้ข้อมูลจากหลายแหล่งที่มีลักษณะต่างกัน
  • Dev set ข้อมูลที่ใช้วัดผลโมเดลทั้งหมด เพื่อคัดเลือกโมเดลที่ดีที่สุด
  • Test set ข้อมูลที่ใช้วัดผลโมเดลที่ดีที่สุดที่เลือกมา

ส่งท้าย

การจัดแบ่งข้อมูลเพื่อสอนโมเดลและวัดผลเป็นส่วนหนึ่งของการทำโครงการ Machine Learning ในครั้งถัดไปเราะจะพูดถึงกระบวนการในภาพใหญ่ของการทำโครงการ Machine Learning

วิธีการแบ่งข้อมูลสำหรับสอนและวัดผลโมเดล
Share this

Subscribe to Code on the Hill