โมเดล Naive Bayes และการแปลความหมาย

หลังจากบทความที่แล้วผมได้อธิบายการสร้างโมเดล Decision Tree ไปแล้ว ในวันนี้ขออธิบายวิธีการทำ classification อีกเทคนิคหนึ่งที่ได้รับความนิยมก็คือวิธี Naive Bayes หลักการของวิธีการนี้จะใช้การคำนวณความน่าจะเป็น ก่อนอื่นขอทบทวนความน่าจะเป็นที่เรียกว่า conditional proabability เสียก่อน ดังแสดงในสมการด้านล่าง

Screen Shot 2557-03-18 at 9.21.18 AM

  • P(A|B) คือ ค่า conditional probability หรือค่าความน่าจะเป็นที่เกิดเหตุการณ์ B ขึ้นก่อนและจะมีเหตุการณ์ A ตามมา
  • P(AB) คือ ค่า joint probability หรือค่าความน่าจะเป็นที่เหตุการณ์ A และเหตุการณ์ B เกิดขึ้นร่วมกัน
  • P(B) คือ ค่าความน่าจะเป็นที่เหตุการณ์ B เกิดขึ้น

ในลักษณะเดียวกันเราจะเขียน P(B|A) หรือค่าความน่าจะเป็นที่เหตุการณ์ A เกิดขึ้นก่อนและเหตุการณ์ B เกิดขึ้นตามมาทีหลังได้เป็น

Screen Shot 2557-03-18 at 9.25.42 AM

จากทั้ง 2 แบบจะเห็นว่ามีค่า P(AB) ที่เหมือนกันอยู่ดังนั้นเราสามารถเขียนสมการของ P(AB) ได้เป็นดังนี้

Screen Shot 2557-03-18 at 9.30.38 AM

และนี่คือสมการที่เรียกว่า Bayes theorem หรือทฤษฎีของเบย์ ในการนำไปใช้งานทางด้าน data mining ผมจะขอเปลี่ยนสัญลักษณ์ A และ B เสียใหม่ให้เป็น A และ C โดยที่ A คือ แอตทริบิวต์ (attribute)​ และ C คือ ค่าคลาส (class) ดังสมการด้านล่าง

Screen Shot 2557-03-18 at 9.31.33 AM

จากสมการของ Bayes จะมี 3 ส่วนที่สำคัญ คือ

  • Posterior probability หรือ P(C|A) คือ ค่าความน่าจะเป็นที่ข้อมูลที่มีแอตทริบิวต์เป็น A จะมีคลาส C
  • Likelihood หรือ P(A|C) คือ ค่าความน่าจะเป็นที่ข้อมูล training data ที่มีคลาส C และมีแอตทริบิวต์ A โดยที่ A = a1 ∩ a2 … ∩ aMโดยที่ M คือจำนวนแอตทริบิวต์ใน training data
  • Prior probability หรือ P(C) คือ ค่าความน่าจะเป็นของคลาส C

แต่การที่แอตทริบิวต์ A = a1 ∩ a2 … ∩ aM ที่เกิดขึ้นใน training data อาจจะมีจำนวนน้อยมากหรือไม่มีรูปแบบของแอตทริบิวต์แบบนี้เกิดขึ้นเลย ดังนั้นจึงได้ใช้หลักการที่ว่าแต่ละแอตทริบิวต์เป็น independent ต่อกันทำให้สามารถเปลี่ยนสมการ P(A|C) ได้เป็น

Screen Shot 2557-03-18 at 9.48.53 AM

 

ต่อไปจะแสดงวิธีการคำนวณค่าต่างๆ จากไฟล์ training data เพื่อสร้างเป็นโมเดล Naive Bayes ในบทความนี้จะใช้ข้อมูลเดียวกันกับบทความที่ผ่านมา นั่นคือข้อมูล weather ดังในตารางที่ 1 (ผู้อ่านสามารถทำการ sort หรือ filter เฉพาะค่าที่ต้องการดู เพื่อคำนวณตามไปได้อย่างง่ายครับ)

