การรู้จำรูปแบบสำหรับข้อมูลแบบตามลำดับเวลาด้วย Hidden Markov Model (Pattern Recognition with Sequential Data using HMM)

การค้นพบ “รูปแบบ” หรือ “Patterns” ที่ซ่อนอยู่ภายในข้อมูล เป็นอีกสาขาวิชาที่น่าสนใจ และ มีความท้าทายเป็นอย่างมาก เนื่องจากในปัจจุบันนี้ที่เรากำลังใช้ชีวิตอยู่ในโลกของข้อมูล ซึ่งเรากำลังพูดถึงข้อมูลจำนวนมหาศาล (ต้องขอคุณเทคโนโลยีในการเก็บข้อมูลที่ก้าวล้ำอย่างรวดเร็วไว้ ณ ที่นี้ด้วย!) ข้อมูลถูกเก็บบันทึก แทบจะทุกที่ทุกเวลา ไม่มีใครสามารถวิ่งหนีกระบวนการนี้ได้เลย

“Data” หรือ “ข้อมูล” ถือเป็นสิ่งที่มีคุณค่ามหาศาล การมีข้อมูล ถูกเรื่อง ถูกเวลา นั้น ถึงขนาดเปลี่ยนยาจกเป็นเศรษฐี เปลี่ยนขาวเป็นดำ ได้เลยทีเดียว! แต่ถึงอย่างนั้นก็ตาม “ข้อมูล” นี้ จะกลายเป็นแค่ “ขยะไซเบอร์” ทันที ถ้ามันไม่ได้ถูกนำมาใช้งานอย่างถูกต้อง จุดนี้นี่เองที่ทำให้การศึกษาในสาขา “Pattern Recognition” หรือ การระบุรูปแบบที่ซ่อนอยู่ภายในข้อมูล ได้รับความสนใจเป็นอย่างมาก เพราะสามารถขุดค้นเอา “ความรู้” ที่ซ่อนอยู่ในข้อมูล เพื่อนำไปสู่การใช้งานอย่างเหมาะสมได้

“Pattern Recognition” มีด้วยกันมากมายหลากหลายรูปแบบมาก ขึ้นอยู่กับลักษณะการใช้งาน ระบบ Pattern Recognition ยกตัวอย่างระบบที่เราคุ้นเคยกัน เช่น ระบบรู้จำใบหน้า (Face Recognition) ระบบรู้จำวัตถุต่างๆ (Object Recoginiton) พวกนี้เรียกได้อีกอย่าวว่า “Image Recognition” หรือ การรู้จำจากรูปภาพนั่นเอง แต่ในบทความนี้เราจะมาพูดถึง ระบบ Pattern Recognition ในอีกรูปแบบกันบ้าง คือ “รู้จำรูปแบบ (Pattern Recognition)” ของข้อมูลที่อยู่ในรูปแบบ “ลำดับ (Sequential)” กันค่ะ ซึ่งมีโยชน์เป็นอย่างมากในการทำนายลำดับการเกิดขึ้นของเหตุการณ์ ในอนาคต มาดูกันเลยค่ะ

ข้อมูลลำดับเวลาคืออะไร?

ข้อมูลแบบ “ลำดับ” (เวลา) หลายๆ ท่านอาจจะได้ยินกันในอีกชื่อนึงว่า ข้อมูลอนุกรมเวลา (Time series) ถ้าถามว่าแล้วจะรู้ได้อย่างไรว่า ข้อมูลนี้เป็นข้อมูลแบบลำดับเวลา วิธีง่ายๆ เลยก็คือ ให้ลองสลับตำแหน่งของข้อมูลนั้นๆ ดูค่ะ แล้วดูว่ามีผลต่อความหมายของข้อมูล หรือไม่ ถ้าการสลับตำแหน่งนั้นมีผล ก็แสดงว่าข้อมูลนั้นเป็น “ข้อมูลแบบลำดับเวลา” ค่ะ ในทางกลับกัน ถ้าข้อมูลนั้นๆ เมื่อสลับตำแหน่งแล้ว ก็ยังสื่อความหมายเหมือนเดิม ก็แสดงว่า ข้อมูลนั้น ไม่ใช่ ขัอมูลแบบลำดับเวลานั่นเองค่ะ

