Skip to content

Machine learning #4 | การสร้างระบบ Machine learning ต้องทำอะไรบ้าง

โพสต์ที่แล้วเราเรียนรู้คำศัพท์เฉพาะ (terminology) ใน field ML ไปแล้วว่ามีอะไรบ้าง โพสต์นี้จะเล่าถึงขั้นตอนการสร้าง ML ว่ามีกี่ขั้นตอน อะไรบ้าง ขั้นตอนการสร้างอาจจะมากน้อยต่างกันแล้วแต่ความพร้อมของข้อมูลและความซับซ้อนของระบบ แต่ขั้นตอนหลักๆ ก็มีดังนี้

  1. Pre-processing
  2. Learning
  3. Evaluation

Pro-processing

คือการเตรียมข้อมูลให้อยู่ในรูปแบบ (structure) ที่เราต้องการ ความยากง่ายก็แตกต่างกัน ยกตัวอย่าง เช่น Iris flower dataset จากโพสต์ที่แล้วข้อมูลค่อนข้างเป็น structure อยู่แล้วในรูปแบบตารางและมีข้อมูล feature ซึ่งก็คือความกว้าง ความสูงของใบเลี้ยงเลี้ยงและกลีบดอกซึ่งเป็น feature ที่เราสนใจอยู่ครบแบบนี้ก็จะง่ายหน่อย แต่ถ้าเป็นข้อความหรือรูปภาพการเตรียมก็จะยากขึ้นเพราะเป็นข้อมูลแบบ unstructure ไม่สามารถนำไปใช้ได้ทันที ต้องผ่านกระบวนการจึงจะเอาไปใช้ได้ เช่น ถ้าข้อมูลเป็นประโยคต้องตัดคำก่อน หรือถ้าข้อมูลเป็นรูปภาพอาจจะต้องอ่านค่าสีแต่ละ pixel ก่อน เป็นต้น

ในกรณีที่ข้อมูลมี attribute เยอะมากเพื่อลด input ที่จะถูก generate ในอนาคตเราต้องพิจารณาก่อนว่า feature ไหนบ้างที่มีความสำคัญและควรนำมาใช้ในการ prediction กระบวนการนี้เรียกว่า Feature extraction คำถามต่อมาแล้วเราจะรู้ได้ยังไงว่า feature ไหนที่มีความสำคัญกับการเรียนรู้ ก็ต้องผ่านกระบวนการเลือก feature โดยวัดออกมาเป็นตัวเลขเราเรียกกระบวนการนี้ว่า Feature selection

สำหรับ classification การทำ Feature selection ก็มีวิธีวัดผลมากมาย วิธีการหนึ่งคือการหา Information gain เป็นการหาผลรวมของ Entropy  ภาษาไทยใช้คำว่า “ความแปรปรวน” ซึ่งผมก็ไม่ค่อยเข้าใจเหมือนกันว่าทำไมต้องความแปรปรวน (entropy นี่เจอใน information theory เมื่อไหร่ผมก็งงเมื่อนั้น ไว้วันหลังจะลองเขียนอธิบายอีกทีละกัน) จุดประสงค์ของการหา entropy เพราะเราต้องการทราบว่า feature ใดที่มีความสำคัญและมีผลต่อการ prediction ก็ควรจะทำให้ค่าผลรวมของ entropy สูง หมายความว่า feature นั้นมีแนวโน้มทำให้ผลมีความแตกต่างกันมากขึ้น (ก็แหงหละเราจะทำ classification นี่) แบบนี้แหละมั้งเลยแปลว่าความแปรปรวนเพราะยิ่งค่าสูงคือยิ่งไม่ stable เกาะกลุ่มเป็น class เดียว

Learning

การเรียนรู้ของเครื่องคือการป้อน data input ให้เครื่องเรียนรู้ซึ่งข้อมูลแต่ละอย่างก็ใช้อัลกอริทึมต่างกัน ต่อไปนี้ผมจะเรียกการป้อน data input โดยให้เครื่องเรียนรู้จากอัลกอริทึมใดๆ ว่าการ Training

อัลกอริทึมที่ใช้ในการ training มีมากขนาดไหนให้ดูรูปนี้ครับ

ML87i

Ref: http://www.datasciencecentral.com/profiles/blogs/a-tour-of-machine-learning-algorithms-1

หลังจากการ train ข้อมูลกับอัลกอริทึมเราจะได้องค์ความรู้สำหรับการ prediction ซึ่งต่อไปผมจะเรียกว่า Model

