ยินดีต้อนรับสู่โลกของ Ensemble Methods!
ในบทเรียนก่อนหน้านี้ เราได้เรียนรู้เรื่องต้นไม้ตัดสินใจ (Decision Trees) แบบเดี่ยวกันไปแล้ว ซึ่งแม้ว่าจะเข้าใจง่ายและเห็นภาพชัดเจน แต่ก็มีจุดอ่อนสำคัญคือมันไม่มีความเสถียร (Unstable) เอาเสียเลย แค่เราเปลี่ยนข้อมูลไปนิดเดียว ต้นไม้ก็อาจเปลี่ยนรูปทรงไปคนละเรื่องได้ ซึ่งภาวะนี้เรียกว่า ความแปรปรวนสูง (High Variance)
เพื่อแก้ไขปัญหานี้ เราจึงต้องใช้ Ensemble Methods ลองนึกภาพ "Ensemble" เหมือนกับคณะประสานเสียงหรือวงออร์เคสตราสิครับ นักร้องคนหนึ่งอาจจะร้องเพี้ยนไปบ้าง แต่เมื่อทุกคนร้องประสานกัน เสียงโดยรวมก็จะออกมาไพเราะและมั่นคง ในบทนี้เราจะมาเรียนรู้วิธีการนำต้นไม้หลายๆ ต้นมารวมกันเพื่อสร้างโมเดลที่ทรงพลัง ได้แก่ Bagging, Random Forests และ Boosting ครับ
1. Bagging (Bootstrap Aggregating)
Bagging เป็นเทคนิคอันชาญฉลาดในการลดความแปรปรวนของวิธีการเรียนรู้เชิงสถิติ ชื่อของมันมาจากการรวมคำสองคำเข้าด้วยกัน คือ Bootstrap และ Aggregating
Bootstrapping คืออะไร?
ไม่ต้องกังวลไปถ้าฟังดูแล้วงง! จริงๆ แล้ว Bootstrapping เป็นแค่ศัพท์หรูๆ ของคำว่า "การสุ่มตัวอย่างใหม่โดยมีการแทนที่ (Resampling with replacement)" ลองจินตนาการว่าคุณมีถุงใส่ลูกแก้วที่มีหมายเลข 1-100 คุณหยิบขึ้นมา 1 ลูก จดเลขไว้ แล้ว ใส่กลับคืนลงไปในถุง ทำแบบนี้ซ้ำไปเรื่อยๆ 100 ครั้ง บางลูกอาจถูกหยิบซ้ำ บางลูกอาจไม่ถูกหยิบเลยก็ได้ ชุดข้อมูลใหม่ 100 ตัวอย่างที่คุณได้มานี้แหละครับคือ Bootstrap Sample
กระบวนการของ Bagging
1. สร้างชุดข้อมูล Bootstrap B ชุด จากข้อมูลสอน (Training data) ของคุณ
2. สร้างต้นไม้ตัดสินใจแบบลึก (Deep, unpruned tree) ขึ้นมาหนึ่งต้นสำหรับแต่ละชุดข้อมูล
3. รวมผลลัพธ์เข้าด้วยกัน:
- สำหรับ Regression: ใช้วิธีหาค่าเฉลี่ยของผลลัพธ์จากต้นไม้ทั้งหมด B ต้น
- สำหรับ Classification: ใช้วิธี "เสียงข้างมาก" (Majority vote) คือเลือกกลุ่มที่ถูกทำนายบ่อยที่สุด
ทำไมต้องทำแบบนี้?
การหาค่าเฉลี่ยจากต้นไม้ที่มีความแปรปรวนสูงหลายๆ ต้น จะช่วยหักล้าง "สัญญาณรบกวน" (Noise) ออกไป ทำให้การทำนายมีความเสถียรขึ้นมาก Bagging ช่วยลดความแปรปรวนได้โดยที่ยังคงความลำเอียง (Bias) ไว้ในระดับต่ำ
ทบทวนสั้นๆ: ข้อดีของ Bagging คือทำให้การทำนายเชื่อถือได้มากขึ้น แต่ข้อเสียก็คือเราไม่สามารถวาดแผนผังต้นไม้เพียงต้นเดียวเพื่ออธิบายได้อีกต่อไป เรากำลังแลก ความสามารถในการตีความ (Interpretability) เพื่อแลกกับ ความแม่นยำ (Accuracy) ครับ
รู้หรือไม่? โดยเฉลี่ยแล้ว Bootstrap sample จะประกอบด้วยข้อมูลประมาณ 2/3 ของข้อมูลตั้งต้น ส่วนอีก 1/3 ที่เหลือเราเรียกว่า Out-of-Bag (OOB) เราสามารถใช้ข้อมูล OOB เหล่านี้ทดสอบความแม่นยำของโมเดลได้โดยไม่ต้องแยกชุดข้อมูล Validation ออกมาต่างหาก!
2. Random Forests
Random Forests คือ "ขั้นกว่า" ของ Bagging แม้ Bagging จะดีมาก แต่มีจุดอ่อนอยู่อย่างหนึ่งคือ หากข้อมูลของคุณมีตัวแปรหลัก (Predictor) ที่ทรงพลังมากเพียงตัวเดียว ต้นไม้ส่วนใหญ่ก็จะเลือกใช้ตัวแปรนั้นในการแบ่งกิ่งก้านครั้งแรก ทำให้ต้นไม้ทุกต้นดูเหมือนกันไปหมด (เกิดความ สัมพันธ์กัน - Correlated)
การนำสิ่งที่เหมือนกันมาหาค่าเฉลี่ยไม่ช่วยลดความแปรปรวนได้เท่ากับการนำสิ่งที่แตกต่างกันมาหาค่าเฉลี่ย Random Forests จึงเข้ามาแก้ปัญหานี้ด้วยการลดความสัมพันธ์ระหว่างต้นไม้ (Decorrelating)
Random Forests ทำงานอย่างไร
เหมือนกับ Bagging เลย คือเราสร้างต้นไม้จำนวนมากจาก Bootstrap samples แต่มีเงื่อนไขอยู่ว่า ทุกครั้งที่เราจะแบ่งกิ่งก้าน (Split) ในต้นไม้ เราจะเลือกใช้ได้เพียงตัวแปรที่สุ่มมาเป็นเซตย่อยขนาด \( m \) จากตัวแปรทั้งหมด \( p \) ตัวเท่านั้น
โดยทั่วไปเราจะกำหนด:
- สำหรับ Regression: \( m \approx p/3 \)
- สำหรับ Classification: \( m \approx \sqrt{p} \)
อุปมาอุปไมย: ลองนึกภาพว่าคุณกำลังจ้างทีมสืบสวน ใน Bagging นักสืบทุกคนจะดูเบาะแสหลักอันเดียวกันก่อน แต่ใน Random Forest คุณบังคับให้นักสืบบางคนต้องเมินเบาะแสหลักแล้วไปดูเบาะแสเล็กๆ น้อยๆ แทน ด้วยวิธีนี้ ทีมสืบสวนจะค้นพบข้อมูลที่คนเพียงคนเดียว (หรือกลุ่มคนที่คิดเหมือนกันหมด) อาจมองข้ามไป!
ประเด็นสำคัญ: ถ้า \( m = p \) ตัว Random Forest จะกลายเป็น Bagging ทันที การเลือก \( m < p \) ทำให้ต้นไม้แต่ละต้นมีความแตกต่างกัน ซึ่งช่วยลดความแปรปรวนได้ดียิ่งขึ้นไปอีก
3. Boosting
Boosting ใช้แนวทางที่ต่างออกไปโดยสิ้นเชิง ในขณะที่ Bagging และ Random Forests สร้างต้นไม้พร้อมๆ กัน (ขนานกัน) แต่ Boosting จะสร้างต้นไม้แบบ ต่อเนื่อง (Sequentially) คือสร้างทีละต้นตามลำดับ
แนวคิด: เรียนรู้จากข้อผิดพลาด
ใน Boosting ต้นไม้แต่ละต้นจะถูกสร้างขึ้นโดยใช้ข้อมูลจากต้นไม้ก่อนหน้า เราจะไม่สร้างต้นไม้ลึกๆ แต่เราจะสร้างต้นไม้เล็กๆ (มักเรียกว่า Stumps หรือตอไม้) ซึ่งจะค่อยๆ ปรับปรุงโมเดลในจุดที่ยังทำได้ไม่ดี
กระบวนการของ Boosting (แบบสรุปง่ายๆ)
1. เริ่มต้นด้วยโมเดลง่ายๆ (เช่น ค่าเฉลี่ยของข้อมูล)
2. คำนวณ "ข้อผิดพลาด" (Residuals) ของโมเดลปัจจุบัน
3. สร้างต้นไม้เล็กๆ ใหม่ขึ้นมาเพื่อทำนายค่า Residuals เหล่านี้ (ไม่ใช่ทำนายผลลัพธ์ตั้งต้น)
4. เพิ่มต้นไม้นี้เข้าไปในโมเดล แต่เพิ่มเพียงเล็กน้อย (ปรับจูนด้วยอัตราการเรียนรู้ - Learning rate)
5. ทำซ้ำกระบวนการนี้เป็นพันๆ ครั้ง
อุปมาอุปไมย: ให้คิดว่า Boosting เหมือนกับช่างแกะสลัก ต้นไม้ต้นแรกคือการตัดหินก้อนใหญ่ให้เป็นรูปทรงคร่าวๆ ส่วนต้นไม้ต้นต่อๆ ไปก็เหมือนกับการค่อยๆ ขัดแต่งด้วยสิ่วทีละนิด เพื่อปรับรูปทรงให้ละเอียดขึ้นและแก้ข้อบกพร่องที่เหลืออยู่จากขั้นตอนก่อนหน้า
พารามิเตอร์สำคัญในการจูน Boosting
- จำนวนต้นไม้ (B): ไม่เหมือน Bagging ตรงที่ Boosting สามารถเกิด Overfit ได้หาก \( B \) มากเกินไป เราจึงต้องใช้ Cross-validation ในการหาจำนวนที่เหมาะสม
- Shrinkage (\( \lambda \)): ตัวเลขน้อยๆ (เช่น 0.01) ที่ควบคุมความเร็วในการเรียนรู้ การเรียนรู้ที่ช้าๆ มักจะให้ผลลัพธ์ที่ดีกว่า
- Interaction Depth (d): จำนวนครั้งในการแบ่งกิ่งในแต่ละต้น บ่อยครั้งที่ \( d=1 \) (แบบ Stump) ให้ผลลัพธ์ที่ดีมากอย่างเหลือเชื่อ
ประเด็นสำคัญ: Boosting คือ "ผู้เรียนรู้ที่ค่อยเป็นค่อยไป" ซึ่งโฟกัสที่การแก้ไขข้อผิดพลาดจากรุ่นพี่ แต่มันมักจะเป็นวิธีที่แม่นยำที่สุดหากจูนพารามิเตอร์อย่างระมัดระวังเพื่อป้องกันการ Overfit
4. การวัดความสำคัญของตัวแปร (Variable Importance Measures)
เนื่องจากตอนนี้เราดูต้นไม้เป็นร้อยๆ ต้น เราจึงไม่สามารถวาดต้นไม้ต้นเดียวเพื่อดูว่าตัวแปรไหนสำคัญได้ เราจึงต้องใช้ Variable Importance Measures แทน
- สำหรับ Regression: เราบันทึกผลรวมของค่าที่ Residual Sum of Squares (RSS) ลดลงจากการแบ่งกิ่งที่ใช้ตัวแปรนั้นๆ แล้วหาค่าเฉลี่ยจากทุกต้นไม้ ค่าที่สูงบ่งบอกถึงความสำคัญของตัวแปรนั้น
- สำหรับ Classification: ทำแบบเดียวกัน แต่เปลี่ยนจากการวัด RSS เป็นการลดลงของ Gini Index
ตารางสรุป: วิธีไหนคืออะไร?
Bagging:
- สร้างต้นไม้อย่างอิสระ (ขนานกัน)
- ใช้ตัวแปรทั้งหมดในการแบ่งแต่ละกิ่ง
- เป้าหมาย: ลดความแปรปรวน (Variance)
Random Forests:
- สร้างต้นไม้อย่างอิสระ (ขนานกัน)
- ใช้ ชุดย่อยของตัวแปรที่สุ่มขึ้นมา ในการแบ่งแต่ละกิ่ง
- เป้าหมาย: ลดความสัมพันธ์ระหว่างต้นไม้ และลดความแปรปรวน
Boosting:
- สร้างต้นไม้ตามลำดับ
- ต้นไม้แต่ละต้นจะปรับเข้าหา Residuals ของโมเดลก่อนหน้า
- เป้าหมาย: ค่อยๆ ลดความลำเอียง (Bias) และความแปรปรวน
ข้อผิดพลาดที่พบบ่อย: อย่าลืมว่าในข้อสอบ Bagging และ Random Forests จะไม่เกิด Overfit ต่อให้คุณเพิ่มจำนวนต้นไม้ (B) เข้าไป แต่ Boosting สามารถเกิด Overfit ได้ หากจำนวนต้นไม้สูงเกินไป ดังนั้นให้คอยเช็คพารามิเตอร์ Shrinkage เสมอ!
คุณทำได้อยู่แล้ว! Ensemble methods เหล่านี้คือเครื่องมือที่ทรงพลังที่สุดชิ้นหนึ่งในกล่องเครื่องมือของนักวิทยาศาสตร์ข้อมูล จงแม่นยำในตรรกะของการ "หาค่าเฉลี่ย" (Bagging/Forests) เทียบกับ "การขัดเกลา" (Boosting) แล้วคุณจะประสบความสำเร็จในการสอบ SRM อย่างแน่นอนครับ