ยกตัวอย่างเช่น

  • ข้อมูลคำในแต่ละประโยค – ถ้าเราสลับตำแหน่งคำต่างๆ ในประโยคก็จะทำให้ความหมายของประโยคนั้นๆ เปลี่ยนไป
  • ข้อมูลสภาพอากาศ – ถ้าเราสลับลำดับอุณหภูมิไปมา คงจะได้สภาพอากาศที่พิลึกน่าดู!
  • ข้อมูลราคาหุ้นในตลาดหลักทรัพย์ – ก็เป็นอีกหนึ่งตัวอย่างของข้อมูลอนุกรมเวลาที่สลับไม่ได้!

ผลที่เราคาดหวังจากการทำงานที่ได้มาจากระบบในลักษณะนี้จะเป็น การค้นพบ Patterns หรือ “รูปแบบของข้อมูล” ซึ่งลำดับของข้อมูลในอดีตมีผลต่อการทำนายข้อมูลในอนาคตเป็นทอดๆ กันไป เช่น “วันฝนตก” มักจะตามมาหลังจาก “วันฝนตก” หรือ “วันแดดออก” มักจะมาจาก “วันแดดออก แล้ว วันฝนตก” เช่นเดียวกับราคาหุ้น เราอาจจะค้นพบว่า “ราคาหุ้นขยับขึ้น” มักจะตามมาจาก “ราคาหุ้นขยับลง เป็นเวลา 3 วัน แล้วขึ้น 1 วัน” เป็นต้น

ในการทำงาน เราจะต้องมีการกำหนด State of variables ที่เราต้องการจะหาออกมา ซึ่งส่วนใหญ่จะแทนด้วย A เช่น

  • ปัญหาสภาพอากาศ Sated of Variables อาจจะถูกำหนดเป็น A = {rainny,sunny}
  • ปัญหาราคาหุ้น Sated of Variables อาจจะถูกำหนดเป็น A= {decrease,increase}

ซึ่ง States ของปัญหา ก็จะแปรผันตามตัววัด ขึ้นอยู่กับว่าเราต้องการจะวัดอะไรในอนาคตนั่นเอง

หมายเหตุ : ควรมีความรู้พื้นฐานทางสถิติเบื้องต้น เนื่องจากหลักการทำงานของ Markov Model อ้างอิงจากสถิติของเหตุการณ์เป็นหลัก

ก่อนจะเริ่มดูเนื้อหา เรามาดูกันก่อนว่าลำดับการเรียบเรียงเนื้อหาภายในบทความนี้เป็นอย่างไร เพื่อจะได้ง่ายต่อการทำความเข้าใจค่ะ เนื้อหาทั้งหมดของบทความนี้ เพื่อให้ง่ายต่อการทำความเข้าใจ เราจะกล่าวถึง ทฤษฏี และ ตามด้วยตัวอย่างการใช้งานทฤษฏีนั้นๆ ดังนี้ 1) Markov Model (MM) –> 2) ตัวอย่างที่ 1 –> 3) Hidden Markov Model (HMM) and Viterbi Algorithm –> 4) ตัวอย่างที่ 2

1) Markov Model (MM)

Markov model จะเป็นระบบเริ่มต้นที่ง่ายที่สุดในการเรียนรู้เกี่ยวกับลำดับเหตุการณ์สองเหตการณ์ บนหลักการพื้นฐานของสถิติ ซึ่งจะมีตัวแปรที่เราสนใจเพียงตัวแปรเดียว ตัวแปรนั้นจะเกี่ยวข้องเชื่อมโยงไปยังค่าของตัวมันเองในอดีต ก่อนอื่นเราจะมาดูว่าเจ้า Markov Model นี้มีสมการที่เกี่ยวข้องอะไรบ้าง ต่อมาก็จะดูตัวอย่างของการคำนวณค่าความน่าจะเป็นจาก Markov Chain กันค่ะ

หมายเหตุ
ตัวแปรที่มีการขีดเส้นใต้ (เช่น x) แทน Random Variable
ส่วนตัวแปรที่ไม่มีเส้นใต้ (เช่น x) แทน Actual value จากการเก็บข้อมูลจริง
ตัวแปร i แทน ลำดับของวันที่

