Skip to content

Machine Learning #10 | Underfitting VS Overfitting

ห่างหายจากการเขียนบล็อกไปพอสมควรเนื่องจากก่อนหน้านี้งานค่อนข้างยุ่ง เริ่มด้วยเรื่องเบาๆ ก่อนดีกว่า

ในขั้นตอนการเทรนโมเดล เราต้องทำ cross-validation เพื่อเป็นการตรวจสอบว่าโมเดลที่เราเทรนนั้นมัน complex พอที่จะ handle หรือ generalize พอที่จะ predict data ที่เราต้องการหรือเปล่า  การทำ cross-validation นั้นเป็นการตรวจสอบเบื้องต้นว่า model ของเรามันมาถูกทางแล้วหรือยัง มีแนวโน้มจะดีขึ้นหรือไม่แค่นั้นเอง ไม่ได้สะท้อนถึงประสิทธิภาพที่แท้จริงของ model จนกว่าจะเอาไปใช้กับข้อมูลจริง

สมมุติว่าเราต้องการทำ linear regression เมื่อนำ training data มาพล็อตตามแกน x,y แล้วได้กราฟแบบนี้

จากรูปจะเห็นว่ากากบาทสีแดงมันค่อนข้างเรียงตัวตามแนวเส้นตรง ในกรณีนี้ model ของเราสามารถสร้างได้จากสมการเส้นตรง (cost function ตอน train) ได้อยู่ ซึ่งจะได้ model ประมาณนี้

แต่ … ถ้า training data เรามีแนวโน้มโค้งขึ้นไม่เป็นไปตามแนวเส้นตรงแบบนี้ล่ะ

แล้ว … ถ้าเรา train model ด้วย cost function ที่เป็นสมการเส้นตรงเดิมก็จะได้ผลตามรูปข้างล่างนี้ ซึ่งช่วงแรกๆ เหมือนจะดีแต่เมื่อดูทางขวามือของกราฟแล้วมันแทบจะไม่สอดคล้องกับข้อมูลเลย

การที่อัลกอริทึมของเราไม่สามารถ handle data ที่สำคัญหรือไม่ complex พอที่จะ handle เรียกว่า Underfitting

วิธีแก้ปัญหา underfitting คือเราต้องมีสมการสำหรับ train ที่ซับซ้อนขึ้นซึ่งอาจจะเพิ่มตัวแปรให้มากขึ้น ในความเป็นจริงการทำนายผลมักไม่ขึ้นอยู่กับตัวแปรเพียงตัวแปรเดียว อาจจะเห็นสมการ cost function ของเรามียกกำลัง 2, 3 ก็ได้

data แต่ละ data มีความจำเพาะเจาะจง หมายความว่าเราจะใช้ model เดียว อัลกอริทึมเดียวไปใช้กับทุก data ไม่ได้นะครับ ดังนั้น model ที่ดีควรจะเป็นแบบนี้

วิธีสังเกต underfitting คือถ้าเราวัดประสิทธิภาพดูผลมันจะห่วยทั้ง training data และ testing data เลย ก็ make sense นะครับเพราะอัลกอริทึมมันไม่ complex ยังไง error ก็เยอะอยู่ดี

ส่วนกรณีตรงข้ามกันคืออัลกอริทึมของเราดันไปสนใจ noise หรือ outlier ซึ่งอาจจะเป็น training data ที่เฉลยผิดหรือเป็น edge case ที่เกิดขึ้นน้อยมากแบบนี้เรียกว่า Overfitting 

ปัญหาของ overfitting model คือมันชอบหลอกลวงเราครับเพราะหากดู error มันอาจจะน้อยก็จริงแต่เมื่อเอาไปวัดความถูกต้องค่าความถูกต้องจะน้อยสวนทางกับ error

สาเหตุของ overftting คือ 1) เราอาจมี data ที่ใช้ train น้อยเกินไปทำให้ model ที่ได้มันทำงานได้ดีแค่กับ training data ของเราเท่านั้น 2) สมการที่เราใช้เราไป custom ให้มันเข้าไป training data มากเกินไปจนมันไม่ generalize

ส่วนวิธีแก้ปัญหา overfitting เราอาจจะเพิ่ม Regularization term เข้าไปในสมการ cost function เพื่อให้ model generalize มากขึ้น (ถ้าค่าของ Regularization term มากจะเป็น underfitting model) หรือเพิ่ม training data ให้มากๆ ก็ช่วยได้เหมือนกัน

ดังนั้น model ของเราควรจะมีความ generalize พอที่จะ handler data ทั่วไปได้แบบนี้ (noise ช่างมันเราไม่สนใจ)

วิธีสังเกตว่าเป็น overfitting model คือถ้าเราวัดประสิทธิภาพมันจะให้ผลดีมากกับ training data แต่จะให้ผลห่วยกับ testing data

5 Comments

  1. โต้ง โต้ง

    น่าจะเขียนเป็นหนังสือเลยนะครับ
    เขียนได้เข้าใจดีครับ

    • Kor Kor

      ยังไม่ชำนาญขนาดนั้นครับ 🙂

  2. Anonymous Anonymous

    อ่านแล้วเข้าใจค่ะ สรุปconcept ได้ดีเลยคะ

  3. Anonymous Anonymous

    ขอบคุณมากครับ อ่านสนุกดีครับ

  4. Kong Kong

    ยังคอยติดตามอยู่นะครับ มีประโยชน์และอธิบายให้เข้าใจง่ายมากครับ เป็นกำลังใจให้เขียนต่อครับ

Leave a Reply

Your email address will not be published.