วันพฤหัสบดีที่ 26 เมษายน พ.ศ. 2561

3) ฟีทเจอร์ หรือคุณสมบัติที่ดีเพื่อการเรียนรู้ของคอมพิวเตอร์ What Makes a Good Feature? การเรียนรู้ของคอมพิวเตอร์ แมชชีนเลิร์นนิ่ง ตอนที่ 3

ฟีทเจอร์ หรือคุณสมบัติที่ดีเพื่อการเรียนรู้ของคอมพิวเตอร์
การเรียนรู้ของคอมพิวเตอร์ แมชชีนเลิร์นนิ่ง ตอนที่ 3

https://youtu.be/N9fDIAflCMY


การสร้างฟีทเจอร์หรือคุณสมบัติ ที่ดี  ทำอย่างไร


จากบทเรียนที่ผ่านมา เราได้ทราบแล้วว่าความสามารถในการแยกแยะหรือคลาสสิฟายเออร์ (Classifier) นั้นจะมีความถูกต้องแม่นยำได้มากน้อยเพียงไรขึ้นอยู่กับการเลือกใช้ฟีทเจอร์หรือคุณสมบัติของข้อมูลที่นำมาสอนให้คอมพิวเตอร์ได้เรียนรู้ ได้ดีเพียงไร
ดังนั้นสำหรับนักพัฒนาแมชชีนเลิร์นนิ่งแล้วการเลือกฟีทเจอร์ที่ดีและเหมาะสมจึงเป็นเรื่องสำคัญ ดังนั้นการกำหนดและวิธีการคัดเลือกฟีทเจอร์ที่ดีทำอย่างไร
หากคุณต้องทำการแยกแยะแบบไบนารี่ (Binary Classification)  แน่นอนการกำหนดฟีทเจอร์หรือคุณสมบัติที่ดี ก็จะช่วยให้การตัดสินใจในการแยกแยะระหว่างสิ่งสองสิ่งทำได้ง่ายขึ้นด้วย




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


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


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


ต่อไปเราจะลองมาเขียนโค้ดโปรแกรมภาษาไพธอน


