บทความ
ไม่ว่าจะ ข่าวสาร บทสัมภาษณ์ และ Digital Skill บนสื่อ
มีให้คุณได้อ่านบทความดี ๆ มากมายแล้วที่นี่
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (3)
Asset/People Tracking using BLE Beacons — Scanner Setup สวัสดีค่ะ จากบทความที่แล้วเราได้ทำความเข้าใจกับ Architecture และภาพรวมของระบบติดตามด้วย Beacon ที่เราจะทำกันไปแล้วนะคะ ในบทความนี้…..เราจะมาเริ่มทำ Scanner ด้วย Raspberry Pi (RPi)กันค่ะ ซึ่งเราจะใช้ balenaCloud ค่ะ เป็น Container-based Server Platform (เดิม resin.io) ในการ ช่วย manage & monitor ตัว Scanner และยังช่วย deploy โค้ดของเรา บน RPi ค่ะbalena.ioสิ่งที่เรากำลังจะทำในขั้นตอน Scanner setup นี้นะคะ…พระเอกของเราก็คือ balena นี่แหละค่ะ จัดการทุกอย่างให้น้องพาย น้องพายของเรามีหน้าที่แค่อยู่เฉยๆ รอเสียบปลั๊กจ่ายไฟแค่นั้นละค่ะเราจะใช้ balena เพื่อทำการติดตั้ง balenaOS บนน้องพายของเราค่ะและเราจะใช้ balena เพื่อ push โค้ดของเรา ขึ้นไปที่ balena server เพื่อทำการ deploy ค่ะและสิ่งที่ต้องมีค่ะ…..SD cardRaspberry Pi 3 B/B+balenaCloud accountbalenaCloudSign in to monitor and manage your device fleet from the balenaCloud dashboard.dashboard.balena-cloud.com4. โปรแกรมสำหรับ flash ค่ะ balenaEtcherbalenaEtcher - HomeA cross-platform tool for flashing images to SD cards & USB drives.www.balena.io…..มาเริ่มกันเลยคะ ……1. Sign up and loginเริ่มต้นด้วยการ Sign up for a free account กันก่อนค่ะ แต่ถ้าหากใครมี GitHub หรือ Google account แล้วก็สามารถข้าม Signup ไป Login ได้เลยค่ะ2. Create an applicationหลังจาก Sign up และ Login เข้ามาแล้ว จะเจอหน้า Dashboard ค่ะ จากนั้นก็ Create Application ค่ะ (Step 1)Create a new application(Step 2)ใส่ชื่อ Application Name ค่ะ (ตั้งชื่ออะไรก็ได้นะคะ เดี๋ยวเราจะเอาไว้ใช้ push โค้ดทีหลังค่ะ) แล้วเลือก Default Device Type ที่เราจะใช้ค่ะ น้องพาย 3 ของเราค่ะ Raspberry Pi 3 ส่วน Application Type เลือก Starter ค่ะ (สามารถเพิ่มได้ฟรี 10 Device ค่ะ) เสร็จแล้ว (Step3) คลิก Creatae New Application เลยค่ะ3. Add a device and download the OSหลังจากนั้น จะเห็นหน้า Application Dashbaord ค่ะ ในหน้านี้เราสามารถเพิ่ม Device ตามขั้นตอนในรูปข้างล่างนี้เลยค่ะ ถ้าหากเราจะให้ RPi เราเชื่อมต่อด้วย Wi-fi ก็อย่าลืมเปลี่ยน Network Connection เป็น Wifi + Ethernet และใส่ SSID/ Password ของ Wifi ด้วยค่ะ …เสร็จแล้วเลื่อนลงมาข้างล่างสุดเลยค่ะ ให้คลิก Download balenaOS เพื่อดาวน์โหลด belanaOS image ได้เลยค่ะbalena.ioในขั้นตอนนี้เราสามารถเพิ่ม RPi ได้มากกว่า 1 ตัวนะคะ ใน Application เดียวกัน Device ทุกตัวจะเแชร์โค้ดกันค่ะ และใช้ Dashboard เดียวกันค่ะ4. Flash your SD card and boot the deviceหลังจากได้ไฟล์ image จากขั้นตอนที่ 3 แล้วนะคะ เราจะ flash ลง SD card ที่เราเตรียมไว้ โดยผ่านโปรแกรมที่ชื่อ balenaEtcher ค่ะbalena.ioflash เสร็จก็นำ SD card เสียบลง RPi เลยค่ะ แล้วเสียบ power supply ให้ น้องพายเลยค่าbalena.ioหลังจากเสียบปลั๊กแล้วรอสักพักค่ะ 1–2 นาทีให้เวลาน้องพายเรา install ทุกอย่าง และเชื่อมต่อเข้ากับ balena server ค่ะระหว่างรอกลับมาหน้า Dashboard ของเรากันค่ะ หลังจาก RPi ทำการเชื่อมต่อกับ balena server แล้วเราจะเห็นว่ามีสิ่งนึงโผล่มาบนหน้า Dashboard เราค่ะ หน้าตาก็จะคล้ายๆรูปข้างล่างนี้เลยค่ะ ซึ่งก็คือน้องพายของเราเองค่ะ ถึงตรงนี้ถ้าเราเพิ่ม RPi ไปอีก(มากกว่า 1 ตัว) ก็จะมีจำนวน Device โผล่ขึ้นมาตามจำนวน RPi ของเราคะมาถึงตรงนี้จะเห็นว่า พายของเราในชื่อ silent-violet ได้ online บน balena เรียบร้อยแล้ว ถ้าคลิกเข้าไปดู ก็จะเห็นรายละเอียดของอุปกรณ์ตัวนี้เหมือนรูปข้างล่างค่ะsilent-violetในขั้นตอนต่อไป… เราจะทำการเพิ่ม Environment Variables ให้กับ Application ของเราค่ะ และเริ่ม Deploy โค้ดของเราบนพายกันค่ะ ซึ่งจะนำเสนอในบทความต่อไป… คอยติดตามนะคะอ้างอิงจาก Get started with Raspberry Pi 3 and Node.js
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (2)
Asset/People Tracking — An Introductionจากบทความที่แล้วเราพูดถึง Beacon Technology กันไป รวมไปถึง Use cases ต่างๆที่น่าสนใจในการนำเจ้าตัว Beacon มาใช้งาน ซึ่งเราจะมาทำ Proximity Beacon กันค่ะ ผู้เขียนจะหยิบ Use case สำหรับทำ Asset/People Tracking มาให้ทำกันค่ะ เนื่องจากได้ลองทำใช้จริงมาแล้ว และอยากจะนำแชร์ให้ผู้อ่านได้ลองทำกันค่ะก่อนอื่นขออธิบายเพิ่มเติมเกี่ยวกับ Asset / People Tracking โดยใช้ Proximity Beacon แบบย่อนิดนึงนะคะ เพราะว่าปัจจุบัน Beacon ถูกนำมาใช้ได้หลากหลายรูปแบบหลากหลายวิธี ไม่ว่าจะติด Beacon ไว้ที่ใดที่นึง (Fixed Beacons) อย่างเช่น ผนัง หรือว่า แบบที่ Beacon ถูกนำไปแปะกับสิ่งที่เราต้องการ Track (Roaming Beacons) ที่มีการเคลื่อนที่ได้ตลอดเวลาโดยปกติทั่วไปแล้วเนี่ย Beacon ถูกมาใช้แบบ Fixed Beacons ค่ะ คือนำมาติดไว้กับที่ ที่ใดที่นึง เช่น ผนัง หรือ เพดาน และใช้มือถือเป็นตัวรับสัญญาณ ซึ่งก็จะเหมาะกับเอาไว้ทำ Check-point ค่ะ เช่น เอาไว้เชคว่า รปภ เข้ามาเดินตรวจในพื้นที่แล้วหรือยัง ก็จะมีการเก็บข้อมูลตรงนี้ไว้ หรือ ในเคส โรงพยาบาล สามารถนำมาใช้ตามหาคุณหมอ หรือว่าพยาบาล ว่าอยู่ที่ไหนภายในตึก (ลองนึกว่าถ้าโรงพยาบาลมีหลายชั้น หลายแผนก การจะถามหาใครสักคน ถ้าไม่โทรถามก็น่าจะเป็นเรื่องยากใช่มั้ยค่ะ ) เมื่อมีเหตุฉุกเฉินเกิดขึ้นlighthouse.io — fixed asset beacons, roaming mobile devicesข้อดีคือ ง่ายในการติดตั้ง ประหยัด เพราะสามารถนำมือถือมาเป็นตัวรับสัญญาณ​ Beacon ได้เลยซึ่งก็จะมีข้อเสียว่า จำเป็นจะต้องใช้คนในการถืออุปกรณ์ตัวรับ เช่น มือถือ ไว้กับตัวตลอดเวลาจึงทำให้เกิดการเปลี่ยนวิธี (Approach) ในการนำ Beacon มาใช้งานค่ะ ด้วยการสลับกัน ระหว่าง Beacon (Roaming Beacons) และ ตัวรับ (Fixed Receiver/Scanner)lighthouse.io — fixed BLE scanners, roaming asset beaconsข้อดีคือ ไม่จำเป็นต้องใช้มือถือเป็นตัวรับสัญญาณค่ะ และสามารถติดตาม (Track) Beacons ได้ทีละหลายตัวๆ แบบ Real-time ค่ะอาจจะมีข้อเสียตรงที่ เนื่องจากเราใช้ตัวรับแบบติดผนัง อาจจะทำให้มีค่าใช้จ่ายในการติดตั้ง ในการจัดสรรระบบไฟให้กับตัวรับค่ะ แต่ก็แลกมาด้วยการที่เราจะได้รับข้อมูลเสถียรขึ้น ซึ่งก็ถือว่าคุ้มค่ะ….ทีนี้ลองมาดูระบบที่เราจะทำกันคร่าวๆก่อนนะคะ…. เราจะใช้วิธีแบบ Fixed Scannerห & Roaming asset Beacons นะคะ เพราะเหมาะสมกะเคสใช้งานของเราค่ะAsset/People Tracking using BLE Beaconsเราจะติดตั้งพื้นที่ของเราด้วยตัวรับ(Scanner) โดยใช้ RasperryPi ค่ะ เมื่อมี Proximity Beacon เข้ามารัศมี ที่ตัวรับสามารถ Detect เจอ ตัวรับก็ทำการส่งข้อมูลผ่าน MQTT ไปยัง NETPIE ซึ่งเป็น Cloud Platform ค่ะ (รายละเอียดเพิ่มเติมในบทความถัดไปนะคะ) และส่งไปยัง Server ของเราค่ะที่ Server เราจะนำข้อมูลเหล่านี้มาคำนวณหาระยะทาง เพื่อให้แน่ใจว่าสามารถระบุตำแหน่งให้ถูกต้องแม่นยำที่สุด (จะเห็นว่า รัศมีของตัวรับ มีการทับซ้อน (Overlap)กันอยู่ค่ะ จึงต้องนำมาคำนวณว่า Beacon อยู่ในพื้นที่ของตัวรับตัวไหนค่ะ )และเก็บไว้ที่ Database(sqlite) ค่ะ ซึ่งจะมีการนำข้อมูลเหล่านี้มานำเสนอบนหน้าเวปของเราค่ะส่ิงที่ต้องใช้ค่ะ (Hardware)Server ค่ะ เราจะใช้เป็นที่เก็บข้อมูล และ สำหรับทำ Web server ค่ะBeacon ค่ะScanner ค่ะ — ในบทความนี้เราเลือกใช้ Raspberry Pi 3 B/B+ ค่ะ เพราะมี On Board BluetoothRaspberry Pi 3 Bsource: radius networksในบทความนี้เราเลือกใช้ RadBeacon Dot ของ Radius Networks ค่ะ ซึ่งมีขนาดเล็ก และรองรับiBeacon™ (Apple)Eddystone™(Google)และที่สำคัญเลยมี Configuration App ให้ใช้ค่ะ ง่าย และ สะดวกดีค่ะ สามารถใช้ได้ทั้ง ios และ android ค่ะเตรียมอุปกรณ์กันครบแล้วใช่มั้ยค่ะ งั้นเราตามไปดูวิธีติดตั้ง Scanner และ Server ในบทความถัดไปได้เลยค่ะอ้างอิงจาก 6 ways to use BLE beacons for people and asset tracking
โดย: Laris
| IoT
สิ่งเล็กๆที่เรียกว่า Beacon (1)
Bluetooth Low Energy Beacon Technology — An Introductionหลังจากที่เราได้ทำความรู้จักกับ MQTT หนึ่งใน Protocol สำคัญสำหรับ IoT ได้ลองเล่นกับ บอร์ด ESP32 และ Arduino IDE และได้ลองทำ Home Automationในบทความของ Home Assistant กันไปแล้ว ในบทความนี้เราจะมาเริ่มทำความรู้จักกับ Location-Based Technology โดยใช้เจ้าตัวเล็กๆ สิ่งนึงที่เรียกว่า Beacon กันค่ะ และเราจะมาลองทำ Proximity Detection using Bluetooth Low Energy Beacons กันค่ะ แต่ก่อนอื่นมาทำความรู้จักกับเจ้า Beacon ที่ว่ากันก่อนค่ะWhat is a Beacon?Beacon คืออุปกรณ์ขนาดเล็กชนิดนึงค่ะ (เล็กพอๆกับขนาดของนาฬิกาข้อมือได้เลยค่ะ) ที่สามารถส่งสัญญาณไร้สาย แบบ Bluetooth Low Energy (BLE) ไปยังอุปกรณ์ในระยะใกล้ๆที่เปิดการเชื่อมต่อ Bluetooth ไว้ค่ะ อย่างเช่น Smart Phone ค่ะsourceซึ่งก็มีหลายเจ้าที่พัฒนาตัว Beacon ขึ้นมาหลากหลายรูปทรง หลากหลายขนาดตั้งแต่ขนาดเท่า Coin Cell battery ไปถึงขนาดเท่าบัตรเครดิต เพื่อให้เหมาะสมกับวัตถุประสงค์ในการใช้งานค่ะ ก็จะมีทั้งแบบที่ใช้พลังงานจากแบตเตอรี่ และที่ไม่ต้องใช้แบตเตอรี่ เช่น USB และ Ambient Electromagnetic Waves ที่ดักจับคลื่นวิทยุรอบๆตัวเรามาใช้เป็นพลังงานค่ะ …source : IT Craftแล้ว Bluetooth(Bluetooth Classic) ที่เราคุ้นเคย คุ้นหู รู้จักกันมานาน กับ Bluetooth Low Energy (BLE) ใช่ตัวเดียวกันรึป่าวนะ?ถ้าพิจารณาตาม Standard ที่ถูกกำหนดขึ้นมาโดย Bluetooth Special Interest Group (SIG) แล้ว Bluetooth และ BLE (หรือที่รู้จักกันในชื่อ Bluetooth 4.0) ถือว่าเป็นพี่น้องกันนะค่ะ ใช้คลื่นความถี่เดียวกันที่ 2.4 GHz (ISM Band) และเป็นความถี่เดียวกันกับ Wi-Fi ค่ะ แต่ BLE ถูกออกแบบมาเพื่อให้ประหยัดพลังงานกว่าพี่ Bluetooth เยอะเลยค่ะ เพื่อให้เหมาะสมกับอุปกรณ์ที่เชื่อมต่อใน IoT ค่ะเทคโนโลยี BLE ช่วยให้ประหยัดพลังงานได้ยังไง ?source :plugintoiotง่ายๆเลยค่ะ BLE เป็นพวกขี้เกียจค่ะ จะอยู่ใน Sleep mode เกือบจะตลอดเวลา เพื่อเป็นการประหยัดพลังงานค่ะ จะตื่นขึ้นมาก็ตอนที่จะต้องทำการเชื่อมต่อเพื่อส่งข้อมูล ซึ่งข้อมูลพวกนี้ส่วนใหญ่ก็จะเป็นข้อมูลเกี่ยวกับ State ของตัว Beacon เอง ไม่ได้มีขนาดใหญ่มาก และไม่จำเป็นต้องตื่นเพื่อทำการส่งข้อมูลต่อเนื่องตลอดเวลา .. เห็นมั้ยค่ะว่าเค้าออกแบบมาเพื่องาน IoT จริงๆ….. ไม่เพียงแต่ Beacon เองที่ประหยัดพลังงานนะคะ การเชื่อมต่อของมือถือแบบ BLE ยังช่วยให้มือถือ ประหยัดพลังงานได้มากกว่าการเชื่อมต่อกับ Wifi ด้วยค่ะHow does a beacon work?หน้าที่หลักของ Beacon คือ Broadcast สัญญาณ ที่เรียกว่า Advertisement ซึ่งก็จะเป็นไปตาม Standard ของ Bluetooth protocols ที่กำหนดโดย Bluetooth SIG ลองคิดตามนะคะ….นั่นหมายความว่า Beacon พวกนี้สามารถเชื่อมต่อได้กับ Smart Phone/Device ทั่วโลก เพียงแค่ Smart Phone/Device พวกนี้เปิดการเชื่อมต่อแบบ Bluetooth ไว้BLE Beacon Use Casesเมื่อ Smart Phone รับและอ่าน Advertisement แล้ว จะมีอะไรเกิดขึ้นกับ Smart Phone… ก็จะขึ้นอยู่กับจุดประสงค์ของผู้พัฒนาค่ะ ลองมาดูกันค่ะ ว่าเค้าใช้ Beacon ทำอะไรกันบ้างProximity Beaconการ Beacon มาใช้งานในแบบ Proximity ทั่วไปแล้ว หลังจากได้มือถือเราได้รับ Advertisement จาก Beacon จะมี Notification ขึ้นมาค่ะ เพื่อนำไปสู่หน้าเวปที่ถูกกำหนดไว้ (Physical Web) หรือ เปิดแอป บนมือถือค่ะ ซึ่งได้รับความนิยมในการนำมาทำ Promotion ค่ะ เพียงแค่เดินผ่านหน้าร้านที่ติดตั้ง Beacon ไว้ สมาร์ทโฟน ของเราก็อจะได้รับแจ้งเตือนเกี่ยวกับโปรโมชันของร้านนั้นๆ ผ่าน Notification ค่ะApple ได้เปิดตัว iBeacon ด้วยการนำมาใช้ติดตั้งใน Apple Store ทั่วประเทศในอเมริกา เพื่อให้ลูกค้าสามารถเข้าถึงรายละเอียดของสินค้าที่วางขายได้ง่ายๆ ผ่านมือถือของลูกค้าเองในบ้านเราก็นำมาใช้นะคะ เช่น Tesco Lotus เริ่มติดตั้งเทคโนโลยี Beacon ในห้างสรรพสินค้า เพื่อส่งตรง ข้อมูล ส่วนลด และ สิทธิประโยชน์ต่างๆ เข้าสมาร์ทโฟนของลูกค้าที่เข้ามาจับจ่ายซื้อของ เพียงแค่ดาวน์โหลดแอปและเปิดการเชื่อมต่อ Bluetooth เอาไว้Central และ Robinson ก็ได้นำ LINE Beacon มาใช้เป็นช่องทางนึงของการตลาดเหมือนกันค่ะ ด้วยการเพิ่ม LINE Official Account ของ Central และ Robinson ระหว่างที่เราเดินช้อปปิ้ง เราก็จะได้รับคูปองส่วนลด และโปรโมชั่นส่งเข้ามาให้ถึงมือเลยค่ะนอกจากห้างสรรพสินค้าแล้ว โรงพยาบาลเองยังนำเทคโนโลยี Beacon มาใช้เพื่อเพิ่มประสิทธิภาพด้านดูแลสุขภาพและการบริการให้กับผู้มารับบริการที่โรงพยาบาลค่ะจะเห็นว่า Beacon Technology สามารถนำไปประยุกต์ใช้ได้หลากหลายประเภทธุรกิจมากค่ะIndoor Guidanceจุดเด่นของเทคโนโลยี Beacon อีกอย่างนึงคือ สามารถบอกระยะห่าง ระหว่าง Beacon และตัวรับได้ค่ะ ซึ่งตัวรับ หรือ Smart Phone จะเป็นตัวคำนวณระห่างนี้โดยใช้ ความแรงของสัญญาณ ซึ่งส่วนใหญ่จะถูกนำมาใช้ในงาน Indoor Navigation ค่ะ เพราะระบบสามารถระบุตำแหน่งของเราได้ เหมาะสำหรับการประยุกต์ใช้กับอาคารขนาดใหญ่มีหลายชั้น หลายแผนก เช่น ห้างสรรพสินค้า สนามบิน หรือแม้แต่ในงานนิทรรศการต่างๆ พิพิธภัณฑ์ เราก็สามารถนำมาความ User Experience ให้กับผู้ใช้ได้ค่ะ และยังสามารถนำไปใช้ร่วมกับ Proximity Feature ได้ค่ะAsset/People Trackingsource : Lighthouse.ioเราสามารถนำ Beacon ไปติดไว้กับ Asset หรือ คน ที่เราต้องการจะ Track ได้ค่ะ ซึ่งค่อนข้างจะดีกว่า RFID เพราะไม่จำเป็นต้องมีคนมามาค่อยแสกนอ่าน Tag ระบบสามารถหา Beacon เจอได้เอง ถ้า Beacon เข้ามาอยู่ในระยะที่ตัวรับ รับสัญญาณได้ ซึ่งตัวรับก็จะส่งข้อมูลต่อไป เพื่อนำไปใช้ตามวัตถุประสงค์ที่ต้องการได้ค่ะTelemetry Data for IoT Sensorsนอกเหนือจาก 128-bit ProximityUUID เราสามารถเพิ่มข้อมูลที่เป็น Telemetric Data เข้าไปใน Advertisementได้ค่ะ อย่างเช่น อุณหภูมิ ค่าแบตเตอรี เพื่อส่งข้อมูลให้ตัวรับต่อไปค่ะ ซึ่งก็จะเป็นการเพิ่มขีดความสามารถของ IoT Sensors และ Beacon ค่ะเทคโนโลยี Beacon ยังมีความสามารถอีกเยอะแยะมากมายที่เราสามารถนำไปประยุกต์ใช้ได้อีกค่ะ เช่น ยกระดับงานบริการ นำมาเป็นพนักงานต้อนรับ หรือ พนักงานแนะนำสินค้า/ส่วนลด/คูปอง เพื่อเพิ่มยอดขายได้ การนำ Beacon มาใช้ทำบัตรคิวสำหรับสถานที่ราชการหรือธนาคาร เพียงแค่เข้าไปอยู่ในรัศมีที่รับสัญญาณจาก Beacon ก็สามารถรับบัตรคิวผ่านแอป หรือผ่านมือถือได้ง่ายๆค่ะข้อดีอีกอย่างหนึ่งของ Beacon คือการให้ข้อมูลทางสถิติค่ะ อย่างเช่น ในโรงงานอุตสาหกรรม การเก็บข้อมูลโดยการ Track พนักงานในโรงงาน เราสามารถรู้ได้ว่า พนักงานใช้เวลาส่วนใหญ่ในส่วนไหนของการผลิต ส่วนไหนที่ยังขาดพนักงาน ซึ่งเราสามารถนำข้อมูลทางสถิติตรงมาวิเคระห์ เพื่อจัดสรรทรัพยากรบุคคลให้เหมาะสมกับรูปแบบการทำงานของสถานประกอบการได้ค่ะ … และในบทความถัดไปเราจะมาทำระบบ Tracking โดยใช้ Proximity Beacon และลองนำข้อมูลที่ได้มาแสดงผลกันค่ะ
โดย: Kan Ouivirach
| Machine Learning
ลด Dimension ด้วย Principal Component Analysis (PCA)
บทความนี้จะมาดูวิธีลด Dimension กันด้วย Principal Component Analysis หรือ PCA กันครับ ออกตัวก่อนว่าบทความนี้ไม่ได้ตั้งใจจะมาอธิบาย PCA นะครับ แต่อยากจะมาให้เห็นว่ามันสามารถเอาไปลด Dimension ได้นะ ลดแล้วข้อมูลจะหน้าตาประมาณไหน 😚ทำไมต้องลด? บาง Dimension อาจจะไม่จำเป็นในการสร้างโมเดลก็เป็นได้ครับ แต่เราไม่แน่ใจว่าจะตัดออกดีไหมอะไรแบบนี้ แล้วก็ถ้ายิ่งมี Dimension เยอะๆ เราอาจจะเจอปัญหา Curse of Dimensionality ก็เป็นได้ คือยิ่งถ้าเรามี Dimension ที่เยอะขึ้น สิ่งที่จะเกิดตามมาคือข้อมูลของเราจะ Sparse มันจะแหว่งๆ ขาดๆ หายๆ ทำให้ส่งผลต่อโมเดลของเราวิธีลด Dimension ก็มีหลายวิธีครับ วิธีที่ใช้กันเยอะก็คงจะไม่พ้น PCA นั่นเอง เรามาเขียนโค้ดไปทำความเข้าใจกันไปดีกว่าครับในบทความนี้จะขอใช้ข้อมูล 2D นะครับ เพื่อความง่าย และเราสามารถพลอตกราฟได้ จะทำให้เข้าใจได้มากขึ้น เรามาเริ่มด้วยการ Import สิ่งที่จำเป็นต้องใช้กันก่อน%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltเราจะใช้ Numpy สร้างข้อมูลขึ้นมาดู และใช้ Matplotlib เพื่อพลอตกราฟ ส่วน %matplotlib inline เอาไว้สำหรับคนที่ใช้ Jupyter Notebook แล้วอยากให้กราฟขึ้นมาแสดงผลที่ Notebook ของเราครับผมจะสร้างข้อมูล 2 มิติขึ้นมาแบบสุ่มตามนี้mean = [0, 0]cov = [[1, 0], [10, 10]]X = np.random.multivariate_normal(mean, cov, 100)plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.5)plt.axis('equal')กราฟข้อมูล 2 มิติสิ่งที่ PCA นั้นจะพยายามทำ คือมันจะพยายามหาแกนที่สำคัญในข้อมูลของเราที่สามารถอธิบายการกระจายตัวของข้อมูลของเราได้from sklearn.decomposition import PCApca = PCA(n_components=2)pca.fit(X)print(pca.explained_variance_)print(pca.components_)ได้ผลตามนี้ผลที่ได้จากการรัน PCAค่าพวกนี้บอกอะไร? ลองเอามาพลอตดูครับplt.plot(X[:, 0], X[:, 1], 'o', alpha=0.5)for length, vector in zip(pca.explained_variance_, pca.components_): v = vector * 3 * np.sqrt(length) plt.plot([0, v[0]], [0, v[1]], '-k', linewidth=3)plt.axis('equal');จะได้ผลตามนี้กราฟที่นำเอาค่า explained variance กับ components ที่ได้จาก PCA มาพลอตจากรูปข้างต้นจะเห็นได้ว่ามี 2 เวคเตอร์ ทั้ง 2 เวคเตอร์นี้กำลังบอกถึง Direction ของข้อมูล และเวคเตอร์ที่ยาวกว่าจะบอกถึง “ความสำคัญ” ของ Direction ของข้อมูลนั้นๆ ตรงนี้หมายความว่า จริงๆ แล้วเราสามารถเลือกเฉพาะ Direction ที่สำคัญๆ ได้ครับ เราจะตัด Direction ของข้อมูลที่ไม่สำคัญทิ้งไปก็ได้ ข้อมูลที่ไม่สำคัญอาจจะหมายถึงข้อมูลนั้นมี Information ที่น้อย และอาจจะไม่จำเป็นสำหรับการนำเอาไปใช้งานต่อวิธีตัดทิ้งล่ะ? เราตัดโดยการเลือกเก็บข้อมูลส่วนใหญ่ไว้ได้ครับ เช่น เราเลือกเก็บข้อมูล 95% ไว้ จะเขียนโค้ดได้ตามนี้pca = PCA(0.95)X_trans = pca.fit_transform(X)หรือเราจะเลือกเป็นจำนวน Component ก็ได้ ในที่นี้ทั้งหมดมี 2 Components เราอาจจะเลือกแค่ 1pca = PCA(n_components=1)X_trans = pca.fit_transform(X)ค่า X_trans ในที่นี้คือข้อมูลที่สำคัญ 95% ครับ ซึ่งจะมีอยู่ 1 มิติ (จากเดิมมี 2 มิติ) บางคนอาจจะสงสัยว่าจริงๆ เอาตัด Column ทิ้งไปหรือเปล่า คำตอบคือไม่ใช่ครับ จริงๆ แล้วเรา Transform ข้อมูลให้เหลือ 1 มิติ ลองดูโค้ดกับรูปประกอบด้านล่างX_new = pca.inverse_transform(X_trans)plt.plot(X[:, 0], X[:, 1], 'o', alpha=0.2)plt.plot(X_new[:, 0], X_new[:, 1], 'bo', alpha=0.8)plt.axis('equal');ผลที่ได้คือกราฟที่เรา Transform ข้อมูลลงไปบนแกนสำคัญที่เราเลือกจะเห็นได้ว่าเรา Transform ข้อมูล หรือ Project ข้อมูลลงไปบนแกนสำคัญที่เราเลือกนั่นเองก็จะประมาณนี้ครับ การใช้งาน PCA เพื่อลด Dimension ของข้อมูล ลองไปศึกษากันต่อดูนะครับ ทำงานด้านนี้ไม่ช้าก็เร็ว ยังไงก็ได้เจอกับ PCA แน่นอน 😎
โดย: Kan Ouivirach
| Machine Learning
โมเดลแบบ Parametric กับ Nonparametric ต่างกันอย่างไร?
มีอยู่หลายครั้งที่เราอ่านจะไปอ่านเจอคำๆ ว่า Parametric กับ Nonparametric เรามาลองทำความรู้จักกับโมเดลทั้ง 2 ประเภทนี้กัน ดูแล้วทั้ง 2 ประเภทนี้ต่างกันอย่างไรบ้าง?โมเดลแบบ Parametricเป็นโมเดลที่เรามีจำนวน Parameters ที่จำกัด คือไม่ว่าเราจะมีจำนวนข้อมูลเท่าไหร่ จำนวน Parameters ก็จะมีอยู่แค่นั้นครับ ยกตัวอย่างโมเดลที่ง่ายที่สุดก็คงเป็น Linear Regression ที่มีข้อมูลแค่ 1 Dimension ตัว Parameter ที่เราจำเป็นต้องหาก็คือค่า Weight (w) และค่าจุดตัดแกน Y (b) ลองดูสมการด้านล่างนี้ประกอบy = w*x + bส่วนข้อมูลที่เราจะนำเข้ามาสอนก็คือค่า x กับ y ครับ โมเดลแบบ Parametric มีข้อดีที่เห็นชัดๆ เลยครับคือเราไม่จำเป็นต้องเก็บข้อมูลไว้หลังจากที่สอนโมเดลเสร็จ เราสามารถนำเอา Parameter ที่ได้ไปใช้งานต่อได้เลยโมเดลแบบ Nonparametricเป็นโมเดลที่ไม่ได้กำหนดตายตัวว่าจะใช้ฟังก์ชั่นในการ Map ข้อมูลแบบไหน แล้วก็สมมุติเอาว่าการกระจายตัวของข้อมูลไม่สามารถนิยามได้ในเซตของ Parameters ที่มีจำนวนจำกัด โมเดลแบบ Nonparametric นี้จะเน้นใช้ประโยชน์จากข้อมูลเป็นหลัก โมเดลที่ง่ายที่สุดก็คือ k-Nearest Neighbors (k-NNs) นั่นเอง มีความต่างกับ Linear Regression ค่อนข้างชัดเจนที่ว่า k-NNs นั้นจำเป็นที่ต้องมีข้อมูลทั้งหมดไว้เพื่อที่จะ Predict อะไรสักอย่าง และ k-NNs ไม่ได้ใช้ข้อมูลพวกนั้นมาปรับค่า Parameter ใดๆ ในตัวอัลกอริธึ่มของมันเองเลย ข้อเสียก็ตอนที่ข้อมูลมีขนาดใหญ่มากๆ โมเดลของเราก็จะใหญ่ตามไปด้วย ซึ่งเราก็ต้องไปหาวิธีเก็บข้อมูลให้ Efficient มากขึ้นด้วยข้อแตกต่างระหว่างโมเดลทั้ง 2 แบบ จริงๆ มีอีกนะ บทความนี้แค่อยากจะนำเสนอในมุมง่ายๆ ที่เห็นชัดๆ จะได้สามารถไปศึกษาเพิ่มเติมได้ หวังว่าจะพอแยกแยะออกนะครับ 😙
โดย: Kan Ouivirach
| Machine Learning
การวาง Project Structure สำหรับงานด้าน Machine Learning
เวลาที่เราทำโปรเจคอะไรสักอย่าง คำถามประมาณว่า “เราจะมีโฟลเดอร์อะไรบ้าง?” หรือ “เราจะวาง Project Structure เราอย่างไรดี?” จะแว็บเข้ามาในหัวเสมอ ซึ่งจริงๆ มันก็ไม่ใช่ปัญหาใหญ่โตอะไรหรอกครับ แต่บางทีก็ทำให้เรารำคาญอยู่บ่อยๆ ได้ พอดีตอนที่ผมเรียนอยู่ ได้ไปเจอบทความของ Ali Eslami เค้าเขียนเรื่องนี้ไว้ และผมก็ใช้ Structure แบบนี้มาจนถึงทุกวันนี้ครับ เลยอยากจะมาบอกเล่ากันหน่อยหน้าตาของ Project Structure จะเป็นประมาณนี้project/ ├─ code/ ├─ data/ │ ├─ input/ │ ├─ working/ │ └─ output ├─ demos/ └─ tests/โดยแต่ละ Folder มีความหมายตามนี้project ก็คือชื่อโปรเจคของเรานั่นเองdata เป็นโฟลเดอร์ที่เอาไว้เก็บ Dataset ของเรา ซึ่งในโฟลเดอร์นี้ก็จะแบ่งออกเป็น 3 ส่วนด้วยกัน คือ inputเป็นโฟลเดอร์เก็บข้อมูลแบบ Raw และเราจะไม่แก้ไขใดๆ เลยในโฟลเดอร์นี้ ส่วน workingเป็นโฟลเดอร์เก็บไฟล์อะไรก็ตามที่โค้ดหรือโมเดลของเราสร้างขึ้นมา ไฟล์ในโฟลเดอร์นี้จะมีการเปลี่ยนแปลงแทบตลอดเวลา และ output จะเป็นโฟลเดอร์ที่เอาไว้เก็บผลลัพธ์จากโค้ดหรือโมเดลของเราส่วน demos กับ tests ก็ตามชื่อเช่นกัน เอาไว้สำหรับเอาไปนำเสนอผลงาน และเอาไว้ทำสอบผลงาน ซึ่ง 2 โฟลเดอร์นี้อาจจะเก็บแค่สคริป เช่น Bash ที่เอาโมเดลมารันแสดงผลก็ได้ครับข้อดีแยกส่วนของโค้ดกับส่วนของข้อมูลออกจากกันทำให้ง่ายต่อการแชร์โค้ดให้กับคนอื่น และปรับเปลี่ยน Dataset ในภายหลังง่ายต่อการแยก Dataset ออกมาจาก Version Control เพราะเราสามารถจะเขียน Configuration ให้ไม่ต้องเอาโฟลเดอร์ data เข้าไปใน Version Control ได้การแบ่งย่อยโฟลเดอร์ในโฟลเดอร์ data ทำให้เรา Reproduce งานออกมาได้เป็นระเบียบมากขึ้น เราจะรู้ตัวเองว่าอะไรก็ตามที่อยู่ใน input เราจะไม่แก้ อะไรก็ตามที่อยู่ใน working เราสามารถลบทิ้งได้โดยไม่ต้องกังวล และอะไรก็ตามที่อยู่ใน output เราจะเอาไปนำเสนอผลงานส่วน demos กับ tests อาจจะมีสคริปที่ซ้ำๆ กัน แต่ก็ช่วยทำให้เราแยกโฟกัสของเราได้ง่ายขึ้นครับ ว่าเรากำลังจะทดสอบหรือเรากำลังจะนำเสนอผลงานตามไปอ่านต้นฉบับกันได้ที่ Patterns for Research in Machine Learning ครับ เค้าไม่ได้เขียนแค่เรื่องของ Project Structure นะ ยังมีส่วนเสริมในเรื่องของการแยกส่วน Options กับส่วน Parameters ออกจากกันอีกด้วยใช้ Project Structure แบบกันไหน มาพูดคุยกันได้นะครับ 🤓
โดย: Kan Ouivirach
| Machine Learning
ค่า Hyperparameter ใน Machine Learning คือ?
ในโลกของ Machine Learning จะมี Parameter ชนิดหนึ่งอยู่ที่เรียกว่า Hyperparameter ครับ ทำไมเราถึงต้องรู้จักมันล่ะ? มันคืออะไรหนอ? 🤔เวลาที่เราสร้างโมเดล Machine Learning ขึ้นมา เราจะป้อนข้อมูลเข้าไปเพื่อสอนโมเดลของเรา ซึ่งจริงๆ แล้วการสอนเนี่ย มันก็คือการที่เราหาค่า Parameter ต่างๆ ของโมเดลที่เหมาะสมกับข้อมูลที่เราป้อนเข้าไป หรือเราอาจจะพูดได้ว่าค่า Parameter พวกนี้เป็นค่าที่ได้มาจากข้อมูลนั่นเอง ค่าพวกนี้ก็เช่นค่า Weight ใน Neural Networkค่า Coefficient ใน Linear Regressionแต่ทีนี้เรายังมีค่า Parameter อีกจำพวกหนึ่งด้วย เป็นค่าที่เราหาไม่ได้จากข้อมูล ซึ่ง Parameter พวกนี้เราจะเรียกว่า “Hyperparameter” ซึ่งส่วนใหญ่แล้วเราก็จะกำหนดค่าไว้ก่อนที่เราจะนำโมเดลเข้าขั้นตอนการเรียนรู้ (Model Training) ค่าพวกนี้ก็จะมีประโยชน์คือทำให้โมเดลของเรามีประสิทธิภาพมากขึ้นครับ ถ้าเราสามารถหาค่าที่ดีมาได้ตัวอย่างของ Hyperparameter มีอะไรบ้าง?ค่า Learning Rate ที่เอาไว้สอน Neural Networkค่า k ใน k-Nearest Neighbors หรือใน k-Means Clusteringจะเห็นได้ว่าค่าพวกนี้เราต้องเซตเอาไว้ก่อนที่เราจะสอนโมเดลครับเราจะได้ค่า Hyperparameter มาได้อย่างไร?เนื่องจากเราไม่สามารถหาค่านี้ได้จากข้อมูลของเรา สิ่งที่เราพอจะได้ทำก็จะประมาณนี้ทำ Cross Validation กับหลายๆ ค่า Hyperparameter ครับหา Domain Export มาดูข้อมูล ช่วยกำหนดค่าให้วัดดวง!ผมแนะนำวิธีแรกนะครับ 😂 เราสามารถเขียนโปรแกรมแล้วปล่อยให้โปรแกรมรันไปได้ ผมมองว่ามันคือการทำแนว Trial & Error ครับ ในการหาค่า Hyperparameter ที่ดีที่สุดคิดว่าน่าจะพอเห็นถึงความแตกต่างระหว่าง Parameter ธรรมดากับ Hyperparameter นะครับ 😎 ดังนั้นเนี่ยตอนที่เราสอนโมเดลของเรา เราก็อย่างลืมลองปรับ Hyperparameter เป็นหลายๆ ค่าด้วยนะ พยายามหาค่าที่ทำให้โมเดลของเราได้ผลที่ดีที่สุด
โดย: Kan Ouivirach
| Machine Learning
การจัดการ Imbalanced Data ใน Machine Learning
Imbalanced data เป็นปัญหาด้วยเหรอ? ทำไมถึงต้องสนใจด้วยไปจัดการมันด้วย?เป็นครับ! ต้องสนใจด้วย! ปัญหานี้เป็นปัญหาที่เจอตลอดเวลากับแทบจะทุกชุดข้อมูลเลยก็ว่าได้ และจะเป็นปัญหามากกับการทำ Classification เพราะว่าสิ่งที่จะเกิดขึ้นก็คือว่า จำนวน Class ที่เราจะทำนายหรือจะจำแนกมีไม่เท่ากันทำให้ความแม่นยำตอนที่เราจะทำนายหรือจำแนกมีค่าคลาดเคลื่อนไป ไม่น่าเชื่อถือ ค่า Null Accuracy จะสูงมาก อาจจะมากกว่า 90% เลยด้วยซ้ำถ้าใครงงว่า Null Accuracy คืออะไร ลองอ่าน ใช้ Null Accuracy เป็น Baseline ในการวัดผลโมเดลของเรา ก่อนเนอะทีนี้เรามาดูวิธีจัดการกันบ้าง บทความนี้จะมาเสนอวิธี 2 วิธีครับ ที่เราไม่ต้องไปยุ่งกับตัวข้อมูลเลยวิธีแรก.. จัดให้เป็นปัญหา Anomaly Detection ซะจากที่เราพยายามจะใช้วิธี Classification ในการแก้ปัญหา ให้เราเปลี่ยนวิธีคิดครับ ซึ่งว่ากันง่ายๆ เลย ก็ประมาณว่าให้เราจับเอาคลาสที่มีจำนวนมากที่สุด แล้วบอกว่ามันคือ Normal Profile (Pattern) ซะ แล้วนอกนั้นคือ Abnormal หมด ยกตัวอย่างๆ ถ้าสมมุติว่าเราต้องการที่จะจำแนกว่าอีเมลไหนเป็นสแปมหรือไม่ใช่สแปม แล้วเรามีข้อมูล 100 อีเมล เป็นสแปม 2 อีเมล แล้วอีก 98 เป็นอีเมลที่ไม่ใช่สแปมสิ่งที่เราจะทำก็คือให้เราโมเดลแค่ 98 อีเมลที่ไม่ใช่สแปมพอครับ แล้วคิดซะว่ามันคือ Normal Profile แล้วอะไรที่ไม่ใช่ Normal เราก็ตอบว่ามันคือสแปมครับการทำที่ง่ายสุดน่าจะเป็นการนำเอา Normal Profile มาทำ Clustering ครับ แล้วกำหนด Threshold เอาว่า ถ้าระยะห่างระหว่างข้อมูลที่เข้ามาใหม่เกิด Threshold ที่เรากำหนดไว้ เราก็พิจารณาว่าข้อมูลนั้นเป็นสแปมครับผมวิธีที่ 2.. เอา Metric อื่นมาช่วยในการวัดผลโมเดลในกรณีของ Imbalanced Data เราจะใช้ค่า Accuracy อย่างเดียวมาวัดผลไม่ได้ เนื่องจาก Null Accuracy มีค่าสูงเกินไป เราจะหา Metric อื่นมาช่วยในการวัดผลของเราครับ Metric นั้นคือค่า Area Under Curve (AUC) ครับผม ซึ่งค่า AUC นี่จะได้มาจากกราฟ Receiver Operating Characteristic (ROC) กราฟนี้จะมีลักษณะตามรูปด้านล่างนี้ครับรูป ROC จาก Wikiจากรูปถ้าโมเดลเราดี กราฟมันจะโค้งเข้ามุมซ้ายบนครับ คือมีค่า True Positive Rate (TPR) สูง และมีค่า False Positive Rate (FPR) ต่ำ ทีนี้ค่า AUC มันก็คือค่าพื้นที่ใต้กราฟนี่แหละ ถ้าโมเดลเราจำแนกหรือทำนายแม่น ค่า AUC นี้ก็จะมีค่าเข้าใกล้ 1 ครับผมค่า AUC นี่จะออกมาเป็นความน่าจะเป็นที่โมเดลเราจะสามารถแบ่งจำแนก Class ของเราได้ดีขนาดไหนครับ คือเราอาจจะได้ค่า Accuracy ประมาณ 98% แต่ได้ค่า AUC ประมาณ 0.1 ก็เป็นได้ครับ คือมี FPR สูงมากนั่นเอง หน้าที่ของเราคือหาวิธีทำให้ค่า AUC มันสูงขึ้นมาให้ได้ครับ 💪จริงๆ ก็ยังมีวิธีอื่นอีกนะครับ เช่นการ Upsampling หรือ Downsampling ข้อมูลของเรา แต่วิธี 2 วิธีจะเป็นการเพิ่มข้อมูลของเราขึ้นมา (อย่างมีหลักการ) ซึ่งก็สามารถไปใช้ได้เช่นกันโดยไม่ผิดอะไรครับ สุดท้ายถ้าโมเดลของเราให้ผลออกมาดี น่าเชื่อถือ ก็น่าจะแฮปปี้กันทุกฝ่าย 🤗
โดย: Kan Ouivirach
| Machine Learning
ปัญหา Regression ต่างกับ Classification อย่างไร?
ทั้งปัญหา Regression และปัญหา Classification ทั้งคู่อยู่จัดอยู่ในการเรียนรู้แบบ Supervised Learning เราลองมาดูปัญหาทีละปัญหากันว่ามันคืออะไรกันบ้างนะปัญหา Regressionลองนึกถึงแอพพลิเคชั่นที่เราใช้กันในปัจจุบันเช่น เราอาจจะมีระบบทำนายการเติบโต ทำนายยอดขาย ทำนายราคาสินค้าหรือบ้าน รวมไปถึงการทำนายระดับความดันเลือด ระบบพวกนี้จะมีสิ่งที่เหมือนกันก็คือเราจะมีข้อมูลและเราจะนำข้อมูลนั้นๆ ไปทำนายค่าๆ หนึ่งในอนาคต ทีนี้ประเด็นสำคัญคือ ค่าๆ หนึ่งในอนาคตเนี่ย จะเป็นค่าแบบ Continuous ครับให้โค้ดเป็นคนอธิบายครับ สมมุติว่าผมมีข้อมูลของเวลาที่ใช้ในการอ่านหนังสือและคะแนนสอบที่ได้ของนักเรียน ผมก็จะสามารถที่จะพอทำนายได้ว่า เช่นถ้ามีนักเรียนคนหนึ่งใช้เวลาอ่านหนังสือ 3.2 ชม. นักเรียนคนนั้นควรจะได้คะแนนประมาณเท่าไหร่ สังเกตตรงว่าค่าคะแนน ซึ่งค่านี้เป็นแบบ Continuousimport pandas as pddf = pd.DataFrame(data={ 'hours': [2.5, 5.1, 3.2, 8.5, 3.5, 9.2, 8.9, 6.9, 7.8, 2.7], 'scores': [21, 47, 27, 75, 30, 88, 95, 76, 86, 25]})dfข้อมูลจำนวนชั่วโมงที่ใช้ในการอ่านหนังสือกับคะแนนสอบที่ได้ผมจะลองมาสร้างโมเดล Regression ครับ ในที่นี้ขอใช้ Linear Regression นะครับ เป็น Regression ที่ง่ายที่สุดX = df[['hours']]y = df.scoresfrom sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)from sklearn.linear_model import LinearRegression regressor = LinearRegression() regressor.fit(X_train, y_train)ลองเทสดูregressor.predict(X_test)ได้ผลประมาณนี้ผลที่ได้จากโมเดล Regression (Linear Regression)จะเห็นได้ว่าถ้านักเรียนคนหนึ่งใช้เวลาอ่านหนังสือ 3.2 ชั่วโมง เค้าน่าจะได้คะแนนประมาณ 28.97 ส่วนถ้านักเรียนอีกคนหนึ่งใช้เวลาอ่านหนังสือประมาณ 7.8 ชั่วโมง เค้าน่าจะได้คะแนนประมาณ 76.72นี่แหละครับปัญหา Regression เป็นปัญหาที่เราอยากจะทำนายค่าในอนาคต หรือค่าที่เราอยากจะประมาณการเป็น Continuousปัญหา Classificationมาดูปัญหา Classification กันบ้าง มีข้อแตกต่างจาก Regression ก็คือ.. ค่าที่เราจะทำนายจะเป็นค่าแบบ Discrete ครับ! ต่างกันแค่นี้จริงเหรอ? 🤔จริงครับ! แค่นี้แหละ เรามาใช้โค้ดเป็นคนอธิบายเช่นเดิม ผมต้องการสร้างโมเดลขึ้นมาเพื่อทำนายว่าคนๆ นี้เป็นเป็นโรคมะเร็งเต้านมหรือเปล่า (Healthy controls หรือ Patients) สังเกตตรงว่าค่าที่จะทำนายนี้ จะเป็นแบบ Discreteสำหรับข้อมูลชุดนี้เค้ากำหนดให้เลข 1 คือ Healthy controls ส่วนเลข 2 คือ Patientsimport pandas as pddf = pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/00451/dataR2.csv')df.head()อ่านข้อมูล Breast Cancer จาก UCI Machine Learning Repositoryต่อไปเราจะสร้างโมเดล Classification ขึ้นมาครับ ขอใช้ k-Nearest Neighbors (k-NNs) เนอะX = df.drop('Classification', axis='columns')y = df.Classificationfrom sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)from sklearn import neighborsknn = neighbors.KNeighborsClassifier(n_neighbors=5)knn.fit(X_train, y_train)แล้วเราลองเทสดูknn.predict(X_test)ได้ผลลัพธ์ผลที่ได้จากโมเดล Classification (k-NNs)ผลลัพธ์ทางด้านบนจะออกมาเป็นแบบ Discrete ครับ คือถ้าไม่ตอบว่า Healthy controls ก็จะตอบว่า Patients นั่นเองClassification เป็นปัญหาที่เราอยากจะทำนายค่าในอนาคต หรือที่เราอยากจะจำแนกเป็น Discreteสรุปสั้นๆRegression กับ Classification จะต่างกันที่ตรงค่าที่เราอยากจะทำนายหรือจำแนกครับ ถ้าค่านั้นเป็นแบบ Continuous เราควรจะจัดเป็นปัญหา Regression ส่วนถ้าเป็น Discrete ก็จะเป็นปัญหา Classification ดังนั้นเวลาที่เราเจอคำถามทาง Business หรือ Use Case ที่เราจะนำไปใช้ ก็อยากให้คิดก่อนว่าเราจะใช้ Regression หรือ Classification ครับ 😎
โดย: Kan Ouivirach
| Machine Learning
ใช้ Null Accuracy เป็น Baseline ในการวัดผลโมเดลของเรา
ในกรณีที่เราสร้างโมเดลขึ้นมาเพื่อทำนายผลอะไรสักอย่าง เราก็อยากที่จะวัดผลโมเดลนั้นๆ ว่ามีประสิทธิภาพดีแค่ไหน ส่วนใหญ่แล้วเราก็จะเลือกค่าที่คำนวณง่ายๆ มาอย่างเช่นค่า Accuracy เป็นต้นค่า Accuracy คือ ค่าอัตราส่วนระหว่างจำนวนข้อมูลที่เราทำนายถูก กับจำนวนที่เราต้องการจะทำนายทั้งหมดเช่น สมมุติว่า เรามีข้อมูลที่เราอยากจะทำนายว่าลูกค้าคนไหนของเราจะยกเลิกการใช้บริการของเราหรือเปล่าอยู่เป็นจำนวน 100 ข้อมูล และเราทำนายว่า 75 คนจะยกเลิก และ 75 คนนั้นยกเลิกจริงๆ ดังนั้นค่า Accuracy ของโมเดลของเราก็คือ 75% แล้วถ้าเราทำนายว่ามี 75 คนที่จะยกเลิก แต่ว่ามียกเลิกจริงๆ คือ 50 คน ก็แปลว่าค่า Accuracy ของโมเดลคือ 50% 🤓ทีนี้คำถามที่เราจะต้องถามตัวเองก็คือว่า “ค่า Accuracy เท่าไหร่ถึงจะดี?” ถ้าให้ตอบแบบไม่คิดเลยก็จะตอบประมาณว่า 90% ขึ้นไปครับ ดีแน่นอน!🛑 ช้าก่อน! วางเหยือกเบียร์ลงแล้วหายใจลึกๆ สัก 1–2 ที จริงๆ แล้วเราไม่ควรตอบไปทันทีแบบนั้น สิ่งที่เราควรทำคือย้อนกลับมาดูข้อมูลของเรา และคำนวณค่า Null Accuracy ก่อนครับแล้วค่า Null Accuracy คืออะไร?Baseline accuracy that can be achieved by always predicting the most frequent classตามนั้นเลยครับ มาดูตัวอย่างการคำนวณดีกว่าจะได้เห็นภาพกันมากขึ้นยกตัวอย่างเช่นผมมีข้อมูลอยู่ 100 ข้อมูล และมีจำนวนคนที่ยกเลิกการใช้บริการจริงๆ อยู่ 90 และมีจำนวนคนที่ใช้บริการอยู่ 10 คน ถ้าผมบอกว่าให้โมเดลของผมมีคำตอบเดียวคือทำนายว่าทุกคนยกเลิกการใช้บริการ (เพราะจำนวนคนที่ยกเลิกการใช้บริการมีมากกว่า) ผมก็จะได้ค่า Accuracy คือ 90% แล้วครับ ซึ่งค่า Accuracy นี้แหละ เราเรียกว่าค่า Null Accuracy 😎แปลว่าถ้าเราสร้างโมเดลของเราขึ้นมา ไม่ว่าจะใช้โมเดลอะไรก็ตาม ถ้าได้ค่า Accuracy ไม่เกินค่า Null Accuracy ก็แปลว่าโมเดลนั้นยังทำงานได้ไม่ดีจริง และห้ามนำไปใช้งานจริงครับอาจจะเกิดผลเสียต่อธุรกิจได้สรุปสั้นๆ ว่าค่า Null Accuracy เนี่ย นอกจากจะช่วยวัดผลโมเดลของเราได้แบบไวๆ แล้วยังจะช่วยเป็น Baseline ให้เรารู้ว่าเราควรจะทำโมเดลให้ดียิ่งขึ้นไปอีกหรือไม่ ลองเอาไปใช้กันดูนะครับ ส่วนตัวผมนี่คำนวณค่านี้ตลอดเลย เวลาที่สร้างโมเดลขึ้นมาเพื่อทำนายผล 🎉

พบบทสัมภาษณ์ได้ที่นี่เร็ว ๆ นี้

พบDigital Skill บนสื่อ ได้ที่นี่เร็ว ๆ นี้

หมวดหมู่

พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้

พบหมวดหมู่ ได้ที่นี่เร็ว ๆ นี้

Tags

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้

พบคำสำคัญ ได้ที่นี่เร็ว ๆ นี้