คำแนะนำสำหรับการเรียนรู้ที่คำนึงถึงต้นทุนในการตั้งค่าที่ไม่สมดุล


15

ฉันมีชุดข้อมูลที่มีไม่กี่ล้านแถวและประมาณ 100 คอลัมน์ ฉันต้องการตรวจสอบประมาณ 1% ของตัวอย่างในชุดข้อมูลซึ่งเป็นของชั้นสามัญ ฉันมีข้อ จำกัด ความแม่นยำขั้นต่ำ แต่เนื่องจากค่าใช้จ่ายไม่สมมาตรฉันไม่กระตือรือร้นในการเรียกคืนใด ๆ (ตราบใดที่ฉันไม่เหลือ 10 การแข่งขันที่เป็นบวก!)

มีวิธีใดบ้างที่คุณอยากแนะนำในการตั้งค่านี้? (ยินดีต้อนรับสู่ลิงก์ไปยังเอกสารลิงค์ไปยังการนำไปปฏิบัติ)

คำตอบ:


15

ฉันพบว่าเขาและการ์เซีย (2009)เป็นประโยชน์ในการทบทวนการเรียนรู้ในปัญหาการเรียนที่ไม่สมดุล ต่อไปนี้เป็นสิ่งที่ควรพิจารณาบางประการที่ไม่ครอบคลุมอย่างแน่นอน:

แนวทางบนพื้นฐานของข้อมูล:

หนึ่งสามารถ undersample ชั้นเสียงส่วนใหญ่หรือ oversample ระดับชนกลุ่มน้อย (Breiman ชี้ให้เห็นว่านี่เป็นทางการเทียบเท่ากับการกำหนดค่าการแบ่งประเภทที่ไม่สม่ำเสมอ) ซึ่งอาจทำให้เกิดปัญหา: การ Undersampling สามารถทำให้ผู้เรียนพลาดมุมมองของคนส่วนใหญ่ การ oversampling เพิ่มความเสี่ยงของการเกิด overfitting

มีวิธีการ "แจ้งการสุ่มตัวอย่างแบบมีข้อมูล" ที่ช่วยลดปัญหาเหล่านี้ หนึ่งในนั้นคือEasyEnsembleซึ่งสุ่มตัวอย่างหลายชุดย่อยจากคลาสส่วนใหญ่และสร้างตัวแยกประเภทหลายตัวโดยการรวมแต่ละชุดย่อยกับข้อมูลคลาสย่อยทั้งหมด

SMOTE (เทคนิคการสังเคราะห์ของชนกลุ่มน้อยส่วนน้อย)หรือSMOTEBoost (การรวม SMOTE กับการเพิ่มประสิทธิภาพ)สร้างอินสแตนซ์สังเคราะห์ของกลุ่มชนกลุ่มน้อยโดยการสร้างเพื่อนบ้านที่ใกล้ที่สุดในพื้นที่คุณลักษณะ SMOTE ถูกนำไปใช้ใน R ในแพ็คเกจ DMwR (ซึ่งมาพร้อมกับหนังสือของ Luis Torgo“ Data Mining with R, การเรียนรู้กับกรณีศึกษา” CRC Press 2016 )

แนวทางการสร้างแบบจำลองที่เหมาะสม

ใช้ตุ้มน้ำหนักเฉพาะชั้นเรียนในฟังก์ชั่นการสูญเสียของคุณ

สำหรับแนวทางแบบอิงทรีคุณสามารถใช้ระยะทาง Hellingerเป็นฟังก์ชันปมความไม่สมบูรณ์ของโหนดได้เช่นกันในCieslak et al "ต้นไม้การตัดสินใจระยะทางของ Hellinger นั้นแข็งแกร่งและไร้ความรู้สึก" ( รหัส Weka ที่นี่ )

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

แน่นอนว่าอย่าใช้ความแม่นยำเป็นตัวชี้วัดสำหรับการสร้างแบบจำลอง คัปปาของโคเฮนเป็นทางเลือกที่สมเหตุสมผล

แนวทางการประเมินแบบจำลอง

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


ขอบคุณสำหรับการตอบกลับอย่างละเอียด ฉันพยายามขีดเส้นใต้และล้มเหลวอย่างน่าสังเวช แบบจำลองแสดงประสิทธิภาพที่ยอดเยี่ยมในตัวอย่าง แต่ความไม่สมดุลยังคงปรากฏอยู่ในชุดทดสอบ (และข้อมูลจริงที่ฉันจะใช้ในที่สุด) ดังนั้นความแม่นยำ OOS ของรุ่นจึงน่ากลัว ฉันได้ลองตุ้มน้ำหนักเฉพาะชั้นเรียน แต่แอปพลิเคชันของฉันเกี่ยวข้องกับค่าใช้จ่ายที่สูงขึ้นเชิงปริมาณได้อย่างง่ายดายสำหรับค่าบวกที่เป็นเท็จมากกว่าค่าลบเชิงลบ สำหรับตัวแยกประเภทคลาสหนึ่งฉันพยายามใส่ svm เชิงเส้น (อันที่ไม่ใช่เชิงเส้นช้าเกินไป) และนั่นมีความแม่นยำ 0 แม้ในตัวอย่าง ...
em70

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

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

5

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

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

หากคุณกำลังใช้อัลกอริทึมการเรียนรู้ของเครื่องนี่อาจจะยากกว่า Max Kuhn พยายามอย่างเป็นธรรมในการสรุปปัญหาในบทที่ 16 ของ "การพยากรณ์แบบจำลองประยุกต์" แต่หัวข้อที่ท้าทายที่จะสรุป หากคุณไม่ต้องการซื้อหนังสือรหัส R มีอยู่ในแพ็คเกจ AppliedPredictiveModeling สำหรับบทนี้และอาจเพียงพอทั้งนี้ขึ้นอยู่กับความคุ้นเคยกับ R และอัลกอริทึมที่คุณใช้

โดยทั่วไปแล้วการอภิปรายจะหมุนรอบอัลกอริทึมที่ใช้ใต้ท้อง / oversampling +/- ด้วยรูปแบบต่าง ๆ เช่น jous-boost ยังเป็นไปได้
ตัวอย่างของการสนทนาประเภทนี้: Chen et al "การใช้ฟอเรสต์แบบสุ่มเพื่อเรียนรู้ข้อมูลที่ไม่สมดุล" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf


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

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

0

คุณสามารถดูการใช้งาน Scikit-Learn ให้ความสนใจกับอาร์กิวเมนต์น้ำหนัก class_ ซึ่งสามารถมีค่าของพจนานุกรมของตุ้มน้ำหนักระดับหรือ 'อัตโนมัติ':

class sklearn.svm.SVC (C = 1.0, เคอร์เนล = 'rbf', องศา = 3, แกมม่า = 0.0, coef0 = 0.0, การลดขนาด = จริง, ความน่าจะเป็น = เท็จ, tol = 0.001, cache_size = 200, class_weight = ไม่มี, verbose = False, max_iter = -1, random_state = None)

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

scikit-learn มีอัลกอริทึมการจำแนกประเภทอื่น ๆ ซึ่งบางอันรับน้ำหนักของชั้นเรียน


คุณสามารถพูดเพิ่มเติมเกี่ยวกับวิธีการใช้ตุ้มน้ำหนักในชั้นเรียนเพื่อให้บรรลุเป้าหมายของ OP ได้หรือไม่? ฉันคิดว่านั่นเป็นนัยในโพสต์ของคุณ แต่นี่ยังไม่ได้คำตอบ
gung - Reinstate Monica

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