การคัดเลือก feature (feature selection) ด้วยวิธี Information Gain

หลายๆ ครั้งในการจำแนกประเภทข้อมูล (classification) จะพบว่าแอตทริบิวต์ (attribute) หรือ ฟีเจอร์ (feature) มีจำนวนมาก เช่น การจำแนกประเภทข้อความทัศนคติ (sentiment) ออกเป็นเชิงบวก (positive) หรือเชิงลบ (negative) นั้นจะมีจำนวนคำในข้อความต่างๆ ที่ใช้เป็นฟีเจอร์จำนวนมาก ฟีเจอร์เหล่านี้บางอันก็ไม่ได้มีความสำคัญในการแบ่งแยกคลาส (class) ออกเป็นเชิงบวกหรือเชิงลบได้ ดังนั้นจึงจำเป็นต้องทำการคัดเลือกฟีเจอร์ที่สำคัญมาใช้งาน ขั้นตอนนี้เรียกว่าการคัดเลือกฟีเจอร์ หรือ feature selection ซึ่งสามารถแบ่งได้เป็น 2 กลุ่มใหญ่ดังนี้

  • Filter approach เป็นการคัดเลือกฟีเจอร์โดยใช้การคำนวณหาค่าน้ำหนักซึ่งอาจจะเป็นค่าความสัมพันธ์ระหว่างแต่ละฟีเจอร์และคลาสต่างๆ  และจะเลือกฟีเจอร์โดยเรียงลำดับตามค่าน้ำหนักที่คำนวณได้แล้วเลือกฟีเจอร์ที่มีค่าน้ำหนักมากกว่าที่ต้องการมาใข้งานต่อไป วิธีการนี้ต่างจากวิธีการ Wrapper ตรงที่วิธีการนี้จะไม่มีการสร้างโมเดลเพื่อคัดเลือกฟีเจอร์ เทคนิคในการคำนวณค่าน้ำหนักของฟีเจอร์ต่างๆ มีหลายวิธีครับ เช่น Information Gain, Chi-Square หรือ Correlation ครับ (ในบทความนี้จะแนะนำวิธีการคัดเลือกฟีเจอร์โดยการคำนวณ Information Gain ก่อนครับ)
  • Wrapper approach เป็นการคัดเลือกฟีเจอร์ด้วยการสร้างโมเดล (classification model) ขึ้นมาจากเซตของฟีเจอร์ที่กำหนดไว้และวัดประสิทธิภาพการทำงานของโมเดล และเลือกเซตของฟีเจอร์ที่ทำให้โมเดลมีประสิทธิภาพมากที่สุดมาใช้งาน เช่น โมเดลที่ให้ค่าความถูกต้อง (accuracy) มากที่สุด การคัดเลือกฟีเจอร์ด้วยวิธีการนี้แบ่งย่อยได้เป็น 2 แบบใหญ่ๆ คือ
    • Forward Selection เป็นการสร้างโมเดลโดยการเพิ่มฟีเจอร์ทีละ 1 ฟีเจอร์ ถ้าฟีเจอร์ที่ใส่เพิ่มให้ประสิทธิภาพที่ดีก็จะเก็บไว้และเลือกฟีเจอร์อื่นๆ มาเพิ่มต่อไปจนประสิทธิภาพของโมเดลไม่ได้ดีขึ้นก็จะหยุดทำงาน
    • Backward Elimination เป็นการสร้างโมเดลที่เริ่มจากการใช้ฟีเจอร์ทั้งหมดก่อนและตัด (eliminate) ฟีเจอร์ที่ไม่สำคัญทิ้งไปทีละฟีเจอร์ถ้าประสิทธิภาพดีขึ้นก็ตัดฟีเจอร์อื่นๆ ต่อไป

train_test.001

 

ใบบทความนี้จะอธิบายการเลือกฟีเจอร์โดยการคำนวณค่า Information Gain เพื่อใช้เป็นค่าน้ำหนักในการคัดเลือกฟีเจอร์ครับ โดยใช้ตัวอย่างข้อมูลดังรูปด้านล่างซึ่งเป็นการเก็บข้อมูลสภาพภูมิอากาศในแต่ละวันและตัดสินใจว่าจะมีการจัดแข่งกีฬาหรือไม่ ในข้อมูลนี้จะมีทั้งหมด 4 ฟีเจอร์และ 1 คลาสคำตอบ และมีข้อมูลทั้งหมด 14 ตัวอย่าง (วัน) ดังนี้

  1. Outlook เป็นฟีเจอร์ที่แสดงสภาพภูมิอากาศในแต่ละวันมีทั้งหมด 3 ค่า คือ sunny, overcast และ rainy
  2. Temperature เป็นฟีเจอร์ที่แสดงระดับของอุณหภูมิมีทั้งหมด 3 ค่า คือ cool, hot และ mild
  3. Humidity เป็นฟีเจอร์ที่แสดงระดับความชื้นมีทั้งหมด 2 ค่า คือ high และ normal
  4. Windy เป็นฟีเจอร์ที่แสดงว่ามีลมแรงหรือไม่ซึ่งมีทั้งหมด 2 ค่า คือ TRUE และ FALSE
  5. Play เป็นคลาสที่แสดงว่าในแต่ละวันมีการจัดแข่งกีฬาหรือไม่ ซึ่งมี 2 ค่า คือ yes และ no

