สำหรับการจำแนกประเภทด้วยป่าสุ่มใน R เราควรปรับขนาดคลาสที่ไม่สมดุลได้อย่างไร


17

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

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

1. ป่าไม้แบบถ่วงน้ำหนัก

2. ป่าไม้แบบสมดุล

แพคเกจ R ไม่อนุญาตให้มีน้ำหนักของคลาส (จากฟอรัมช่วยเหลือ R ฉันได้อ่านพารามิเตอร์ classwt ทำงานไม่ถูกต้องและกำหนดเวลาเป็นการแก้ไขข้อบกพร่องในอนาคต) ดังนั้นฉันจึงเหลือตัวเลือก 2 ฉันสามารถระบุได้ จำนวนวัตถุที่สุ่มตัวอย่างจากแต่ละคลาสสำหรับการวนซ้ำแต่ละครั้งของฟอเรสต์แบบสุ่ม

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


1
ฉันกำลังเผชิญกับปัญหาที่คล้ายกัน คุณช่วยกรุณาระบุสคริปต์สำหรับป่าสุ่มถ่วงน้ำหนักและป่าสุ่มตามเมตริกถ้าคุณมี? รอการตอบกลับของคุณ

คำตอบ:


5

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


สวัสดีเดวิดขอบคุณสำหรับคำแนะนำ การเพิ่มจะเป็นไปได้ภายใน / ร่วมกับป่าสุ่ม? นอกจากนี้ฉันได้อ่านว่าการเพิ่มอาจไม่สามารถใช้ได้กับข้อมูลที่มีเสียงดัง ข้อมูลที่ฉันทำงานด้วยมีตัวแปร "ที่มีเสียงดัง" มากมาย - ฉันกำลังเรียกใช้ฟอเรสต์แบบสุ่มโดยไม่ต้องเลือกคุณสมบัติเลยลดขนาดคลาสที่ใหญ่ขึ้นเพื่อจัดการกับความไม่สมดุล ฉันได้รับผลลัพธ์ที่ยอมรับได้ (จำแนกอย่างถูกต้อง 85% ของคลาสที่เล็กกว่าและ 93% ของคลาสที่ใหญ่กว่าในชุดการฝึกอบรม) แต่การปรับปรุงยินดีต้อนรับเสมอ
ialm

@ โจนาธานฉันไม่รู้สึกว่าต้องใช้เสียงรบกวนเท่าไหร่ก่อนที่ป่าสุ่มจะเริ่มเอาชนะวิธีการเร่งความเร็วที่หลากหลาย แต่ความประทับใจของฉันก็คือมันค่อนข้างแปลกมาก gbmแพคเกจในRมีการทำงาน "น้ำหนัก" ในระยะสั้นและคุณจะสามารถเพิ่มการสุ่มในแฟชั่นคล้ายกับป่าสุ่มโดยการลดที่มีคำว่า "bag.fraction" ดูเหมือนว่ามันคุ้มค่าที่จะลอง
David J. Harris

@ DavidJ.Harris Boosting ยังได้รับผลกระทบจากความไม่สมดุลในชั้นเรียนโดยเฉพาะอย่างยิ่งในกรณีที่หายากแน่นอนเมื่อข้อมูลเกี่ยวกับชั้นเรียนส่วนน้อยกระจัดกระจาย
แอนทอน

2

ฉันคิดว่าวัตถุที่มีน้ำหนักนั้นเทียบได้กับการทำซ้ำ บางทีคุณควรลองปรับเปลี่ยนขั้นตอน bootstrap โดยการสุ่มตัวอย่างคลาสที่แตกต่างกันของคุณอย่างเหมาะสม

ความคิดอื่นคือความไม่สมดุลของคลาสอาจเปลี่ยนเกณฑ์การตัดสินใจของคุณเป็นค่าอื่นมากกว่า 0.5(ถ้าเป็นปัญหาการจำแนกเลขฐานสอง) ลองพิจารณา ROC curves และ AUC เพื่อประเมินว่าความไม่สมดุลนั้นส่งผลให้โมเดลของคุณแย่แค่ไหน


0

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

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

RandomForest เขียนใน Fortran และ c มีซอร์สโค้ดให้ใช้งาน (http://cran.r-project.org/src/contrib/randomForest_4.6-2.tar.gz) แต่ฉันไม่สามารถมองเห็นสถานที่ที่คำนวณเอนโทรปีได้ PS ที่สุ่มใช้ป่าจีนี่แทนที่จะเป็นเอนโทรปี


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

ฉันต้องการแก้ไขโค้ดนั้นเมื่อนานมาแล้ว แต่ไม่มีเวลาสำหรับเรื่องนั้นการเพิ่มน้ำหนัก shoudnt นั้นยากสำหรับแนวคิด
Qbik

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

0

(1) คุณถูกต้องฟังก์ชั่นการถ่วงน้ำหนักไม่ทำงานและไม่แน่ใจว่าได้รับการแก้ไขแล้วหรือไม่

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


0

การสังเคราะห์การสุ่มตัวอย่างมากเกินไปของชนกลุ่มน้อย (SMOTE) สร้างการสังเกตใหม่ของกลุ่มชนกลุ่มน้อยเป็นการรวมกันแบบสุ่มของการสังเกตใกล้เคียง กระดาษอยู่ที่นี่: https://bmcbioinformatics.biomedcentral.com/articles/10.1186/1471-2105-14-106

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