การสร้างโมเดล Ensemble แบบต่างๆ

เทคนิค Ensemble เป็นเทคนิคที่ใช้โมเดล classification หลายๆ โมเดล (model) มาช่วยในการหาคำตอบ เทคนิคนี้ได้เป็นเทคนิคที่มีประสิทธิภาพสูงซึ่งพบได้จากการแข่งขันต่างๆ เช่น Netflix หรือ Kaggle ที่ผู้ชนะมักจะใช้เทคนิค Ensemble นี้ (http://mlwave.com/kaggle-ensembling-guide/) หรือในงานวิจัยต่างๆ ครับ เช่น งานวิจัยเรื่อง Bagging Model with Cost Sensitive Analysis on Diabetes Data หรือ Boosting-based ensemble learning with penalty profiles for automatic Thai unknown word recognition สำหรับในบทความนี้ผมขออธิบายหลักการของเทคนิค Ensemble แบบง่ายๆ 3 เทคนิคครับ นั่นคือ

  • Vote Ensemble เป็นการใช้เทรนนิ่ง ดาต้า (training data) ชุดเดียวกันแต่สร้างโมเดลด้วยเทคนิคต่างๆ กัน
  • Bootstrap Aggregating (Bagging) เป็นการสุ่มเทรนนิ่ง ดาต้า (training data) ให้เป็นหลายชุด แต่สร้างโมเดลด้วยเทคนิคเดียวกันทั้งหมด
  • Random Forest เป็นเทคนิคที่คล้ายๆ กับ Bagging แต่แทนที่จะสุ่มข้อมูลอย่างเดียวก็ทำการสุ่มเลือกแอตทริบิวต์ (ฟีเจอร์) ต่างๆ ออกมาเป็นหลายๆ ชุดด้วย และสร้างโมเดลด้วยเทคนิค Decision Tree หลายๆ ต้นครับ

แต่ก่อนที่จะไปดูรายละเอียดของแต่ละเทคนิคเรามาดูเรื่องข้อมูลที่ใช้ในการสร้างโมเดลกันก่อนครับ ข้อมูลที่ใช้ในการสร้างโมเดลเราจะเรียกว่า เทรนนิ่ง ดาต้า (training data) ซึ่งจะประกอบด้วยแอตทริบิวต์ทั่วไป (หรือตัวแปรต้นในทางสถิติ) และแอตทริบิวต์ประเภทลาเบล (label) หรือ คลาส (class) คำตอบที่เราสนใจให้โมเดลทำนาย (predict) ออกมา (หรือตัวแปรตามในทางสถิติ) ข้อมูลเทรนนิ่ง ดาต้า แสดงได้ดังในรูปด้านล่าง ซึ่งในซอฟต์แวร์ RapidMiner Studio 6 แอตทริบิวต์ทั่วไปจะแสดงด้วยสีเทา และแอตทริบิวต์ประเภทลาเบลจะแสดงด้วยสีเขียว

train_test.021จากรูปจะเป็นการนำเทรนนิ่ง ดาต้าซึ่งมีแอตทริบิวต์เป็นคำต่างๆ ในข้อความ email และแอตทริบิวต์ประเภทลาเบลบ่งบอกว่าแต่ละข้อความเป็นสแปม (spam email) หรือปกติ (normal email) จากข้อมูลเทรนนิ่ง ดาต้านี้เราสามารถสร้างเป็นโมเดล Decision Tree ได้ในด้านขวามือซึ่งใช้แค่ 2 แอตทริบิวต์ คือ Free และ Won เท่านั้น (ท่านใดสนใจวิธีการสร้างโมเดล Decision Tree ดูได้จากบทความ “ขั้นตอนการสร้างโมเดล Decision Tree“) หลังจากที่เรารู้จักกับเทรนนิ่ง ดาต้าแล้วถัดมาผมขอสรุปขั้นตอนในการสร้างโมเดล classification ก่อนครับ การสร้างโมเดลนี้สามารถแบ่งได้เป็น 2 ขั้นตอนย่อย ดังแสดงในรูปด้านล่างครับ

train_test.022

  • การสร้างโมเดล (build model) เป็นการนำเทรนนิ่ง ดาต้า มาสร้างโมเดลซึ่งในขั้นตอนนี้ควรจะมีการวัดประสิทธิภาพของโมเดลก่อนนำไปใช้งานครับ ซึ่งการวัดประสิทธิภาพของโมเดลก็มี 3 วิธีใหญ่ ดังที่อธิบายไว้ในบทความเรื่อง “การแบ่งข้อมูลเพื่อนำมาทดสอบประสิทธิภาพของโมเดล” ครับ
  • การนำโมเดลไปใช้งาน (apply model) เป็นการนำโมเดลที่สร้างได้ไปใช้ทำนายหรือหาคำตอบให้กับข้อมูลใหม่ซึ่งยังไม่รู้คลาสคำตอบครับ

เราได้รู้จักกับการโมเดล classification กันไปแล้ว ต่อไปผมจะแนะนำเทคนิค Ensemble ซึ่งเป็นการนำหลายๆ โมเดลมาช่วยกันหาคำตอบครับ สามารถแสดง concept การทำงานของเทคนิค Ensemble ได้ดังรูปด้านล่างครับ

train_test.023

จากรูปจะเห็นว่าเป็นการนำเทรนนิ่ง ดาต้า มาสร้างโมเดลต่างๆ โดยข้อมูลเทรนนิ่ง ดาต้าเหล่านี้จะเป็นข้อมูลชุดเดียวกันก็ได้ (เช่น วิธีการ Vote Ensemble) หรือจะเป็นข้อมูลที่ต่างกันก็ได้ (เช่น วิธี Bagging และ RandomForest) หลังจากได้โมเดลมาชุดหนึ่งแล้วจึงนำไปทำนายข้อมูลที่ยังไม่รู้คำตอบ สำหรับการทำนายด้วยเทคนิค Ensemble ซึ่งมีหลายๆ โมเดลนี้ แต่ละโมเดลก็จะให้คำตอบออกมา ในขั้นตอนสุดท้ายเราจะต้องนำคำตอบเหล่านี้มารวมกันเพื่อดูว่าคำตอบไหนเหมาะสมที่สุด โดยอาจจะใช้วิธีการโหวต (vote) เลือกคำตอบที่ตอบตรงกันมากที่สุดก็ได้ครับ หลักการสร้างโมเดล Ensemble คือโมเดลที่สร้างควรจะมีความหลากหลายเพื่อให้ทำนายข้อมูลแบบต่างๆ กันได้มาก การสร้างโมเดลที่หลากหลายนี้ อาจจะทำได้โดยการใช้เทคนิค classification หลายๆ ประเภท หรือ การสร้างเทรนนิ่ง ดาต้า ที่มีลักษณะต่างๆ กัน เช่น มีตัวอย่างต่างๆ กัน หรือมีแอตทริบิวต์ต่างๆ กัน ผมขอสรุปวิธีการสร้างโมเดล Ensemble 3 แบบใหญ่ดังนี้ครับ

1. Vote Ensemble

วิธีการนี้เป็นการนำเทรนนิ่ง ดาต้าชุดเดียวกัน แต่เพื่อให้โมเดลมีความหลากหลายมากขึ้นจึงเลือกที่จะสร้างโมเดลด้วยเทคนิค classification ที่ต่างกัน ขั้นตอนการสร้างโมเดลแสดงได้ดังรูปด้านล่าง ซึ่งใช้ 3 เทคนิคที่ต่างกัน คือ เทคนิค Decision Tree, เทคนิค K-Nearest Neighbours (K-NN) และเทคนิค Neural Networks ครับ

train_test.024

 

หลังจากที่สร้างโมเดล Ensemble ด้วย 3 เทคนิคได้แล้ว ขั้นตอนถัดไป คือ การนำโมเดลที่สร้างได้ไปทำนายข้อมูลใหม่ ดังแสดงในรูปด้านล่าง

train_test.025

 

จากรูปจะมีข้อมูลใหม่ (new data) ที่ยังไม่รู้คลาสคำตอบ 2 ตัวอย่าง (example) ซึ่ง

  • โมเดล Decision Tree (โมเดลที่ 1) ทำนายคำตอบออกมาว่าข้อมูลใหม่ตัวอย่างที่ 1 เป็น spam และตัวอย่างที่ 2 เป็น normal
  • โมเดล K-Nearest Neighbours (K-NN) ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ
  • โมเดล Neural Network ก็ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ

จากผลการทำนายของท้ังสามโมเดลเราจะได้ว่า ข้อมูลใหม่ตัวอย่างที่ 1 จะตอบเป็น spam เนื่องจากทั้ง 3 โมเดลตอบเหมือนกันว่าเป็น spam แต่ข้อมูลใหม่ตัวอย่างที่ 2 จะตอบเป็น spam เนื่องจาก 2 ใน 3 โมเดลตอบตรงกันว่าเป็น spam ครับ

2. Bootstrap Aggregating (Bagging)

วิธีการที่สองนี้แตกต่างจากวิธีการ Vote Ensemble โดยการสร้างโมเดลที่หลากหลายนั้นใช้การสุ่มข้อมูลตัวอย่างจากเทรนนิ่ง ดาต้า ออกมาเป็นหลายๆ ชุด (แทนที่จะใช้ข้อมูลเทรนนิ่ง ดาต้าทั้งหมดแบบวิธีการ Vote Ensemble) แต่ใช้การสร้างโมเดลด้วยเทคนิค classification เดียวกัน เช่น ใช้เทคนิค Decision Tree หรือ เทคนิค Neural Networks ทั้งหมด ดังแสดงในรูปด้านล่าง ซึ่งใช้เทคนิค Decision Tree ทั้งสามโมเดลครับ แม้ว่าจะเป็นเทคนิค Decision Tree เหมือนกันแต่ข้อมูลที่ใช้ในการสร้างโมเดลต่างกันก็ทำให้โมเดลที่สร้างขึ้นมาได้มีลักษณะที่ต่างๆ กันด้วยครับ

train_test.026

 

ในลักษณะเดียวกันหลังจากที่สร้างโมเดล Bagging ด้วยเทคนิค Decision Tree ได้แล้ว ขั้นตอนถัดไป คือ การนำโมเดลที่สร้างได้ไปทำนายข้อมูลใหม่ ดังแสดงในรูปด้านล่าง

train_test.027

 

จากรูปจะมีข้อมูลใหม่ (new data) ที่ยังไม่รู้คลาสคำตอบ 2 ตัวอย่าง (example) ซึ่ง

  • โมเดล Decision Tree (โมเดลที่ 1) ทำนายคำตอบออกมาว่าข้อมูลใหม่ตัวอย่างที่ 1 เป็น spam และตัวอย่างที่ 2 เป็น normal
  • โมเดล Decision Tree (โมเดลที่ 2) ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ
  • โมเดล Decision Tree (โมเดลที่ 3) ก็ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ

จากผลการทำนายของท้ังสามโมเดลเราจะได้ว่า ข้อมูลใหม่ตัวอย่างที่ 1 จะตอบเป็น spam เนื่องจากทั้ง 3 โมเดลตอบเหมือนกันว่าเป็น spam แต่ข้อมูลใหม่ตัวอย่างที่ 2 จะตอบเป็น spam เนื่องจาก 2 ใน 3 โมเดลตอบตรงกันว่าเป็น spam ครับ

3. Random Forest 

เป็นวิธีการที่คล้ายกับ Bagging มากแต่เพิ่มการสร้างความหลากหลายของโมเดลด้วยการสุ่มแอตทริบิวต์ด้วยแทนที่จะเป็นการสุ่มเฉพาะข้อมูลตัวอย่างเพียงอย่างเดียวเหมือน Bagging ครับ และเทคนิคที่ใช้ในการสร้างโมเดลก็เป็นเพียงแค่ Decision Tree อย่างเดียวครับ ดังแสดงในรูปด้านล่าง ซึ่งมีการสุ่มแอตทริบิวต์ต่างๆ กันโดย

  • เทรนนิ่ง ดาต้าชุดที่ 1 ใช้แอตทริบิวต์สองตัว คือ แอตทริบิวต์ Free และ Cash
  • เทรนนิ่ง ดาต้าชุดที่ 2 ใช้แอตทริบิวต์สองตัว คือ แอตทริบิวต์ Won และ Cash
  • เทรนนิ่ง ดาต้าชุดที่ 3 ใช้แอตทริบิวต์สองตัว คือ แอตทริบิวต์ Free และ Won

แม้ว่าจะเป็นเทคนิค Decision Tree เหมือนกันแต่ข้อมูลและแอตทริบิวต์ที่ใช้ในการสร้างโมเดลต่างกันก็ทำให้โมเดลที่สร้างขึ้นมาได้มีลักษณะที่ต่างๆ กันด้วยครับ

train_test.028

ในลักษณะเดียวกันหลังจากที่สร้างโมเดล Bagging ด้วยเทคนิค Decision Tree ได้แล้ว ขั้นตอนถัดไป คือ การนำโมเดลที่สร้างได้ไปทำนายข้อมูลใหม่ ดังแสดงในรูปด้านล่าง

train_test.029

จากรูปจะมีข้อมูลใหม่ (new data) ที่ยังไม่รู้คลาสคำตอบ 2 ตัวอย่าง (example) ซึ่ง

  • โมเดล Decision Tree (โมเดลที่ 1) ทำนายคำตอบออกมาว่าข้อมูลใหม่ตัวอย่างที่ 1 เป็น spam และตัวอย่างที่ 2 เป็น normal
  • โมเดล Decision Tree (โมเดลที่ 2) ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ
  • โมเดล Decision Tree (โมเดลที่ 3) ก็ทำนายคำตอบออกมาว่าข้อมูลใหม่ทั้งสองตัวอย่างเป็น spam ทั้งคู่ครับ

จากผลการทำนายของท้ังสามโมเดลเราจะได้ว่า ข้อมูลใหม่ตัวอย่างที่ 1 จะตอบเป็น spam เนื่องจากทั้ง 3 โมเดลตอบเหมือนกันว่าเป็น spam แต่ข้อมูลใหม่ตัวอย่างที่ 2 จะตอบเป็น spam เนื่องจาก 2 ใน 3 โมเดลตอบตรงกันว่าเป็น spam ครับ

ถึงตอนนี้ผมคิดว่าท่านผู้อ่านน่าจะได้รู้จักกับเทคนิค Ensemble ไปแล้วครับ ลองเลือกเทคนิค Ensemble ที่เหมาะสมไปใช้งานได้แล้วครับ ^^

Leave a Reply

Your email address will not be published. Required fields are marked *