วิธีการจำแนกชุดข้อมูลที่ไม่สมดุลโดย Convolutional Neural Networks (CNN)


10

ฉันมีชุดข้อมูลที่ไม่สมดุลในงานการจำแนกแบบไบนารีซึ่งจำนวนบวกกับจำนวนเชิงลบคือ 0.3% เทียบกับ 99.7% ช่องว่างระหว่างผลบวกและเชิงลบนั้นมีขนาดใหญ่มาก เมื่อฉันฝึก CNN ด้วยโครงสร้างที่ใช้ในปัญหา MNIST ผลการทดสอบจะแสดงอัตราลบติดลบสูง นอกจากนี้เส้นโค้งข้อผิดพลาดในการฝึกอบรมจะลดลงอย่างรวดเร็วในช่วงเวลาสองสามตอนที่เริ่มต้น แต่ยังคงเป็นค่าเดียวกันในยุคต่อไปนี้

คุณช่วยแนะนำวิธีแก้ไขปัญหานี้ให้ฉันได้ไหม? ขอบคุณ!

คำตอบ:


10

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

มีสองวิธีที่เป็นไปได้ในการจัดการสถานการณ์ดังกล่าว

  1. เมื่อพิจารณาจากสัดส่วน 0.3% ถึง 99.7% นี่เป็นชุดข้อมูลที่บิดเบือนอย่างมาก คุณแทบไม่มีคลาสบวกจำนวน 3 ตัวอย่างสำหรับทุก ๆ 1,000 ตัวอย่าง ฉันจะบอกว่าคุณควรดูที่การสร้างสมดุลของชุดข้อมูลโดยรับคลาสที่เป็นบวกมากขึ้น ไปรับตัวอย่างที่เป็นบวกให้ได้มากที่สุด จากนั้นคุณสามารถใช้ชุดข้อมูลที่มีความสมดุลมากขึ้น ตัวอย่างเช่นคุณอาจได้รับตัวอย่างบวก 1,000 ตัวอย่างจากนั้นเลือกชุดตัวอย่างเชิงลบ 1,000 ตัวอย่างและสร้างตัวแยกประเภท ตอนนี้มันควรจะสามารถเรียนรู้ทั้งชั้นเรียน

  2. ใช้การวัดข้อผิดพลาดแบบถ่วงน้ำหนักเมื่ออัปเดตตุ้มน้ำหนักหลังมินิแบทช์ น้ำหนักถูกปรับปรุงตามสัดส่วนกับจำนวนตัวอย่างของคลาสบวกและลบระหว่างมินิแบทช์ใด ๆ ตอนนี้ในสถานการณ์ปัจจุบันให้สัดส่วนเป็น 3: 1000 แม้เทคนิคนี้อาจไม่ทำงาน ดังนั้นคุณอาจลองหาสัดส่วนเช่น 300: 1,000 โดยรับตัวอย่างที่เป็นบวก 297 รายการแล้วรวมเข้ากับตัวอย่างลบ 1,000 ตัวอย่าง จากนั้นด้วยอัตราส่วน 300: 1,000 คุณควรลดน้ำหนักข้อผิดพลาดระหว่างมินิแบตช์ตามจำนวนตัวอย่างในแต่ละคลาส สิ่งนี้น่าจะใช้ได้


คุณรู้หรือไม่ว่าสัดส่วนที่เหมาะสมที่สุดอยู่ที่นี่ 3:10 หรืออย่างอื่นเลย
Christopher

4

ทำไมคุณถึงต้องการใช้ CNN ที่นี่? คุณเคยพิจารณารุ่นอื่น ๆ ที่จัดการกับข้อมูลที่ไม่สมดุลจริงหรือไม่?

ตัวอย่างเช่นฉันพบว่าสองเทคนิคต่อไปนี้ทำงานได้ดีสำหรับฉัน:

  • ป่าสุ่มที่มีการเพิ่ม SMOTE : ใช้ไฮบริดSMOTEที่ undersamples คลาสเสียงส่วนใหญ่และ over-samples คลาสของชนกลุ่มน้อยโดยการปรับเปอร์เซ็นต์ เลือกเปอร์เซ็นต์เหล่านี้ขึ้นอยู่กับการกระจายของตัวแปรตอบสนองของคุณในชุดฝึกอบรม ฟีดข้อมูลนี้ไปยังโมเดล RF ของคุณ ข้ามการตรวจสอบ / ดำเนินการค้นหากริดเสมอเพื่อค้นหาการตั้งค่าพารามิเตอร์ที่ดีที่สุดสำหรับ RFs ของคุณ

  • XGBoost w / การเพิ่มประสิทธิภาพพารามิเตอร์ไฮเปอร์ : อีกครั้งตรวจสอบข้ามหรือดำเนินการ gird-search เพื่อค้นหาการตั้งค่าพารามิเตอร์ที่ดีที่สุดสำหรับรูปแบบ นอกจากนี้ยังxgboostช่วยให้คุณสามารถถ่วงน้ำหนักในระดับบวกและลบscale_pos_weightได้ด้วย ดูเอกสารประกอบพารามิเตอร์สำหรับรายการที่สมบูรณ์

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

(ขออภัยฉันไม่สามารถแสดงความคิดเห็นชื่อเสียงไม่เพียงพอและฉันอยากรู้ว่าทำไมคุณถึงเลือก CNNs)


1

ชุดข้อมูลที่ไม่สมดุลกันเป็นปัญหาที่พบได้ทั่วไปในทุกพื้นที่และไม่เกี่ยวข้องกับการมองเห็นคอมพิวเตอร์และปัญหาที่เกิดจาก Convolutional Neural Networks (CNNs)

เพื่อจัดการกับปัญหานี้คุณควรพยายามที่จะรักษาสมดุลของชุดข้อมูลของคุณไม่ว่าจะโดยการสุ่มตัวอย่างน้อยกว่าคลาสหรือน้อยกว่าการเรียนส่วนใหญ่ (หรือทั้งสอง) ทางเลือกที่ดีคืออัลกอริธึม SMOTE (Synthetic Minority Over-sampling เทคนิค) ดังกล่าวข้างต้น ที่นี่คุณจะพบการเปรียบเทียบอัลกอริทึมการสุ่มตัวอย่างที่แตกต่างกัน หากคุณเป็นผู้ใช้งูใหญ่ขาดดุลการเรียนรู้เป็นห้องสมุดที่ดีที่ใช้เทคนิคที่เป็นประโยชน์มากสำหรับการสร้างความสมดุลระหว่างชุดข้อมูล

ในทางกลับกันหากคุณพยายามจัดประเภทรูปภาพวิธีที่ดีในการเพิ่มขนาดชุดข้อมูลของคุณคือการเพิ่มขนาด(เช่นการสร้างตัวอย่างสังเคราะห์ที่เหมาะสมเช่นภาพที่คล้ายกัน บางครั้งคุณอาจพบว่ามีประโยชน์ในการเพิ่มคลาสของชนกลุ่มน้อยเพื่อให้เกิดความสมดุลที่ดีขึ้น คลาส Keras ImageDataGeneratorเป็นเครื่องมือที่ดีสำหรับจุดประสงค์นี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.