มีสูตรหรือกฎสำหรับการกำหนด sampSize ที่ถูกต้องสำหรับ randomForest หรือไม่?


13

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


คำถามนี้อ้างถึงการนำ R ฟอเรสต์มาใช้ในrandomForestแพคเกจแบบสุ่ม ฟังก์ชั่นrandomForestมีพารามิเตอร์sampSizeซึ่งอธิบายไว้ในเอกสารประกอบดังนี้

ขนาดตัวอย่างที่จะวาด สำหรับการจำแนกประเภทหาก sampsize เป็นเวกเตอร์ที่มีความยาวจำนวนชั้นการสุ่มตัวอย่างจะแบ่งเป็นชั้น ๆ และองค์ประกอบของ sampsize จะระบุจำนวนที่จะดึงออกมาจากชั้น

คำตอบ:


21

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

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


2

ฉันวิ่งป่าสุ่ม 4,500 ครั้งข้ามคืนด้วยการตั้งค่าพารามิเตอร์แบบสุ่ม:

ปัญหาการถดถอยYsignal = x1^2+sin(x2*pi) + x3 * x4 + x5 ที่xมีการสุ่มตัวอย่างอิสระจากการแจกแจงแบบปกติ sd = 1, mean = 1

Ytotal = Ysignal + Yerror

ที่ไหน Yerror = rnorm(n.observations,sd=sd(Ysignal))*noise.factor

theoretical.explainable.variance"TEV" = var(Ysignal= / var(Ytotal)

randomForest.performance = explained.variance(OOB cross-validation) / TEV

ชุดข้อมูลถูกสุ่มตัวอย่างจากปัญหาการถดถอยและเพิ่มสัญญาณรบกวน n.obsเป็นตัวเลขสุ่มระหว่าง 1,000 ถึง 5,000 n.extra.dummy.variablesระหว่าง 1 ถึง 20

ntree เสมอ 1,000

sample_replacement เสมอ true

mtryเป็น 5-25 จำกัด โดยn.obs noise.factorระหว่าง 0 และ 9

samplesize.ratio ตัวเลขสุ่มระหว่าง 10% ถึง 100% ขนาดอัตราส่วนของ bootstrap แต่ละตัว

ทุกรุ่นได้รับการฝึกฝนเช่นนี้ rfo = randomForest(x=X, y=Ytotal, <more args>)

randomForest.performanceความสามารถในการอธิบายถึงส่วนที่สูงที่สุดของTEVการเพิ่มขึ้นของทั่วไปเมื่อsamplesizeลดเมื่อTEVเป็นน้อยกว่า 50% และลดลงเมื่อTEVสูงกว่า 50%

ดังนั้นหากrandomForest-modelfitรายงานของคุณเช่น 15% อธิบายความแปรปรวนโดย OOB-CV และนี่คือความแม่นยำของโมเดลที่ยอมรับได้สำหรับคุณคุณอาจปรับแต่งประสิทธิภาพได้สูงขึ้นเล็กน้อยโดยลดsampsizeจำนวนการสังเกตให้ntree > 1000เหลือหนึ่งในสาม

กำลังใจในการทำงาน : สำหรับข้อมูลที่มีเสียงดังมากจะดีกว่าการตัดต้นไม้ที่มีความสัมพันธ์มากกว่าการลดอคติโดยการปลูกต้นไม้ที่มีขนาดสูงสุด


1

สำหรับป่าสุ่มในการทำงานได้เป็นอย่างดีในข้อมูลใหม่ที่พวกเขาทำในการฝึกอบรมข้อมูลขนาดของกลุ่มตัวอย่างที่จำเป็นเป็นอย่างมากมักจะเป็น 200 เท่าของจำนวนของผู้สมัครคุณสมบัติ ดูที่นี่


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