ฉันมีปัญหามากในการทำความเข้าใจว่าclass_weight
พารามิเตอร์ใน Logistic Regression ของ scikit-learn ทำงานอย่างไร
สถานการณ์
ฉันต้องการใช้การถดถอยโลจิสติกเพื่อทำการจำแนกไบนารีในชุดข้อมูลที่ไม่สมดุลมาก ชั้นเรียนมีข้อความว่า 0 (ลบ) และ 1 (บวก) และข้อมูลที่สังเกตได้อยู่ในอัตราส่วนประมาณ 19: 1 โดยกลุ่มตัวอย่างส่วนใหญ่มีผลลบ
ความพยายามครั้งแรก: เตรียมข้อมูลการฝึกอบรมด้วยตนเอง
ฉันแบ่งข้อมูลที่ฉันมีเป็นชุดที่ไม่ปะติดปะต่อสำหรับการฝึกอบรมและการทดสอบ (ประมาณ 80/20) จากนั้นฉันสุ่มตัวอย่างข้อมูลการฝึกด้วยมือเพื่อรับข้อมูลการฝึกอบรมในสัดส่วนที่แตกต่างจาก 19: 1; ตั้งแต่ 2: 1 -> 16: 1
จากนั้นฉันได้ฝึกการถดถอยโลจิสติกในชุดย่อยข้อมูลการฝึกอบรมที่แตกต่างกันเหล่านี้และการเรียกคืนแบบพล็อต (= TP / (TP + FN)) เป็นฟังก์ชันของสัดส่วนการฝึกที่แตกต่างกัน แน่นอนว่าการเรียกคืนนั้นคำนวณจากตัวอย่างการทดสอบที่ไม่ปะติดปะต่อซึ่งมีสัดส่วนที่สังเกตได้เท่ากับ 19: 1 หมายเหตุแม้ว่าฉันจะฝึกโมเดลที่แตกต่างกันในข้อมูลการฝึกอบรมที่แตกต่างกันฉันก็คำนวณการเรียกคืนสำหรับทุกคนในข้อมูลการทดสอบ (ไม่ปะติดปะต่อ) เดียวกัน
ผลลัพธ์เป็นไปตามที่คาดไว้: การเรียกคืนประมาณ 60% ที่สัดส่วนการฝึก 2: 1 และลดลงค่อนข้างเร็วเมื่อถึงเวลา 16: 1 มีหลายสัดส่วน 2: 1 -> 6: 1 ที่การเรียกคืนสูงกว่า 5% อย่างเหมาะสม
ความพยายามครั้งที่สอง: การค้นหาแบบกริด
ต่อไปฉันต้องการทดสอบพารามิเตอร์การกำหนดมาตรฐานที่แตกต่างกันดังนั้นฉันจึงใช้ GridSearchCV และสร้างตารางที่มีค่าC
พารามิเตอร์หลายค่ารวมทั้งclass_weight
พารามิเตอร์ ในการแปลสัดส่วน n: m ของฉันเป็นค่าลบ: ตัวอย่างการฝึกอบรมเชิงบวกเป็นภาษาพจนานุกรมของclass_weight
ฉันคิดว่าฉันระบุพจนานุกรมหลาย ๆ แบบดังนี้:
{ 0:0.67, 1:0.33 } #expected 2:1
{ 0:0.75, 1:0.25 } #expected 3:1
{ 0:0.8, 1:0.2 } #expected 4:1
และฉันยังรวมถึงและNone
auto
คราวนี้ผลลัพท์แตกโดยสิ้นเชิง การเรียกคืนทั้งหมดของฉันออกเล็ก ๆ (<0.05) มาสำหรับค่าของทุกยกเว้นclass_weight
auto
ดังนั้นฉันสามารถสันนิษฐานได้ว่าความเข้าใจของฉันเกี่ยวกับการตั้งค่าclass_weight
พจนานุกรมนั้นไม่ถูกต้อง ที่น่าสนใจคือclass_weight
ค่าของ 'auto' ในการค้นหาแบบกริดอยู่ที่ประมาณ 59% สำหรับค่าทั้งหมดC
และฉันเดาว่ามันจะสมดุลเป็น 1: 1?
คำถามของฉัน
คุณ
class_weight
จะใช้ข้อมูลการฝึกอบรมที่แตกต่างกันอย่างเหมาะสมอย่างไรเพื่อให้ได้ข้อมูลการฝึกอบรมจากสิ่งที่คุณให้มาจริง โดยเฉพาะพจนานุกรมใดที่ฉันclass_weight
ใช้ในการใช้ n: m สัดส่วนของค่าลบ: ตัวอย่างการฝึกอบรมเชิงบวกหากคุณส่งผ่าน
class_weight
พจนานุกรมต่างๆไปยัง GridSearchCV ในระหว่างการตรวจสอบความถูกต้องข้ามจะปรับสมดุลข้อมูลการฝึกอบรมตามพจนานุกรม แต่ใช้สัดส่วนตัวอย่างที่กำหนดจริงสำหรับการคำนวณฟังก์ชันการให้คะแนนของฉันในพับทดสอบหรือไม่ นี่เป็นสิ่งสำคัญเนื่องจากเมตริกใด ๆ จะมีประโยชน์กับฉันก็ต่อเมื่อมันมาจากข้อมูลในสัดส่วนที่สังเกตได้สิ่งที่ไม่
auto
คุ้มค่าของการclass_weight
ทำเท่าที่เป็นสัดส่วน? ฉันอ่านเอกสารและคิดว่า "ทำให้ข้อมูลสมดุลเป็นสัดส่วนผกผันกับความถี่ของข้อมูล" หมายความว่ามันทำให้เป็น 1: 1 ถูกต้องหรือไม่ ถ้าไม่มีใครสามารถชี้แจงได้?