ต้นแอปเปิ้ลผลิตผลไม้ผสมกับหนอนมาก แต่แอปเปิลในร้านขายของชำระดับไฮเอนด์ก็เป็นผลไม้ที่สมบูรณ์แบบเต็ม 100% ในระหว่างสวนผลไม้และร้านขายของชำ มีคนใช้เวลาจำนวนมาก ในการนำแอปเปิ้ลที่ไม่ดีออกหรือขว้างขี้ผึ้งเล็กๆ ในสิ่งที่เหลือทิ้ง ในฐานะวิศวกร ML คุณใช้เวลาจำนวนมาก ไปกับการกำจัดตัวอย่างที่ไม่ดีและทำความสะอาดสิ่งที่เหลือไว้ แม้แต่ "แอปเปิลเลว" เพียงน้อยนิดก็อาจทำให้ชุดข้อมูลขนาดใหญ่หมดไปได้
การปรับขนาดค่าฟีเจอร์
การปรับขนาด หมายถึง การแปลงค่าฟีเจอร์จุดลอยตัวจากช่วงธรรมชาติ (เช่น 100 ถึง 900) ให้เป็นช่วงมาตรฐาน (เช่น 0 ถึง 1 หรือ -1 ไปยัง +1) หากชุดฟีเจอร์มีเพียงฟีเจอร์เดียว การปรับขนาดจะให้ประโยชน์ในทางปฏิบัติน้อยหรือไม่มีเลย อย่างไรก็ตาม หากชุดฟีเจอร์ประกอบด้วยฟีเจอร์หลายรายการ การปรับขนาดฟีเจอร์จะให้ประโยชน์ดังต่อไปนี้
- ช่วยให้การไล่ระดับสีต่ำลงมาบรรจบกันเร็วขึ้น
- ช่วยหลีกเลี่ยง "กับดัก NaN" ซึ่งตัวเลขหนึ่งในโมเดลจะกลายเป็น NaN (เช่น เมื่อค่าเกินค่าความแม่นยําของจุดลอยตัวระหว่างการฝึก) และตัวเลขอื่นๆ ทั้งหมดในโมเดลจะกลายเป็น NaN ด้วยเนื่องจากการดำเนินการทางคณิตศาสตร์
- ช่วยให้โมเดลเรียนรู้น้ำหนักที่เหมาะสมสำหรับแต่ละฟีเจอร์ หากไม่มีการปรับขนาดฟีเจอร์ โมเดลจะให้ความสนใจมากเกินไปกับฟีเจอร์ต่างๆ ที่มีช่วงกว้างกว่า
คุณไม่จำเป็นต้องให้ฟีเจอร์จุดลอยตัวทุกจุดมีค่าเท่ากัน เรื่องเลวร้ายจะไม่เกิดขึ้นเลยหากคุณลักษณะ A ถูกปรับขนาดจาก -1 ถึง +1 ขณะที่คุณลักษณะ B ปรับขนาดจาก -3 ถึง +3 อย่างไรก็ตาม โมเดลของคุณจะแสดงผลได้ไม่ดีหากคุณลักษณะ B ปรับขนาดจาก 5000 ถึง 100, 000
การจัดการกับค่าผิดปกติ
พล็อตต่อไปนี้แสดงฟีเจอร์ที่มีชื่อว่า roomsPerPerson
จากชุดข้อมูลบ้านของแคลิฟอร์เนีย
ค่า roomsPerPerson
คำนวณโดยการหารจำนวนห้องพักทั้งหมดในพื้นที่หนึ่งด้วยจำนวนห้องในพื้นที่นั้น โครงเรื่องแสดงให้เห็นว่าพื้นที่ส่วนใหญ่ในแคลิฟอร์เนีย
มีห้อง 1 หรือ 2 ห้องต่อคน ลองดูตามแกน X
รูปที่ 4 หางยาวว่ะ
เราจะลดผลกระทบจากค่าผิดปกติแบบสุดโต่งดังกล่าวได้อย่างไร วิธีหนึ่งคือการบันทึกค่าทุกค่า
รูปที่ 5 อัตราส่วนของลอการิทึมจะยังคงมีส่วนต่อท้าย
การปรับขนาดบันทึกมีประสิทธิภาพดีกว่าเล็กน้อย แต่ยังคงมีนัยสำคัญของค่าผิดปกติ มาดูกันอีกวิธี จะเกิดอะไรขึ้นถ้าเราลอง "สูงสุด" หรือ "คลิป" ค่าสูงสุดคือ roomsPerPerson
ในค่าที่กำหนดเอง เช่น 4.0
รูปที่ 6 ค่าฟีเจอร์การตัดที่ 4.0
การตัดค่าฟีเจอร์ที่ 4.0 ไม่ได้หมายความว่าเราจะไม่สนใจค่าทั้งหมดที่มากกว่า 4.0 แต่หมายความว่าค่าทั้งหมดที่มากกว่า 4.0 จะกลายเป็น 4.0 ซึ่งอธิบายถึงความตลกของฮิลล์ที่ 4.0 แม้จะเป็นเนิน แต่ชุดฟีเจอร์ที่ปรับขนาดจะมีประโยชน์มากกว่าข้อมูลเดิมแล้ว
การ Binning
พล็อตต่อไปนี้แสดงความแพร่หลายของบ้านในละติจูดที่ต่างกันในแคลิฟอร์เนีย สังเกตว่ากระจุกตัว - ลอสแอนเจลิส อยู่ที่ละติจูด 34 และซานฟรานซิสโกประมาณละติจูด 38
รูปที่ 7 บ้านต่อละติจูด
ในชุดข้อมูล latitude
คือค่าทศนิยม แต่การแสดง latitude
เป็นฟีเจอร์จุดลอยตัวในโมเดลของเราอาจไม่สมเหตุสมผล
นั่นเป็นเพราะว่าไม่มีความสัมพันธ์เชิงเส้นระหว่างค่าของละติจูดและค่าที่อยู่ติดกัน เช่น บ้านในละติจูด 35 ไม่ได้ \(\frac{35}{34}\) แพงกว่า (หรือแพงน้อยกว่า) เมื่อเทียบกับบ้านที่ละติจูด 34 แต่ละติจูดแต่ละค่า
อาจเป็นเครื่องคาดการณ์ของมูลค่าบ้านได้เป็นอย่างดี
ในการทำให้ละติจูดเป็นตัวคาดการณ์ที่เป็นประโยชน์ ลองแบ่งละติจูดเป็น "bins" ตามคำแนะนำต่อไปนี้
รูปที่ 8 การเชื่อมโยงค่า
แทนที่จะมีฟีเจอร์จุดลอยตัวเดียว ตอนนี้เรามีฟีเจอร์บูลีนที่แตกต่างกัน 11 รายการ (LatitudeBin1
, LatitudeBin2
, ..., LatitudeBin11
)
การมีจุดสนใจแยกกัน 11 อย่างนั้นค่อนข้างไม่สวย เราจึงจะรวมฟีเจอร์เหล่านั้นเข้าด้วยกันเป็นเวกเตอร์ 11 องค์ประกอบเดียว การทำเช่นนี้จะช่วยให้เราแสดงละติจูด 37.4 ได้ดังนี้
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
ด้วยการเชื่อมโยง โมเดลของเราจึงสามารถเรียนรู้น้ำหนักที่แตกต่างกันโดยสิ้นเชิง สำหรับแต่ละละติจูด
การสครับ
จนถึงปัจจุบัน เราสันนิษฐานว่าข้อมูลทั้งหมดที่ใช้ในการฝึกและการทดสอบเชื่อถือได้ ในชีวิตจริง ตัวอย่างจำนวนมากในชุดข้อมูลไม่น่าเชื่อถือเนื่องจากเหตุผลอย่างน้อย 1 ข้อต่อไปนี้
- ค่าที่ละเว้น เช่น ผู้ใช้ลืมป้อนค่าสำหรับอายุของบ้าน
- ตัวอย่างที่ซ้ำกัน เช่น เซิร์ฟเวอร์อัปโหลดบันทึกเดียวกัน 2 ครั้งโดยไม่ได้ตั้งใจ
- ป้ายกำกับไม่ถูกต้อง เช่น มีคนติดป้ายกำกับรูปภาพต้นโอ๊ก เป็นรูปเมเปิลผิด
- ค่าฟีเจอร์ไม่ถูกต้อง เช่น มีคนพิมพ์ตัวเลขเพิ่ม หรือเอาเทอร์โมมิเตอร์ไว้กลางแดด
เมื่อตรวจพบแล้ว คุณมักจะ "แก้ไข" ตัวอย่างที่ไม่ถูกต้องด้วยการนำออกจากชุดข้อมูล หากต้องการตรวจหาค่าที่ละไว้หรือตัวอย่างที่ซ้ำกัน คุณสามารถเขียนโปรแกรมง่ายๆ การตรวจหาค่าคุณลักษณะหรือป้ายกำกับที่ไม่ถูกต้อง อาจเป็นเรื่องยากกว่า
นอกจากการตรวจหาตัวอย่างที่ไม่ถูกต้องแต่ละรายการแล้ว คุณต้องตรวจหาข้อมูลที่ไม่ถูกต้องในภาพรวมด้วย ฮิสโตแกรมเป็นกลไกที่ดี ในการแสดงข้อมูลเป็นภาพ นอกจากนี้ การดูสถิติต่างๆ ดังตัวอย่างต่อไปนี้
- ค่าสูงสุดและต่ำสุด
- ค่าเฉลี่ยและค่ามัธยฐาน
- ค่าเบี่ยงเบนมาตรฐาน
ลองสร้างรายการค่าที่พบบ่อยที่สุดสำหรับฟีเจอร์ที่ไม่ต่อเนื่อง
ตัวอย่างเช่น จำนวนตัวอย่างที่มี country:uk
ตรงกับจำนวนที่คุณคาดไว้ language:jp
ควรเป็นภาษาที่ใช้กันมากที่สุดใน
ชุดข้อมูลของคุณจริงๆ หรือไม่
รู้ข้อมูลของคุณเอง
ทำตามกฎต่อไปนี้
- อย่าลืมพิจารณาว่าข้อมูลของคุณควรมีลักษณะอย่างไร
- ตรวจสอบว่าข้อมูลเป็นไปตามความคาดหวังเหล่านี้ (หรืออธิบายได้ว่าเหตุใดจึงเป็นเช่นนั้น)
- ตรวจสอบอีกครั้งว่าข้อมูลการฝึกสอดคล้องกับแหล่งที่มาอื่นๆ (เช่น แดชบอร์ด)
ดูแลข้อมูลด้วยความระมัดระวังในแบบที่คุณจะต้องปฏิบัติกับโค้ดที่มีความสำคัญต่อภารกิจ ML ที่ดีต้องอาศัยข้อมูลที่ดี
ข้อมูลเพิ่มเติม
กฎของแมชชีนเลิร์นนิง, ML ระยะที่ 2: วิศวกรรมฟีเจอร์