ตารางที่ 1 แสดงข้อมูล weather

Nooutlooktemperaturehumiditywindyplay
1sunnyhothighFALSEno
2sunnyhothighTRUEno
3overcasthothighFALSEyes
4rainymildhighFALSEyes
5rainycoolnormalFALSEyes
6rainycoolnormalTRUEno
7overcastcoolnormalTRUEyes
8sunnymildhighFALSEno
9sunnymildnormalFALSEyes
10rainymildnormalFALSEyes
11sunnymildnormalTRUEyes
12overcastmildhighTRUEyes
13overcasthotnormalFALSEyes
14rainymildhighTRUEno

จากข้อมูลในตารางที่ 1 เราสามารถคำนวณค่าความน่าจะเป็นต่างๆ ได้ดังนี้

Screen Shot 2557-03-18 at 10.08.34 AM

 

จากตารางนี้ก็คือโมเดลของ Naive Bayes ที่สร้างได้จากไฟล์ training data ในตารางที่ 1 นั่นเองครับ ถัดมาเราลองมาดูการใช้งานโมเดลนี้กันดูครับ ผมจะลองเอาข้อมูล instance แรกจากในตารางที่ 1 มาทำนายด้วยโมเดล Naive Bayes ของเราดูครัล ใน instance แรกนี้ประกอบด้วย

  • แอตทริบิวต์ outlook = sunny
  • แอตทริบิวต์ temperature = hot
  • แอตทริบิวต์ humidity = high
  • แอตทริบิวต์ windy = FALSE

เราจะต้องคำนวณค่าความน่าจะเป็นที่มีแอตทริบิวต์เหล่านี้แล้วตอบคลาส play = yes ได้ดังนี้ครับ

Screen Shot 2557-03-18 at 10.24.16 AM

หลังจากนั้นเราจะคำนวณค่าความน่าจะเป็นที่มีแอตทริบิวต์เหล่านี้แล้วตอบคลาส play = no ได้ดังนี้ครับ

Screen Shot 2557-03-18 at 10.24.25 AM

เมื่อเปรียบเทียบค่าความน่าจะเป็นที่ได้จาก 2 คลาสแล้วพบว่าค่า P(play = no|A) (=0.0276) มีค่ามากกว่า P(play = yes|A) (=0.0068) ดังนั้นโมเดลของเราจึงทำนายว่าข้อมูล instance นี้มีค่าคลาส play = no ครับ

ถ้าเราลองสังเกตุตารางโมเดล Naive Bayes ของเราดีๆ จะพบว่ามีค่าความน่าจะเป็นของบางแอตทริบิวต์เป็น 0 นั่นคือไม่มีรูปแบบของแอตทริบิวต์นี้เกิดขึ้นใน training data ของเรา ดังนั้นการใช้งานโมเดลที่มีค่าความน่าจะเป็นมีค่าเท่ากับ 0 เช่นนี้จะทำให้ค่าที่จะทำนายมีค่าเป็น 0 ไปด้วย จึงมีการเพิ่มค่าความถี่ของข้อมูลเข้าไปอีกครั้งละ 1 เช่น จะได้เป็น P(outlook = overcast | play = yes) มีค่าเท่ากับ 5/12 = 0.42  และ P(outlook = overcast | play = no) = 1/8 = 0.13 วิธีการนี้เรียกว่า Laplace smoothing 

การสร้างโมเดล Naive Bayes นี้ด้วยซอฟต์แวร์ Weka ดูได้จากบทความเรื่อง “การสร้างโมเดล classification ด้วย Weka Explorer” และเปลี่ยนเทคนิคให้เป็น bayes.NaiveBayes

Posted in data mining, data science, machine learning and tagged , , , .

Leave a Reply

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