รูปแบบพื้นฐานของ Markov Model – สมการที่ (1)

โดยที่

จากสมการที่ (1) สมมุติว่าเรามี ลำดับของข้อมูลอากาศอยู่เป็นจำนวน d วัน ตัวแปรที่ต้องการจะหา คือ ความน่าจะเป็นของการเกิดลำดับของสภาพอากาศ (ตัวแปรที่มีการขีดเส้นใต้) ส่วน A คือ เซ็ตของสภาพอากาศ ซึ่งเป็นไปได้ 2 แบบด้วยกันคือ Sun หรือ Rain วิธีการที่จะหาความน่าจะเป็นของลำดับสภาพอากาศ โดยใช้ Markov model ทำได้โดยการ Maximize ค่า product ของความน่าจะเป็นของ ตัวแปรที่เกี่ยวข้อง (สถานะของวันถัดไป จะขึ้นอยู่กับสถานะของตัวแปรเดียวกันของวันก่อนหน้า เท่านั้น) และ ลำดับเหตุการณ์ที่มีค่าความน่าจะเป็นสูงที่สุด ก็จะมีโอกาสที่จะเกิดขึั้นมากที่สุดนั่นเอง

ในการคำนวณ จะมีค่าความน่าจะเป็นที่เกี่ยวข้องทั้งหมด 2 ค่า ดังนี้

1. Transition probabilities – (สมการที่ 2)

สมการนี้จะหาค่าความน่าจะเป็นที่ วันนี้จะเกิดเหตุการณ์ s ถ้าเมื่อวาน เกิดเหตุการณ์ t ขึ้น

2. Initial probability – (สมการที่ 3)

สมาการนี้เป็นสมการหาค่าความน่าจะเป็นที่จะเกิดเหตุการณ์ s ขึ้น

ดูจากสมการทางสถิติด้านบนแล้วอาจจะยังมองภาพไม่ออก ไม่ต้องตกใจค่ะ ในส่วนต่อไป เราจะมาดูตัวอย่างการทำงานกันค่ะ

ตัวอย่างการทำงานของ MM

สมมุติว่าโจทย์กำหนดให้ ความน่าจะเป็นที่ ฝนตก (Rain) ในวันนี้ ถ้า ฝนตก เมื่อวาน มีค่าเท่ากับ 0.5 และ ความน่าจะเป็นที่ในวันนี้ ฝนตก ถ้าเมื่อวาน แดดออก (Sun) มีค่าเท่ากับ 0.2 โดยที่ค่าความน่าจะเป็นเริ่มต้นของเหตุการณ์ ฝนตก มีค่าเท่ากับ 0.3

จงหาว่าเหตุ การณ์ใด ระหว่าง S1 และ S2 มีความน่าจะเป็นที่จะเกิดได้มากที่สุด? (กำหนดให้ A หรือ สถานะของสภาพอากาศมีเพียง 2 สถานะ เท่านั้นคือ “ฝนตก (Rain)” และ “แดดออก (Sun)”

S1 = sun  sun  sun  rain  rain
S2 = rain  sun  rain  sun  rain

จากโจทย์ เราจะ ทำการสรุปข้อมูลที่เราได้รับมาจากโจทย์ ก่อน ดังนี้

Trainsition probability

Initial Probability

จากนั้นมาคำนวณความน่าจะเป็นด้วย Markov Chain สำหรับเหตุการณ์ S1 และ S2 กัน

S1 = sun sun sun rain rain
= p(sun) * p(sun|sun) * p(sun|sun) * p(rain|sun) * p(rain|rain)
= (0.7) * (0.8) * (0.8) * (0.2) * (0.5)
= 0.448

S2 = rain sun rain sun rain
= p(rain) * p(sun|rain) * p(rain|sun) * p(sun|rain) * p(rain|sun)
= (0.3) * (0.5) * (0.2) * (0.5) * (0.2)
= 0.003

จากความน่าจะเป็นที่คำนวณได้ จะเห็นว่า ลำดับเหตุการณ์ S1 มีค่าความน่าจะเป็นสูงกว่า S2 มาก ดังนั้น S1 จึงเป็นลำดับเหตุการที่มีความน่าจะเป็นที่จะเกิดขึ้นได้ มากกว่า!

เสร็จเรียบร้อยแล้วนะคะ สำหรับการคำนวณความน่าจะเป็นด้วยหลักการ Markov Chain เห็นมั้ยคะ ว่าไม่ได้ยากเลย แต่ปัญหามันอยู่ที่ ในความเป็นจริงแล้ว ปัญหามันไม่ได้ง่ายแบบนี้น่ะสิคะ! ยกตัวอย่างเช่น ในการพิจารณาว่าฝนจะตก หรือ แดดจะออก อาจจะมีปัจจัยอื่นเข้ามาเกี่ยวข้อง หรือ ลำดับเวลาการเกิดของเหตุการณ์จะต้องมีความสัมพันธ์กันมากกว่านี้ ซึ่งในส่วนนี้เองที่เจ้า Hidden Markov Model และ Vertibi Algorithm จะเข้ามามีบทบาทสำคัญ ซึ่งเราจะมาว่ากันในส่วนต่อๆ ไป

2) Hidden Markov Model

