Last updated on August 8, 2018
โพสต์ที่แล้วเราเรียนรู้คำศัพท์เฉพาะ (terminology) ใน field ML ไปแล้วว่ามีอะไรบ้าง โพสต์นี้จะเล่าถึงขั้นตอนการสร้าง ML ว่ามีกี่ขั้นตอน อะไรบ้าง ขั้นตอนการสร้างอาจจะมากน้อยต่างกันแล้วแต่ความพร้อมของข้อมูลและความซับซ้อนของระบบ แต่ขั้นตอนหลักๆ ก็มีดังนี้
- Data preparation
- Training
- Evaluation
Data preparation
คือการเตรียมข้อมูลให้อยู่ในรูปแบบ (structure) ที่เราต้องการ ความยากง่ายก็แตกต่างกัน ยกตัวอย่าง เช่น Iris flower dataset จากโพสต์ที่แล้วข้อมูลค่อนข้างเป็น structure อยู่แล้วในรูปแบบตารางและมีข้อมูล feature ซึ่งก็คือความกว้าง ความสูงของใบเลี้ยงเลี้ยงและกลีบดอกซึ่งเป็น feature ที่เราสนใจอยู่ครบแบบนี้ก็จะง่ายหน่อย แต่ถ้าเป็นข้อความหรือรูปภาพการเตรียมก็จะยากขึ้นเพราะเป็นข้อมูลแบบ unstructure ไม่สามารถนำไปใช้ได้ทันที ต้องผ่านกระบวนการจึงจะเอาไปใช้ได้ เช่น ถ้าข้อมูลเป็นประโยคต้องตัดคำก่อน หรือถ้าข้อมูลเป็นรูปภาพอาจจะต้องอ่านค่าสีแต่ละ pixel ก่อน เป็นต้น
ในกรณีที่ข้อมูลมี attribute เยอะมากเพื่อลด input ที่จะถูก generate ในอนาคตเราต้องพิจารณาก่อนว่า feature ไหนบ้างที่มีความสำคัญและควรนำมาใช้ในการ prediction ขั้นตอนนี้เราเรียกว่า feature extraction และ feature selection
สำหรับ classification การทำ Feature selection ก็มีวิธีวัดผลมากมาย วิธีการหนึ่งคือการหา Information gain เป็นการหาผลรวมของ Entropy ภาษาไทยใช้คำว่า “ความแปรปรวน” ซึ่งผมก็ไม่ค่อยเข้าใจเหมือนกันว่าทำไมต้องความแปรปรวน (entropy นี่เจอใน information theory เมื่อไหร่ผมก็งงเมื่อนั้น ไว้วันหลังจะลองเขียนอธิบายอีกทีละกัน) จุดประสงค์ของการหา entropy เพราะเราต้องการทราบว่า feature ใดที่มีความสำคัญและมีผลต่อการ prediction ก็ควรจะทำให้ค่าผลรวมของ entropy สูง หมายความว่า feature นั้นมีแนวโน้มทำให้ผลมีความแตกต่างกันมากขึ้น (ก็แหงหละเราจะทำ classification นี่) แบบนี้แหละมั้งเลยแปลว่าความแปรปรวนเพราะยิ่งค่าสูงคือยิ่งไม่ stable เกาะกลุ่มเป็น class เดียว
Training
การเรียนรู้ของเครื่องคือการป้อน data input ให้เครื่องเรียนรู้ซึ่งข้อมูลแต่ละอย่างก็ใช้อัลกอริทึมต่างกัน ต่อไปนี้ผมจะเรียกการป้อน data input โดยให้เครื่องเรียนรู้จากอัลกอริทึมใดๆ ว่าการ Training
อัลกอริทึมที่ใช้ในการ training มีมากขนาดไหนให้ดูรูปนี้ครับ
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 โดยใช้สมการนี้
สมมุติเรา classify อีเมลสแปม มี email ที่เป็น spam 100 ฉบับ model ของเราทายถูก 90 ฉบับ
หรือ 90%
Confusion matrix
แต่การหา accuracy แบบข้างบนก็อาจไม่ได้สะท้อนความเป็นจริงเท่าที่ควร หากเรา classify หลาย classes แต่ละ class มีจำนวนไม่เท่ากันและควรพิจารณากรณีที่ predict ผิดด้วย ยกตัวอย่าง classify 2 classes คือหมาและแมวจะได้ confusion matrix หรือ confusion table ดังนี้
จากตารางจะเห็นว่ามี class Cat = 80 + 20 = 100 จำนวน model ของเราทายแมวว่าเป็นแมวถูก 80 และทายแมวว่าเป็นหมาซึ่งมันผิด 20 จำนวน class Dog ก็เช่นกัน มีจำนวนทั้งหมด 5 + 195 = 200 จำนวน model ของเราทางหมาว่าเป็นแมวผิดไป 5 และทายหมาว่าเป็นหมาถูกต้อง 195 ดังนั้น % accuracy ที่คิดจาก class ทั้งหมดและจำนวนข้อมูลทั้งหมดของแต่ละ class จึงเป็น
นอกจากนี้ confusion matrix ยังสามารถบอก error ประเภทต่างๆ ได้ด้วย ยกตัวอย่างการตรวจการตั้งครรภ์ กรณีที่ไม่ท้องแต่หมดตรวจว่าท้อง กรณีนี้เรียกว่า false positive (flase alram) และ ในกรณีที่ท้องแต่ตรวจไม่พบ กรณีนี้เรียกว่า false negative (missing) ถ้ายังงงๆ อยู่ให้ดูภาพนี้จะเข้าใจครับ
Ref: http://9gag.com/gag/aRVbMvy/false-positive-false-negative-in-a-nutshell
ตอนนี้เรารู้แล้วว่าขั้นตอนว่ามีอะไรบ้าง ซึ่งก็ยุ่งยากพอสมควร อย่างที่ผมเคยบอกไว้ในโพสต์แรกๆ ว่า ML คือสาขาวิชาประยุกต์รวมศาสตร์หลายแขนง หลายสาขาวิชาถูกนำมาใช้ในแต่ละขั้นตอน นี่ยังไม่เข้าเรื่องอัลกอริทึมสำหรับการ learning เลยนะ :p
เชียนดีนะครับ
เข้าใจง่ายดี
เขียนต่อไปนะครับ
พยายามเรียนรู้ไป คงเขียนต่อเรื่อยๆ ครับ ขอบคุณครับ
Thank you ka .