train_test.002

หมายเหตุ การที่ใช้ข้อมูลที่มีขนาดเล็กจะทำให้เราสามารถเข้าใจการทำงานของเทคนิคที่ใช้ได้ดีขึ้นกว่าการใช้ข้อมูลขนาดใหญ่ๆ และไม่รู้ขั้นตอนการทำงานเลย

ในบทความนี้เราจะใช้ข้อมูลในตารางเพื่อทำการคำนวณค่า Information Gain จากสมการดัานล่างนี้ครับ

Information Gain =  Entropy(initial) – [P(c1) × Entropy(c1) + P(c2) × Entropy(c2) + …]

โดยที่ Entropy(c1) = –P(c1) log 2P(c1) และ P(c1) คือ ค่าความน่าจะเป็น (probability) ของ c1

หรือกล่าวอีกนัยหนึ่งได้ว่า Information Gain คือการวัดค่า Entropy ก่อนที่จะมีการแบ่งข้อมูลออกตามคลาสและหลังการแบ่งว่ามีประสิทธิภาพดีขึ้นหรือไม่ ถ้ามีประสิทธิภาพดีขึ้นค่า Information Gain จะมีค่าสูงครับ

การคำนวณค่า Information Gain จะใช้ค่า Entropy ซึ่งเป็นการวัดความแตกต่างหรือการกระจัดกระจายของข้อมูลถ้าข้อมูลมีความแตกต่างกันมากค่า Entropy ก็จะมีค่าสูงครับ ในทางตรงข้ามถ้าข้อมูลมีความคล้ายกันมากค่า Entropy ก็จะมีค่าตำ่ครับ ลักษณะของ Entropy แสดงดังในรูปด้านล่างครับ

train_test.003จากรูปแต่ละจุดคือข้อมูลแต่ละตัวจะเห็นว่าถ้าข้อมูลมีคำตอบหรือคลาสเดียวกัน เช่น เป็นคลาสสีฟ้า หรือ สีส้มทั้งหมดจะมีค่า Entropy ที่ต่ำที่สุด คือ Entropy เท่ากับ 0 แต่ถ้ามีความแตกต่างกันมาก เช่น เป็นคลาสสีฟ้าครึ่งหนึ่งและคลาสสีส้มอีกครึ่งหนึ่งจะมีค่า Entropy สูงสุด คือ Entropy เท่ากับ 1 เลยครับ

ในการคัดเลือกฟีเจอร์ด้วยวิธีการนี้จะคำนวณค่า Information Gain สำหรับแต่ละฟีเจอร์ ดังนี้ครับ

1. คำนวณค่า Entropy เริ่มต้นก่อนครับ ได้ดังนี้

Entropy (initial) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.64 × log2(0.64) + 0.36 × log2(0.36)]
= -[0.64 × -0.64 + 0.36 × -1.47]
= 0.94

2. คำนวณค่า Information Gain สำหรับ Outlook ซึ่งมี 3 ค่าที่เป็นไปได้ คือ sunny, overcast, rainy ซึ่งคำนวณค่า Entropy ที่แยกตามค่าต่างๆ แสดงในรูปด้านล่าง

train_test.013

ซึ่งคำนวณค่า Entropy ของ Outlook = overcast, Outlook = rainy และ Outlook = sunny ได้ดังนี้

Entropy (Outlook=overcast) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[1.00 × log2(1.00) + 0.00 × log2(0.00)]
= -[1.00 × 0 + 0.00 × log2(0.00)]
= 0

Entropy (Outlook=rainy) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.60 × log2(0.60) + 0.40 × log2(0.40)]
= -[0.60 × -0.74  + 0.40 × -1.32]
= 0.97

Entropy (Outlook=sunny) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.40 × log2(0.40) + 0.60 × log2(0.60)]
= -[0.40 × -1.32  + 0.60 × -0.74]
= 0.97

ดังนั้นค่า Information Gain คำนวณได้จาก

Information Gain (Outlook) = Entropy(initial) – [P(Outlook=overcast) × Entropy(Outlook=overcast) +
P(Outlook=rainy) × Entropy(Outlook=rainy) + P(Outlook=sunny) × Entropy(Outlook=sunny)]