“Hidden Markov Model” ถูกสร้างขึ้นบนพื้นฐานของทฤษฏี Markov Model (MM) ที่เราเพิ่งจะกล่าวถึงกันไปในหัวข้อที่แล้ว บนพื้นฐานที่ว่าในบางครั้ง เราก็ไม่สามารถมีข้อมูลครบทั้งหมดดังที่เราต้องการ ในทางกลับกัน เรามีข้อมูลที่เกี่ยวข้องเพียงบางส่วนเท่านั้นในการทำการตัดสินใจ ซึ่งเราเรียกข้อมูลที่เรามีนั้นว่า “Observations” ในการทำงาน เราก็ต้องต้องอาศัยข้อมูล Observations นี้เอง ในการทำการตัดสินใจว่า สิ่งที่เราต้องการทำนายนั้นมีค่าอย่างไร ซึ่งในที่นี้สิ่งที่เราต้องการจะทำนาย เรียกว่า “Hidden States”

ยกตัวอย่างเช่น เราต้องการจะทำการตัดสินใจว่า “ฝนตกหรือไม่?” แต่เราไม่สามารถออกไปด้านนอกได้ เราทำได้เพียงแต่สังเกตุว่า ผู้คนที่ผ่านไปมามีการ “ใช้ร่มหรือไม่” และ เราก็จะนำข้อมูลการใช้ร่มที่เราสังเกตุได้ มาสรุปว่า ด้านนอกฝนกำลังตกอยู่หรือไม่ นั่นเอง ในที่นี้ ข้อมูลการใช้ร่ม คือ Observations ส่วน เหตการณ์ ฝนตก หรือ ไม่ตก คือ Hidden states นั้นเอง

Observations = {Umbrella, No umbrella}
Hidden states = {Raining, Sunny}

ก่อนที่จะไปดูตัวอย่างการใช้งาน Hidden Markov Model เราจะมาดูสมการ และ ความหมายของตัวแปรต่างๆ กันก่อนค่ะ (สมการค่อนข้างซับซ้อน สามารถข้ามไปดูตัวอย่างก่อนกลับมาดูสมการเพื่อให้ง่ายต่อการทำความเข้าใจได้ค่ะ)

ให้ N แทน state ของ Hidden states (เช่น จากตัวอย่าง N คือ สถานะ สภาพอากาศ หรือ {Rain, Sun}) ส่วน A แทน Observation States (ซึ่ง จากตัวอย่าง A ก็คือ การใช้ร่มของคน หรือ {Umbrella, No umbrella} นั่นเอง) ดังนั้น จะได้ว่า

  • X แทน สถานะ ของ Hidden states ดังนั้น
  • x แทน สถานะ ของ Observations ดังนั้น

ดังนั้น ค่า Probability ของความสัมพันธ์ระหว่าง ( x , X ) สามารถเขียนได้ ดังนี้ – (สมการที่ 4)

State transition probability ของ state S และ T สามารถเขียนได้ ดังนี้ – (สมการที่ 5)

Initial state probability หรือ ความน่าจะเป็นเริ่มต้นของแต่ละ state สามารถเขียนได้ ดังนี้ – (สมการที่ 6)