เริ่มต้นกำหนดขนาดของประชากรสุนัขที่ใช้ในการทดลองครั้งนี้ทั้งสิ้้น 1,000 รายการ โดยแบ่งเป็น เกรย์ฮาวด์ จำนวน 500 รายการ (greyhounds = 500) และลาบราดอร์ 500 รายการ (labs = 500)
และกำหนดความสูงให้สุนัขแต่ละรายการ (ตัว)
โดยกำหนดให้ความสูงโดยเฉลี่ยของเกรย์ฮาวด์ เป็น 28 และมีค่าเบี่ยงเบน เป็น 4 นิ้ว (28 + 4 * np.random() ) หมายถึงสุนัขสายพันธ์นี้มีค่าฉลี่ยส่วนสูงที่ 28 นิ้ว บวก ลบ 4 และเช่นเดียวกันในสุนัขสายพันธ์ลาบราดอร์ที่มีค่าเฉลี่ยส่วนสูง เป็น 24 นิ้ว บวกลบ 4 (24 + 4 * np.random())
ข้อมูลทั้งสองตัวเกิดเป็นข้อมูลจำนวนสองอะเรย์
จากนั้นแสดงผลให้เห็นด้วยกราฟแท่ง (Histogram) ด้วยคำสั่งต่อไปนี้
จากโค้ดโปรแกรม เรากำหนดให้เกรย์ฮาวด์เป็นกราฟแท่งสีแดง และลาบราดอร์เป็นแท่งสีน้ำเงิน จากนั้นเราลองรันสคริปที่เขียนขึ้น ซึ่งจะได้ผลดังนี้
จากกราฟแท่งหากเราลองพิจารณาแนวแกนนอนคือความสูง (0 - 50) ส่วนแกนตั้งคือจำนวน (0 - 250) จะพบว่า ตั้งแต่ความสูง 15 นิ้ว ไปจนถึง 35 นิ้ว นั้น แท่งสีน้ำเงินมีจำนวนมากกว่า หมายความว่า จำนวนของสุนัขลาบราดอร์ ในแต่ละช่วงความสูง ตั้งแต่ 15 ถึง 35 นิ้วนั้น โดยเฉลี่ยแล้วลาบราดอร์มีจำนวนมากกว่า ซึ่งผิดไปจากสมมติฐานที่เราตั้งไว้ ว่า เกรย์ฮาวด์ มีความสูงมากกว่าลาบราดอร์
(หมายเหตุ อาจเกิดจากในแต่ละช่วงวัย ลาบราดอร์เจริญเติบโตเร็วกว่า แต่เมื่อจนถึงความสูงที่ประมาณ 35 นิ้วแล้ว ลาบราดอร์หยุดเจริญเติบโต ในขณะที่ เกรย์ฮาวด์ยังคงเจริญเติบโตต่อไปทำให้มีความสูงมากกว่า)
จากตัวอย่างที่แสดงให้เห็นนี้ทำให้เห็นได้ว่า ความสูงเป็นฟีทเจอร์หรือคุณสมบัติที่เป็นประโยชน์ในการแยกแยะ แต่ไม่ดีเสมอไป นั่นจึงเป็นเหตุผลที่ว่า เพราะเหตุใด การทำแมชชีนเลิร์นนิ่งจึงจำเป็นต้องใช้ฟีทเจอร์หรือคุณสมบัติเพื่อการแยกแยะมากกว่าหนึ่งเสมอ
Features capture different types of information
นอกจากนี้ ให้เราเขียนเงื่อนไขคำสั่ง If statement แทนที่จะใช้การแยกแยะทั้งสองแบบ
เพื่อให้เห็นภาพว่า ฟีทเจอร์หรือคุณสมบัติประเภทใดที่เราควรเลือกใช้ ในการทำแมชชีนเลิร์นนิ่ง
เริ่มต้นด้วยการคิดเชิงทดลอง หากเราลองคิดดูว่าสุนัขนั้นเป็นสายพันธ์ุเกรย์ฮาวด์ หรือลาบราดอร์ เราจะต้องทราบคุณสมบัติอื่นๆ นอกเหนือจากที่ได้ยกตัวอย่างไปแล้วหรือไม่
เราอาจต้องทราบถึงความยาวของขนสุนัข แต่ละประเภท
หรืออาจต้องทราบว่าสุนัขแต่ละประเภทสามารถวิ่งได้เร็วเท่าใด รวมทั้งอาจต้องทราบว่าพวกมันมีน้ำหนักมากน้อยเพียงไร


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


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


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


ประการสุดท้ายที่เราต้องคำนึงถึงคือ ฟีทเจอร์หรือคุณสมบัติที่เลือกใช้นั้น ต้องสามารถเข้าใจได้ง่าย


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


ทบทวนเทคนิคในการเลือกใช้ฟีทเจอร์หรือคุณสมบัติของเซ็ตข้อมูลที่เป็นประโยชน์ ซึ่งเราได้เรียนรู้ไปในบทเรียนนี้
  • ต้องมีความหมายหรือเป็นประโยชน์ต่อการแยกแยะข้อมูล Informative
  • ต้องมีความเป็นอิสระ Independent
  • ต้องเป็นฟีทเจอร์เชิงเดียว Simple ไม่เป็นฟีทเจอร์ หรือคุณสมบัติเชิงซ้อน สามารถเข้าใจได้ง่าย


โดย ผศ. ณัฏฐ์ โอธนาทรัพย์
สาขาวิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเอเชียอาคเนย์
By Asst., Prof. Nuth OTANASAP
Department of Computer Engineering, Faculty of Engineering,
Southeast Asia University, Bangkok 10160 THA

1 ความคิดเห็น:

  1. Very Impressive AI tutorial. The content seems to be pretty exhaustive and excellent and will definitely help in learning AI course. I'm also a learner taken up AI training and I think your content has cleared some concepts of mine. While browsing for AI tutorials on YouTube i found this fantastic video on AI. Do check it out if you are interested to know more.https://www.youtube.com/watch?v=uXD6OMU_pEc

    ตอบลบ