การนำเสนอ: การล้างข้อมูล

ต้นแอปเปิ้ลผลิตผลไม้ผสมกับหนอนมาก แต่แอปเปิลในร้านขายของชำระดับไฮเอนด์ก็เป็นผลไม้ที่สมบูรณ์แบบเต็ม 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

แผนผังของ RoomPerPerson ที่ค่าเกือบทั้งหมดจะอยู่รวมกันระหว่าง 0 ถึง 4 แต่ค่าเหล่านี้มีจำนวนมหาศาลและยาวไปจนถึง 55 ห้องต่อคน

รูปที่ 4 หางยาวว่ะ

เราจะลดผลกระทบจากค่าผิดปกติแบบสุดโต่งดังกล่าวได้อย่างไร วิธีหนึ่งคือการบันทึกค่าทุกค่า

พล็อตของ Log(roomsPerPerson) ซึ่ง 99% ของค่ากระจุกรวมกันอยู่ที่ประมาณ 0.4 ถึง 1.8 แต่ยังคงมีหางยาวๆ ที่จนถึง 4.2 โดยประมาณ

รูปที่ 5 อัตราส่วนของลอการิทึมจะยังคงมีส่วนต่อท้าย

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

แผนผังของ RoomPerPerson ที่มีค่าทั้งหมดอยู่ระหว่าง -0.3 ถึง 4.0 โครงเรื่องมีลักษณะคล้ายระฆัง แต่มีเนินเขาที่ผิดปกติที่ความเร็ว 4.0

รูปที่ 6 ค่าฟีเจอร์การตัดที่ 4.0

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

การ Binning

พล็อตต่อไปนี้แสดงความแพร่หลายของบ้านในละติจูดที่ต่างกันในแคลิฟอร์เนีย สังเกตว่ากระจุกตัว - ลอสแอนเจลิส อยู่ที่ละติจูด 34 และซานฟรานซิสโกประมาณละติจูด 38

แปลงบ้านต่อละติจูด พล็อตเรื่องนี้มีความไม่สม่ำเสมออย่างมาก โดยมีเส้นกราฟที่ลาดชันประมาณละติจูด 36 และเส้นกราฟที่พุ่งขึ้นสูงประมาณละติจูดที่ 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: วิศวกรรมฟีเจอร์