การสุ่มตัวอย่างด้วยการแทนที่ด้วย R randomForest


11

การใช้งาน RandomForest ไม่อนุญาตให้มีการสุ่มตัวอย่างเกินจำนวนการสังเกตแม้ว่าจะสุ่มตัวอย่างด้วยการเปลี่ยน ทำไมนี้

ทำงานได้ดี:

rf <- randomForest(Species ~ ., iris, sampsize=c(1, 1, 1), replace=TRUE)
rf <- randomForest(Species ~ ., iris, sampsize=3, replace=TRUE)

สิ่งที่ฉันต้องการจะทำ:

rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), replace=TRUE)
Error in randomForest.default(m, y, ...) : 
  sampsize can not be larger than class frequency

ข้อผิดพลาดที่คล้ายกันโดยไม่มีตัวอย่างแบ่งชั้น:

rf <- randomForest(Species ~ ., iris, sampsize=151, replace=TRUE)
Error in randomForest.default(m, y, ...) : sampsize too large

เนื่องจากฉันคาดว่าวิธีการที่จะใช้ตัวอย่าง bootstrap เมื่อได้รับแทนที่ = TRUE ในทั้งสองกรณีฉันไม่ได้คาดหวังข้อ จำกัด นี้

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


ฉันไม่แน่ใจว่าเหตุผลที่แท้จริงคืออะไร แต่ตัวอย่าง bootstrap นั้นมีขนาดเดียวกับตัวอย่างดั้งเดิมของคุณดังนั้นพฤติกรรมนี้ดูเหมือนจะสอดคล้องกับสิ่งที่ฉันคาดหวังจากสิ่งที่อ้างว่าใช้ตัวอย่าง bootstrap
joran

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

คำตอบ:


5

สิ่งนี้ไม่ได้ตอบว่าทำไมแต่เพื่อหลีกเลี่ยงสิ่งนี้ใคร ๆ ก็สามารถทำซ้ำข้อมูลสำหรับคลาสที่หายากในข้อมูลการฝึกอบรม

ข้อเสียสองประการสำหรับวิธีการนี้เมื่อเปรียบเทียบกับการสุ่มตัวอย่างแบบ "ธรรมชาติ"

  • การประมาณราคาถุงไม่มีความหมายอีกต่อไป
  • ต้องใช้ทรัพยากรเพิ่มเพื่อเก็บวัตถุและสุ่มตัวอย่าง

แต่จะอนุญาตให้ใครสร้างป่าด้วยอัตราส่วนระดับที่ต้องการ


4

ฉันมีคำถามเดียวกันที่แน่นอนและพบสิ่งนี้ในการเปลี่ยนแปลงสำหรับ randomForest :

การเปลี่ยนแปลงใน 4.1-0:

  • ใน randomForest () ถ้าให้ sampsize ตอนนี้การสุ่มตัวอย่างจะทำได้โดยไม่ต้องเปลี่ยนนอกเหนือจากการแบ่งชั้นตามชั้นเรียน ดังนั้น sampsize ต้องไม่ใหญ่กว่าความถี่ของคลาส

การตั้งค่า replace = TRUE ด้วยตนเองดูเหมือนจะไม่แทนที่สิ่งนี้


2
อาจเป็นกรณีที่พารามิเตอร์ replace ถูกละเว้นเพียง แต่ต่อมาในรายการเปลี่ยนแปลงนั้น: การเปลี่ยนแปลงใน 4.5-12: * เพิ่มอาร์กิวเมนต์ 'strata' ใน randomForest ซึ่งร่วมกับ 'sampsize' อนุญาตการสุ่มตัวอย่าง (ด้วยหรือ โดยไม่มีการแทนที่) ตามตัวแปร strata (ซึ่งอาจเป็นอย่างอื่นที่ไม่ใช่ตัวแปรคลาส) ขณะนี้ใช้งานได้ในการจำแนกเท่านั้น
cohoz

ตัวอย่างเช่นข้อผิดพลาดเดียวกันคือการสร้างผ่านrf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)
cohoz

ยิ่งกว่านั้นกรณีทดสอบบางอย่างที่มีรุ่นปัจจุบัน (4.6-7) ระบุว่าตัวอย่างถูกนำมาแทนที่ด้วยดังนั้นนี่ไม่ใช่คำอธิบาย
cohoz

1
ฉันลงเอยแค่การสุ่มตัวอย่างก่อนที่จะเริ่มการสุ่มป่า อาจมีบางอย่างผิดปกติกับวิธีการนี้ แต่ดูเหมือนว่าจะทำงานเมื่อฉันทดสอบผลลัพธ์
hgcrpd

1
ไม่นั่นเป็นวิธีแก้ปัญหาที่ฉันใช้และทำสิ่งที่ต้องการอย่างแน่นอน โดยเฉพาะอย่างยิ่งสำหรับกรณีการใช้งานของคลาสที่ค่อนข้างหายากการทำซ้ำข้อมูลสำหรับคลาสนั้นในชุดการฝึกอบรมและก่อนที่จะทำการสุ่มตัวอย่างแบบแบ่งชั้นจะใช้งานได้ดีและ "ราคา" ในแง่ของหน่วยความจำเพิ่มเติม / CPU ไม่สูงเกินไป ฉันเดาว่าคุ้มค่าที่เขียนขึ้นเป็น "คำตอบ" แม้ว่าจริงๆมันไม่ได้เป็นหนึ่ง ...
cohoz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.