R randomForest'te değiştirilmiş örnekleme


11

RandomForest uygulaması, değiştirme ile örnekleme yaparken bile gözlem sayısının ötesinde örneklemeye izin vermez. Bu neden?

İyi çalışıyor:

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

Yapmak istediğim şey:

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

Tabakalı örnek olmadan benzer hata:

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

Her iki durumda da replace = TRUE verildiğinde bootstrap örnekleri almayı beklediğimden bu sınırı beklemiyordum.

Amacım bunu nispeten nadir bir sınıftan yeterince büyük bir örnek almak için tabakalı örnekleme seçeneğiyle kullanmaktır.


Gerçek nedenin ne olduğundan emin değilim, ancak bir bootstrap örneği genellikle orijinal örneğinizle aynı boyuttadır, bu nedenle bu davranış, bootstrap örnekleri aldığını iddia eden bir şeyden beklediğim şeyle mükemmel bir şekilde uyumlu görünüyor.
joran

1
Eh, bu benim kelime seçimim belgelerin değil, ama sizin açınızdan iyi yapılmış. Yine de, dağılımı yeniden dengelemeye çalışırken bu rahatsız edici ve bunun dayatmak için yararlı bir kısıtlama olmasının bir nedenini bilmiyorum.
cohoz

Yanıtlar:


5

Bu neden cevap vermez , ancak bunun üstesinden gelmek için, eğitim verilerindeki nadir sınıf için verileri çoğaltabilir ve sonucun katmanlı bir örneğini alabiliriz.

"Doğal" bir örnekleme ile karşılaştırıldığında bu yaklaşımın iki dezavantajı:

  • çanta dışı tahminler artık anlamlı değil
  • nesneyi saklamak ve rastgele örnekler almak için daha fazla kaynak gerekir

ancak ormanı istenen sınıf oranlarıyla inşa etmesine izin verecektir.


4

Aynı soru var ve randomForest için changelog içinde buldum :

4.1-0'daki değişiklikler:

  • RandomForest () 'de, örnekleme boyutu verilmişse, örnekleme artık sınıfa göre katmanlara ek olarak değiştirilmeden yapılır. Bu nedenle örnek büyüklüğü sınıf frekanslarından daha büyük olamaz.

Replace = TRUE değerini manuel olarak ayarlamak da bunu geçersiz kılmış gibi görünmüyor.


2
Replace parametresi basitçe yok sayılıyor olabilir, ancak daha sonra bu değişiklik günlüğünde değişebilir: 4.5-12'deki değişiklikler: * 'Örnekleme' ile birlikte örneklemeye izin veren (veya ile değiştirmeden) katman değişkenine göre (sınıf değişkeni dışında bir şey olabilir). Şu anda sadece sınıflandırmada çalışıyor.
cohoz

Örneğin, aynı hata ile oluşturmak,rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)
cohoz

Dahası, mevcut versiyona (4.6-7) sahip bazı test durumları, numunelerin değiştirilerek alındığını gösterir, bu yüzden bu açıklama değildir.
cohoz

1
RandomForest'i çalıştırmadan önce sadece aşırı örnekleme yaptım. Muhtemelen bu metodolojide yanlış bir şeyler var, ancak sonuçları test ettiğimde işe yarıyor gibi görünüyor.
hgcrpd

1
Hayır, kullandığım çözüm bu ve tam olarak ne istediğini yapıyor. Özellikle nispeten nadir bir sınıfın kullanım durumu için, o sınıfın verilerinin eğitim setinde çoğaltılması ve tabakalı bir örnek almadan önce iyi çalışır ve ek bellek / CPU açısından "maliyet" çok yüksek değildir. Sanırım bu gerçekten bir tane olmasa bile bir "cevap" yazmaya değer ...
cohoz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.