
อะไรคือ Feature Section?
Feature Selection แปลเป็นไทยได้ตรงตัวเลยก็คือ “การเลือกฟีเจอร์” หรือ การเลือกคุณลักษณะของข้อมูลที่เหมาะสมสำหรับการทำงานของ Machine Learning ถ้าพูดให้ง่ายขึ้นอีกก็คือ เลือกว่าคอลัมน์ไหนในตัวข้อมูลที่เราจะเลือกใช้งานนั่นเอง
จากบทความที่แล้ว ในเรื่อง “พอกันทีกับความผิดพลาดเดิมๆ ด้วยการสร้างโมเดล Machine Learning ด้วยฟีเจอร์ทั้งหมดที่มี!“

จากบทความที่แล้ว ผู้อ่านก็จะเห็นแล้วว่าการโยนฟีเจอร์ทั้งหมดเข้าไปทำงานทันทีโดยไม่ผ่านกระบวนการใดๆ เลย สามารถก่อให้เกิดปัญหาใหญ่ๆได้หลายอย่าง ดังนั้น ในบทความนี้ เราจึงขอนำเสนอหนึ่งในวิธีการพื้นฐานที่ใช้สำหรับการเลือกฟีเจอร์ที่มีชื่อว่า “Recursive Feature Selection” ซึ่งเป็นวิธีการที่ไม่ซับ สามารถนำมาประยุกต์ใช้ในการเลือกฟีเจอร์สำหรับมือใหม่ได้อย่างไม่ยากค่ะ ทำให้สามารถหลีกเลี่ยงปัญหาที่อาจจะเกิดขึ้นได้จากการมีฟีเจอร์ที่มากเกินไปได้ระดับหนึ่งค่ะ
Recursive Feature Selection

“Recursive Feature Selection” เป็น โมดูลนึงที่ Sklearn เตรียมเอาไว้ให้ผู้ใช้ที่ต้องการทำ Machine Learning ด้วย Python ได้เรียกใช้เพื่อการกำหนดการเลือกฟีเจอร์ที่จะนำมาใช้งานได้อย่างไม่ยาก
โมดูนี้มีหลักการทำงานที่ง่ายๆ คือ การวนลูปเลือกฟีเจอร์ หรือกลุ่มของฟีเจอร์ แล้วทำการทดสอบการสร้างโมเดลด้วย Machine Learning เพื่อหาว่า ฟีเจอร์ชุดใด ทำให้สามารถสร้างโมเดลที่มีประสิทธิภาพสูงสุดได้ จากนั้น จึงเลือกฟีเจอร์นั้นๆ เพื่อใช้งานต่อไป
หลักการทำงานในการเลือกฟีเจอร์ ก็คือ เริ่มต้นด้วยการใช้ฟีเจอร์ทั้งหมดก่อน และทำการ ตัดฟีเจอร์ที่มีความเกี่ยวข้องน้อยที่สุดออกไป เพื่อทำให้ขนาดของฟีเจอร์ลดลง จนกว่าจะได้มาซึ่งชุดของฟีเจอร์ที่เล็กที่สุด แต่ยังคงมีประสิทธิภาพการทำงานที่ดีนั่นเอง
อัลกอริทึ่ม Stepwise Recursive Feature Selection
อัลกอริทึ่มที่ใช้ในการทำงาน มีดังนี้
- ใช้ฟีเจอร์ทั้งหมดในการเทรนโมเดล Machine Learning
- ทำการคำนวณค่าความสำคัญของฟีเจอร์แต่ละตัวโดยใชฟังชันก์ของ sklearn เช่น coef_ หรือ feature_importance_
- เรียงลำดับความสำคัญของฟีเจอร์ และตัดฟีเจอร์ที่มีความสำคัญน้อยที่สุดออกไป
- วนรอบทำในข้อที่ 2-3 จนได้จำนวนฟีเจอร์ที่ต้องการ
Source Code
พูดกันถึงขั้นตอนการทำงานกันมาแล้ว คราวนี้เรามาดู Code กันบ้างดีกว่าค่ะ ตัวอย่างโปรแกรมการทำงานที่สามารถนำไปประยุกต์ใช้งาน แสดงได้ดังรูปด้านล่าง

โดยในการใช้งานฟังก์ชัน RFE นี้ มีพารามิเตอร์ที่สำคัญ ดังนี้
- estimator: โมเดล Machine Learning: Supervised ที่เราจะใช้
- n_feature_to_select: ตัวนี้จะเป็นตัวที่บอกว่าเราจะเลือกฟีเจอร์ซักกี่ตัวในการทำโมเดล ถ้าเราปล่อยว่างไว้ เค้าจะใช้ 50% ของฟีเจอร์ทั้งหมด อย่างในที่นี้เราเลือก 10 คือจะใช้ฟีเจอร์ที่ดีที่สุด 10 ตัว
- step: คือ จำนวนฟีเจอร์ที่เราต้องการกำจัดออกไปในแต่ละรอบ ในที่นี้เลือก 1 หรือรอบละ 1 ตัวนั่นเอง
- importance_getter: ตัววัดว่าเราจะใช้ค่าอะไรเป็นตัววัดความสำคัญของฟีเจอร์นั้นๆ
ง่ายๆเท่านี้เราก็สามารถลดจำนวนของฟีเจอร์ลงได้ ประหยัดพลังการคำนวณและยังส่งผลให้โมเดลของเราทำงานได้ดีขึ้นอีกด้วย