ความไม่สมดุลของคลาสในการเรียนรู้ของเครื่องภายใต้การควบคุม


47

นี่เป็นคำถามโดยทั่วไปไม่ใช่เฉพาะวิธีการหรือชุดข้อมูลใด ๆ เราจะจัดการกับปัญหาความไม่สมดุลของคลาสได้อย่างไรในการเรียนรู้ของเครื่องควบคุมโดยที่จำนวน 0 อยู่ที่ 90% และจำนวน 1 อยู่ที่ประมาณ 10% ในชุดข้อมูลของคุณเราจะฝึกอบรมตัวจําแนกอย่างเหมาะสมได้อย่างไร

หนึ่งในวิธีที่ฉันติดตามคือการสุ่มตัวอย่างเพื่อทำให้ชุดข้อมูลมีความสมดุลจากนั้นทำการฝึกการจําแนก

ฉันรู้สึกว่านี่เป็นการสุ่มมีกรอบใด ๆ ในการแก้ไขปัญหาเหล่านี้

คำตอบ:


45

มีกรอบและวิธีการมากมาย นี่เป็นปัญหาที่เกิดขึ้นอีก

ตัวอย่าง:

  • undersampling เลือกตัวอย่างของชุดเลขศูนย์ที่มีขนาดตรงกับชุดของ มีการสูญเสียข้อมูลที่ชัดเจนยกเว้นว่าคุณใช้กรอบงานที่ซับซ้อนมากขึ้น (ตัวอย่างเช่นฉันจะแบ่งชุดแรกเป็นชุดย่อยย่อยที่มีขนาดเล็กและไม่ซ้ำกัน 9 ชุดฝึกอบรมแบบจำลองในแต่ละชุดและประกอบแบบจำลอง)
  • การจีบเกินขนาด ผลิตสิ่งของเทียมจนกระทั่งมีสัดส่วน 50% / 50% นายจ้างคนก่อนของฉันใช้สิ่งนี้โดยปริยาย มีเฟรมเวิร์กมากมายสำหรับเรื่องนี้ (ฉันคิดว่าSMOTEเป็นที่นิยมที่สุด แต่ฉันชอบเทคนิคที่ง่ายกว่าอย่างNoisy PCA )
  • การเรียนรู้ในชั้นเดียว เพียงสมมติว่าข้อมูลของคุณมีคะแนนจริงสองสาม (เสียง) และเสียงสุ่มจำนวนมากที่ไม่มีอยู่จริงในชุดข้อมูล (สิ่งใดก็ตามที่ไม่ใช่เสียง) ใช้อัลกอริทึมในการ denoise ข้อมูลแทนอัลกอริทึมการจำแนกประเภท
  • การฝึกอบรมค่าใช้จ่ายที่มีความละเอียดอ่อน ใช้ฟังก์ชันต้นทุนแบบอสมมาตรเพื่อสร้างสมดุลกระบวนการฝึกอบรม

บางบทวิจารณ์เพื่อเพิ่มความซับซ้อนทางเทคนิค \ ระดับรายละเอียด:

โอ้แล้ว 90% / 10% นั้นไม่สมดุลกัน ชุดข้อมูลการทำธุรกรรมบัตรมักจะถูกแยก 99.97% / 0.03% นี่คือความไม่สมดุล


เพิ่งสังเกตเห็นว่า Noisy PCA ที่ฉันอ้างถึงสามารถดูได้ทั้งแบบ Oversampling, Regularization หรือ Jitter ทั้งนี้ขึ้นอยู่กับรายละเอียดการใช้งาน
Lucas Gallindo