Emission probability หรือ ความน่าจะเป็นระหว่างการเกิดขึ้นของ State และ Observation สามารถเขียนได้ ดังนี้ – (สมการที่ 7)

3) The Viterbi Algorithm

ก่อนจะไปดูตัวอย่างการทำงานของ HMM กัน มีอีกเรื่องที่สำคัญมาก ที่จะต้องทำความเข้าใจคือ Viterbi Algorithm เพราะว่าในการใช้งาน HMM นั้นจะต้องมีการนำ Viterbi Algorithm เข้ามาช่วยในการระบุ “ลำดับ” ของ Hidden state (สิ่งที่เราต้องการทำนาย หรือ หาข้อสรุป) ที่เป็นไปได้มากที่สุด จาก Observations ที่เราเก็บข้อมูลมาได้ เจ้าลำดับที่เป็นไปได้มากที่สุดที่เราต้องการหานี้ เรียกว่า “Viterbi Path”

กำหนดให้ Intitial Probability ของ state i แทนค่าด้วย

Transition probabiliy ระหว่าง state i และ state j สามารถเขียนได้ดังนี้

ถ้าลำดับของ Observations ที่เก็บได้ คือ

ลำดับที่เป็นไปได้มากที่สุดของ Hidden state

Viterbi path หรือ ความน่าจะเป็นของแต่ละ state ถัดไป สามารถหาได้จากสมการ ดังนี้ – (สมการที่ 8-1 และ 8-2)

โดยที่ Vt,k คือ ความน่าจะเป็น (Propability) ที่เป็นไปได้มากที่สุดเมื่อ path นั้นมี state k อยู่ สุดท้ายเมื่อคำนวณความน่าจะเป็นสำหรับทุกสถานะเรียบร้อยแล้ว ก็จะทำการย้อนกลับไปสรุป Hidden state ในแต่ละช่วงเวลา โดยการเลือก Hidden state ที่มีค่าความน่าจะเป็นสูงที่สุดนั่นเอง โดยสามารถ เขียนสมการได้ดังนี้ – (สมการที่ 9-1 และ 9.2)

โดยที่ Ptr(k,t) เป็นฟังก์ชันที่คืนค่าของ Hidden state X ที่มีมีส่วนในการคำนวณค่าสูงสุดของความน่าจะเป็นใน สมการที่ … นั่นเอง

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

ตัวอย่างการใช้งาน Hidden Markov Model

GP (แพทย์) จะต้องทำการวินิจฉัยคนไข้ว่า “เป็นไข้” (Fever) หรือ “แข็งแรงดี” (Healthy) แต่มีข้อแม้ว่า GP ท่านนี้ จะไม่สามารถตรวจคนไข้ได้โดยตรง ทำได้เพียงแค่สอบถามอาการทางโทรศัพท์เป็นเวลาต่อเนื่องกัน 3 วัน เท่านั้น

สำหรับทางคนไข้นั้น เมื่อ GP ทำการสอบถามว่า “วันนี้เขารู้สึกอย่างไร?” ก็จะสามารถตอบได้เพียงแค่ รู้สึก “ปกติ” (Normal) “หนาว” (Cold) หรือ “เวียนศีรษะ” (Dizzy) เท่านั้น

จากโจทย์ส่วนนี้ จะพบว่า

Hidden states คือ {Healthy, Fever}

Observations คือ {Normal, Cold, Dizzy}

โดยที่ GP เป็นแพทย์ที่มีประสบการณ์สูง จึงมีข้อมูลเกี่ยวกับการเจ็บป่วยเป็นอย่างดี และทราบว่า โดยส่วนใหญ่แล้ว คนไข้ที่เข้ามาจะมีโอกาสเพียงแค่ 40% เท่านั้นที่จะป่วย หรือ “Fever”

จากโจทย์ส่วนนี้ จะพบว่า เมื่อมีโอกาส 40% ที่คนไข้จะป่วย ทำให้มี โอกาส 60% ที่คนไข้ที่มาหา GP จะ ไม่ได้ป่วยอะไร ดังนั้น เราจึงได้ Initial Probability ของ State “Healthy” และ “Fever” ดังนี้

P(Healthy) = 0.6

P(Fever) = 0.4