ขั้นตอนนี้ยังรวมไปถึงการทำ Cross-validation เพื่อวัดประสิทธิภาพของ model  มี error มากน้อยเพียงใด เพื่อป้องกันไม่ให้เกิดปัญหา Overfitting ซึ่งหมายถึงการ train ระบบโดยใช้ feature ที่มากไปและไม่มีความสำคัญ model ที่ได้มา predict ไม่ต้องถูกเพราะ sensitive กับ noise

การทำ cross-validation ทำได้หลายแบบ เช่น

  • Leave-one-out แบ่งเป็น 2 ชุด ชุดนึงสำหรับ train ชุดนึงสำหรับเทส ซึ่งจำนวนอาจจะไม่เท่ากันก็ได้
  • k-fold แบ่ง dataset จำนวน k สมมุติว่า 5-fold อาจจะใช้ 4-fold ในการ train 1-fold ในการ test หรือ 3-fold ในการ train 2-fold ในการ test ก็ได้ โดยวนทำแบบ combinational

Evaluation

Accuracy

การวัดผลการ prediction กับชุดเฉลยว่า model สามารถ predict ได้ accuracy มากน้อยขนาดไหน วิธีที่ง่ายที่สุดคือการหา accuracy โดยใช้สมการนี้

accuracy = \frac{\text{number of correct  predictions}}{\text{number of total  data  points}}

สมมุติเรา classify อีเมลสแปม มี email ที่เป็น spam 100 ฉบับ model ของเราทายถูก 90 ฉบับ

accuracy = \frac{90}{100} = 0.9 หรือ 90%

Confusion matrix

แต่การหา accuracy แบบข้างบนก็อาจไม่ได้สะท้อนความเป็นจริงเท่าที่ควร หากเรา classify หลาย classes แต่ละ class มีจำนวนไม่เท่ากันและควรพิจารณากรณีที่ predict ผิดด้วย ยกตัวอย่าง classify 2 classes คือหมาและแมวจะได้ confusion matrix หรือ confusion table ดังนี้

\begin{tabular}{ | r | c | c | }  \hline  & Predicted as Cat & Predicted as Dog \\ \hline  Labeled as Cat & 80 & 20 \\ \hline  Labeled as Dog & 5 & 195 \\  \hline  \end{tabular}

จากตารางจะเห็นว่ามี class Cat = 80 + 20 = 100 จำนวน model ของเราทายแมวว่าเป็นแมวถูก 80 และทายแมวว่าเป็นหมาซึ่งมันผิด 20 จำนวน  class Dog ก็เช่นกัน มีจำนวนทั้งหมด 5 + 195 = 200 จำนวน model ของเราทางหมาว่าเป็นแมวผิดไป 5 และทายหมาว่าเป็นหมาถูกต้อง 195 ดังนั้น % accuracy ที่คิดจาก class ทั้งหมดและจำนวนข้อมูลทั้งหมดของแต่ละ class จึงเป็น

\frac{80 + 195}{100 + 200} = 91.7\%

นอกจากนี้ confusion matrix ยังสามารถบอก error ประเภทต่างๆ ได้ด้วย ยกตัวอย่างการตรวจการตั้งครรภ์ กรณีที่ไม่ท้องแต่หมดตรวจว่าท้อง กรณีนี้เรียกว่า false positive (flase alram) และ ในกรณีที่ท้องแต่ตรวจไม่พบ กรณีนี้เรียกว่า false negative (missing) ถ้ายังงงๆ อยู่ให้ดูภาพนี้จะเข้าใจครับ

aRVbMvy_700b

Ref: http://9gag.com/gag/aRVbMvy/false-positive-false-negative-in-a-nutshell

ตอนนี้เรารู้แล้วว่าขั้นตอนว่ามีอะไรบ้าง ซึ่งก็ยุ่งยากพอสมควร อย่างที่ผมเคยบอกไว้ในโพสต์แรกๆ ว่า ML คือสาขาวิชาประยุกต์รวมศาสตร์หลายแขนง หลายสาขาวิชาถูกนำมาใช้ในแต่ละขั้นตอน นี่ยังไม่เข้าเรื่องอัลกอริทึมสำหรับการ learning เลยนะ :p

2 Comments

  1. โต้ง โต้ง

    เชียนดีนะครับ
    เข้าใจง่ายดี
    เขียนต่อไปนะครับ

    • Kor Kor

      พยายามเรียนรู้ไป คงเขียนต่อเรื่อยๆ ครับ ขอบคุณครับ

Leave a Reply

Your email address will not be published.