ขอบคุณลูคัสสำหรับแหล่งข้อมูล ช่วยได้มากฉันมีปัญหาแปลก ๆ ที่มือของฉันทั้งหมดถูกระบุว่าเป็น '1' อย่างไรก็ตามในความเป็นจริงตัวอย่างเหล่านี้มีสิ่งเจือปนน้อยที่สุดนั่นคือมีบางบันทึกที่ควรจะเป็น '0' แต่มีการระบุว่า '1' ฉันเชื่อว่าปัญหาประเภทนี้เป็นของการจำแนกประเภทหนึ่งชั้น ความเข้าใจของฉันถูกต้องหรือไม่ มีกรอบทั่วไปที่ใช้ในการระบุพวกเขาในตอนแรกฉันพยายามจัดกลุ่ม แต่ไม่ทำงาน
NG_21

1
อัลกอริธึมทั้งหมดเหล่านี้ต้องการข้อมูลที่ระบุว่าเป็นศูนย์และบางส่วนเป็นข้อมูลที่มีความถูกต้อง 100% เกี่ยวกับความถูกต้องของฉลาก คุณมีทุกอย่าง แต่คุณรู้ว่าข้อมูลส่วนน้อยนั้นเป็นภาษาที่ไม่ถูกต้องซึ่งเป็นสถานการณ์ที่แตกต่างออกไป หากไม่มีความรู้ใด ๆ เกี่ยวกับโดเมนของแอปพลิเคชันฉันจะโจมตีด้วย Anomaly Detection จากนั้นติดป้ายความผิดปกติเป็นศูนย์ จากนั้นลองใช้อัลกอริธึมการจัดหมวดหมู่บางอย่าง (บางทีอาจเป็นการเรียนรู้แบบชั้นเดียว) ด้วยความรู้เกี่ยวกับโดเมนของแอปพลิเคชันฉันจะขอความช่วยเหลือจากผู้เชี่ยวชาญด้านโดเมนมาก่อน
Lucas Gallindo

13

ขึ้นอยู่กับวิธีการเรียนรู้อย่างมาก วิธีการทั่วไปส่วนใหญ่มีวิธีหนึ่ง (หรือหลายวิธี) ในการจัดการกับสิ่งนี้ การแก้ไขที่พบบ่อยคือการกำหนดบทลงโทษระดับความผิดที่สูงขึ้นในชั้นเรียนของชนกลุ่มน้อยบังคับให้ตัวจําแนกรู้จักพวกเขา (SVM, การถดถอยโลจิสติก, เครือข่ายประสาทเทียม, ... )

การเปลี่ยนตัวอย่างก็เป็นไปได้เช่นเดียวกับที่คุณพูดถึง ในกรณีนี้การ oversampling คลาสของชนกลุ่มน้อยมักจะเป็นทางออกที่ดีกว่าการ undersampling คลาสของเสียงส่วนใหญ่

วิธีการบางอย่างเช่นฟอเรสต์แบบสุ่มไม่ต้องการการแก้ไขใด ๆ


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

1
ตรวจสอบฟังก์ชั่นแรกของแพ็คเกจ R นี้: cran.r-project.org/web/packages/un บาลานซ์/unบาลานซ์.pdf
Lucas Gallindo

7
ทำไม Random Forest ไม่ต้องการการดัดแปลงใด ๆ ฉันคิดว่าคุณยังสามารถกำหนดน้ำหนักชั้นเรียนได้
แมค

4

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

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

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


1

เพิ่มเคล็ดลับสองข้อ: 1. ใช้ CDF นับความถี่ในข้อมูลการฝึกอบรมของคุณหรือใช้การตรวจสอบที่มีขนาดใหญ่มาก (ถ้าชุดทดสอบของคุณจะไม่เปลี่ยนแปลง แต่ชุดการตรวจสอบจะต้องมีการแจกแจงแบบเดียวกันกับชุดการฝึกอบรม) X% แรก (นับความถี่ของคุณมาก่อน) สำหรับคลาสหนึ่งและอีกกลุ่มเป็นตัวอย่างน้ำหนักอื่นแบบจำลองจะมีแนวโน้มไปที่คลาสกลุ่มตัวอย่างที่มีน้ำหนักคุณสามารถใช้ความแปรปรวนตัวอย่าง v. Weighti = 1/2 (1- (vmax - vi) / vmax)

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