นอกจากนั้น GP ยังมีข้อมูลเกี่ยวกับ การเปลี่ยนแปลงของ Hidden states อีกด้วย ว่ามีโอกาส 30% เท่านั้น ที่คนที่ “ปกติ” ในวันนี้ จะ “ป่วย” ในวันพรุ่งนี้ และ มีโอกาสถึง 60% ที่คนที่ “ป่วย” ในวันนี้ จะ “ป่วย” ในวันพรุ่งนี้

จากข้อมูลส่วนนี้ จะพบว่า “Transition States” มี ดังนี้

p(Healthy -> Healthy) = 0.7 p(Healthy -> Fever) = 0.3

p(Fever -> Healthy) = 0.4 p(Fever -> Fever) = 0.6

ข้อมูลอีกส่วนที่ GP มีนั้น ก็คือ GP ทราบว่า ผู้ที่ “ป่วย” หรือ “ปกติ” จะมีอาการอย่างไรบ้าง ดังนี้

มีโอกาส 5% 40% และ 10% ที่ผู้ที่ “ปกติ (Normal)” จะมีอาการ “ปกติ (Normal)”, “หนาวสั่น (Cold)” และ “เวียนศีรษะ (Dizzy)” ตามลำดับ

ในขณะที่ มีโอกาส 10%, 30% และ 60% ที่ คนที่ “ป่วย (Fever)” จะมีอาการ “ปกติ (Normal)”, “หนาวสั่น (Cold)” และ “เวียนศีรษะ (Dizzy)” ตามลำดับ โดยที่ ข้อมูลส่วนนี้ จะเรียกว่า “Emission probability” ซึ่ง “Emission probability” ที่ GP ทราบทั้งหมด สามารถสรุปได้ ดังนี้

p(Healthy -> Normal) = 0.5, p(Healthy -> Cold) = 0.4, p(Healthy -> Dizzy) = 0.1

p(Fever -> Normal) = 0.1, p(Fever -> Cold) = 0.3, p(Fever -> Dizzy) = 0.6

คนไข้รายหนึ่งได้ตอบคำถามของ GP เกี่ยวกับอาการของเขาเป็นเวลา 3 วันต่อเนื่องกัน ซึ่ง มีการบันทึกไว้ ดังนี้ วันที่ 1 ผู้แจ้งอาการว่า “Normal” วันที่ 2 อาการของเขาเปลี่ยนไปเป็น “Cold” และ สุดท้าย วันที่ 3 เขาแจ้งว่าเขามาอาการ “Dizzy”

จากคำตอบที่ได้รับนี้ GP จะต้องทำการประเมินว่า คนไข้รายนี้มีอาการ “ป่วย” หรือไม่ และ เริ่มป่วยมาเป็นเวลากี่วันแล้ว จงหาว่า GP จะทำการประเมินอาการคนไข้รายนี้ ได้อย่างไร?

GP ใช้ Hidden Markov Model มาใช้วิเคราะห์อาการคนไข้

เพื่อให้ง่ายต่อการทำความเข้าใจ อันดับแรก GP ท่านนี้ ได้ทำการสรุป ความน่าจะเป็นต่างๆ จากข้อมูลที่มี ออกมาเป็น Diagram ดังนี้ (จะไม่ทำก็ได้ แต่ GP ท่านนี้ขยัน!)

State Diagram ของความน่าจะเป็นทั้งหมด

เมื่อ GP ได้สร้าง Diagram ขึ้นมาเรียบร้อยแล้ว ก็เริ่มทำการวิเคราะห์ ดังนี้

วันที่ 1 (t=1)

วันแรก ข้อมูลที่ GP ได้คือ “Normal” เนื่องจากเป็นวันแรก ในการคำนวณ จึงมีเพียงแค่ emission probability กับ initial probability เข้ามาเกี่ยวข้องเท่านั้น ส่วน Transition probability นั้นจะยังไม่ต้องใช้ในการคำนวณในขั้นตอนแรกนี้

ในที่นี้กำหนดให้

K แทน state ของ Hidden State โดยที่ 
K = 1 (Healthy)
K = 2 (Fever)
ค่า แทน Intitial Probability ของ state i ดังนั้น
undefined= 0.6 และ undefined= 0.4