= 0.94 – [0.29 × 0 + 0.36 × 0.97 + 0.36 × 0.97]
= 0.25

3. คำนวณค่า Information Gain สำหรับ Temperature ซึ่งมี 3 ค่าที่เป็นไปได้ คือ hot, cool, mild ซึ่งคำนวณค่า Entropy ที่แยกตามค่าต่างๆ แสดงในรูปด้านล่าง

train_test.014

ซึ่งคำนวณค่า Entropy ของ Temperature = cool, Temperature = hot และ Temperature = mild ได้ดังนี้

Entropy (Temperature = cool) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.75 × log2(0.75) + 0.25 × log2(0.25)]
= -[0.75 × -0.42 + 0.25 × -2.00]
= 0.81

Entropy (Temperature = hot) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.50 × log2(0.50) + 0.50 × log2(0.50)]
= -[0.50 × -1.00  + 0.50 × -1.00]
= 1.00

Entropy (Temperature = mild) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.67 × log2(0.67) + 0.33 × log2(0.33)]
= -[0.67 × -0.58  + 0.33 × -1.60]
= 0.91

ดังนั้นค่า Information Gain คำนวณได้จาก

Information Gain (Temperature) = Entropy(initial) – [P(Temperature = cool) × Entropy(Temperature = cool +
     P(Temperature = hot) × Entropy(Temperature = hot) + P(Temperature = mild) × Entropy(Temperature = mild)]

= 0.94 – [0.29 × 0.81 + 0.29 × 1.00 + 0.43 × 0.91]
= 0.03

4. คำนวณค่า Information Gain สำหรับ Humidity ซึ่งมี 2 ค่าที่เป็นไปได้ คือ high, normal ซึ่งคำนวณค่า Entropy ที่แยกตามค่าต่างๆ แสดงในรูปด้านล่าง

train_test.015

ซึ่งคำนวณค่า Entropy ของ Humidity = high, และ Humidity = normal ได้ดังนี้

Entropy (Humidity = high)= –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.43 × log2(0.43) + 0.57 × log2(0.57)]
= -[0.43 × -1.22 + 0.57 × -0.81]
= 0.99

Entropy (Humidity = normal) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.86 × log2(0.86) + 0.14 × log2(0.14)]
= -[0.86 × -0.22  + 0.17 × -2.84]
= 0.58

ดังนั้นค่า Information Gain คำนวณได้จาก

Information Gain (Humidity) = Entropy(initial) – [P(Humidity = high) × Entropy(Humidity = high) +
     P(Humidity = normal) × Entropy(Humidity = normal)]

= 0.94 – [0.50 × 0.99 + 0.50 × 0.58]
= 0.16

5. คำนวณค่า Information Gain สำหรับ Windy ซึ่งมี 2 ค่าที่เป็นไปได้ คือ TRUE, FALSE ซึ่งคำนวณค่า Entropy ที่แยกตามค่าต่างๆ แสดงในรูปด้านล่าง

train_test.016

ซึ่งคำนวณค่า Entropy ของ Windy = TRUE, และ Windy = FALSE ได้ดังนี้

Entropy (Windy = TRUE)= –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.75 × log2(0.75) + 0.25 × log2(0.57)]
= -[0.75 × -0.42 + 0.25 × -2.00]
= 0.81

Entropy (Windy = FALSE) = –P(Play=yes) × log2 P(Play=yes) – P(Play=no) × log2 P(Play=no)
= -[0.50 × log2(0.50) + 0.50 × log2(0.50)]
= -[0.50 × -1.00  + 0.50 × -1.00]
= 1.00

ดังนั้นค่า Information Gain คำนวณได้จาก

Information Gain (Windy) = Entropy(initial) – [P(Windy = TRUE) × Entropy(Windy = TRUE) +
     P(Windy = FALSE) × Entropy(Windy = FALSE)]

= 0.94 – [0.57 × 0.81 + 0.43 × 1.00]
= 0.05

ค่า Information Gain ของฟีเจอร์ต่างๆ แสดงดังในตารางด้านล่างครับ ซึ่งถ้าเราเลือกแค่ 2 ฟีเจอร์ จะได้ฟีเจอร์ Outlook และ Humidity ครับ ซึ่งเราจะต้องนำข้อมูลที่มี 2 ฟีเจอร์นี้ไปทดสอบประสิทธิภาพต่อด้วยวิธีการต่างๆ ดังอธิบายในหัวข้อ “การแบ่งข้อมูลเพื่อนำทดสอบประสิทธิภาพของโมเดล

FeatureInformation Gain
Outlook0.25
Humidity0.16
Windy0.05
Temperature0.03

Leave a Reply

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