ดั้งนั้น ค่าความน่าจะเป็นของแต่ละ State คือ Healthy (H) และ Fever (F) ที่ได้จากข้อมูลในวันแรกที่ได้จากคนไข้ สามารถคำนวนได้ ดังนี้ (สมการที่ 8 – 1)

= (0.5) * (0.6)
= 0.3

= (0.1) * (0.4)
= 0.04

เนื่องจากเป็นขั้นตอนแรก ค่าที่คำนวณได้ของแต่ละ state จะถูกนำไปเขียนไว้ในวงกลม ของ State นั้นๆ ดังรูป ด้านล่าง (วิธีการคำนวณค่านั้นๆ เขียนกำกับไว้ให้ที่แต่ละเส้นกราฟแล้วค่ะ)

วันที่ 1

วันที่ 2 (t=2)

วันที่ 2 คนไข้ให้ข้อมูลเพิ่มว่า “Cold” GP สามารถนำข้อมูลนี้มาคำนวณต่อจากขั้นตอนที่ 1 ได้ แต่ในการคำนวณวันที่ 2 นี้ จะต้องมีค่าของ Transition probability เข้ามาเกี่ยวข้องด้วย โดยจาก Diagram จะเห็นได้ว่าค่า Transition probability มีดังนี้ (สถานะ 1- Healthy และ 2- Fever)

สามารถคำนวณค่า Probability ของ State H และ F โดยใช้สมการที่ 8-2 ได้ ดังนี้

หลังจากคำนวณเสร็จ ค่าแต่ละค่าก็จะถูกนำไปใส่ไว้ใน State H และ F ในวันที่ 2 ค่ะ แต่ก่อนจะเลื่อนไปทำขั้นตอนถัดไป เนื่องจากการคำนวณในส่วนนี้ บางท่านอาจจะรู้สึกว่ามันสับสน ดังนั้น ผู้เขียนจึงขอนำเสนออีกหนึ่งวิธีการที่จะคำนวณค่าความน่าจะเป็นนี้ค่ะ โดยให้คำนวณค่าความน่าจะเป็นกับเส้นกราฟที่เชื่อมระหว่าง วันที่ 1 และ วันที่ 2 ทุกเส้น (ทั้งหมด 4 เส้น) โดยทำการคำนวณค่าของแต่ละเส้น ดังนี้

P(สถานะเก่า) * P(สถานะเก่า –> สถานะใหม่) * P(Obsevation ณ วันนั้นๆ| สถานะใหม่)

เช่น ถ้าเราจะคำนวณค่าระหว่างเส้นที่เชื่อม สถานะ H ในวันที่ 1 เข้ากับสถานะ H ในวันที่สอง (กราฟสีส้ม เส้นบนสุด ในรูปด้านล่าง) จะสามารถคำนวณได้ ดังนี้

P(H) * P(H –>H) * P(Cold | H) —> หมายความว่า คำนวณ (ความน่าจะเป็นของสถานะเก่าในวันที่ 1 ซึ่งคือ Healthy) * (ความน่าจะเป็นแบบ Transition probability ในการเปลี่ยนสถานะ จาก Healthy ไปเป็น Healthy) * (ความน่าจะเป็นของการเกิดอาการ Cold ถ้าคนๆนั้นมีสุขภาพแข็งแรง) ซึ่งค่านี้ จะสามารถคำนวณได้ ดังนี้

P(H) * P(H –>H) * P(Cold | H)
= 0.3 * 0.7 * 0.4
= 0.084

คำนวณตามรูปแบบนี้ ให้ครบทุกเส้นเชื่อม (แต่ละเส้นเชื่อมผู้เขียนได้เขียนสมการ และ คำนวณไว้ให้แล้วในรูปด้านล่าง) เมื่อคำนวณเสร็จ แต่ละสถานะจะมีเส้นเชื่อมที่มีค่าต่างกัน มุ่งเข้าสู่มัน 2 เส้น ให้เราเลือกค่าที่สูงที่สุด และ นำค่านั้นๆ มาเขียนกำกับไว้ในวงกลมของสถานะนั้นๆ

เมื่อคำนวณครบ และ เลือกค่าความน่าจะเป็นที่สูงที่สุด ให้กับแต่ละสถานะ จะได้ผลลัพธ์ ดังรูปด้านล่าง

วันที่ 2

วันที่ 3 (t=3)

วันที่ 3 คนไข้ให้ข้อมูลอาการเพิ่มเติมคือ “Dizzy” การคำนวณก็จะทำเช่นเดียวกับในขั้นตอนที่ 2 คือ คำนวณความน่าจะเป็นของทุกๆ เส้นที่เชื่อมต่อระหว่างสถานะในวันที่ 2 ไปยังสถานะในวันที่ 3 ซึ่งการคำนวณค่าในแต่ละเส้นแสดงได้ในรูปด้านล่างแล้วค่ะ

เมื่อคำนวณค่าของแต่ละเส้นเชื่อมเรียบร้อยแล้ว ให้เปรียบเทียบค่า 2 ค่า ที่พุ่งไปยังสถานะเดียวกันของวันที่ 3 (เช่น เมื่อพิจารณาสถานะ H ในวันที่ 3 จะเห็นว่ามีเส้นเชื่อมสีเขียว 2 เส้นพุ่งเข้าไปที่สถานะนั้น) ค่าไหนมากกว่า ก็ให้เขียนค่านั้นกำกับในวงกลมของสถานะนั้นๆ สุดท้าย จะได้ค่าต่างๆ ดังรูปด้านล่าง

เรียบร้อยแล้วนะคะ สำหรับการคำนวณค่าความน่าจะเป็นให้กับสถานะต่างๆ ด้วย Hidden Markov Model ในขั้นตอนสรุปซึ่งเป็นขั้นตอนสุดท้ายนี้ จะเป็นการหาค่า Maximum เพื่อจะสรุปว่า ในแต่ละวัน GP จะตัดสินใจว่า คนไข้คนนั้น ป่วย หรือหรือ นั่นเองค่ะ ในที่นี้จะใช้สมการที่ 9-1 และ 9-2 แต่ในที่นี้จะขออธิบายให้เข้าใจง่ายๆ ดังนี้นะคะ

ในแต่ละวัน ให้ดูว่า ค่าความน่าจะเป็นที่เขียนไว้ในวงกลม ระหว่าง State H (Healthy) กับ F (Fever) นั้น ค่าไหนมีค่ามากกว่า ก็จะถือเป็น Hidden State ของวันนั้นๆ ไป ดังนั้น ลำดับของ Hidden States ในที่นี้ก็คือ “Healthy –> Healthy –> Fever” หรือ สามารถสรุปได้ว่า คนไข้รายนี้ เริ่มป่วยตั้งแต่วันที่ 3 นั่นเองค่ะ

จบกันไปแล้วนะคะ สำหรับการทำงานกับ Hidden Markov Mode อย่างง่าย หวังว่าผู้อ่านจะเข้าใจหลักการ และ สามารถนำไปประยุกต์ใช้งานกับปัญหาในรูปแบบอื่นๆ ได้ในอนาคตนะคะ ขอขอบคุณทุกๆ ท่านเป็นอย่างสูงที่ติดตามอ่านค่ะ เรื่องนี้ตั้งใจจะเขียนมานานมากแล้ว แต่ก็กังวลเพราะค่อนข้างยาว และ ซับซ้อน อธิบายด้วยตัวอักษรค่อนข้างจะเข้าใจยาก แต่ก็มีผู้อ่านสนใจกันสอบถามเข้ามากันเยอะ เลยตัดสินใจเขียนออกมาให้ค่ะ และ ถ้ามีโอกาสก็จะพยายามหยิบยกเรื่องนี้เข้ามาสอนในคอร์สกันต่อไป หรือ ทำวีดีโออธิบายออกมาให้ เพื่อให้สามารถเข้าใจได้ง่ายขึ้นค่ะ

แหล่งอ้างอิง:

ปรับปรุงมาจากการเรียนใน รายวิชา: Statistical Pattern Recognition
ผู้สอน : Dr. Colin Campbell, Engineering Mathematics department
หลักสูตร: MsC Advanced Computing – Machine Learning, Data Mining and High Performance Computing, University of Bristol

ขอขอบคุณอาจารย์ผู้สอน และ ผู้ที่เกือบกลายเป็น Supervisor ของตัวผู้เขียนเอง ไว้ ณ ที่นี้ค่ะ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s