在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

由于我都期望在两种情况下都给定replace = TRUE时该方法将采用引导程序样本,因此我并不期望此限制。

我的目标是将其与分层抽样选项一起使用,以便从相对罕见的类别中抽取足够大的样本。


我不确定真正的原因是什么,但是引导程序样本的大小通常与原始样本的大小相同,因此,这种行为似乎完全符合我期望自称引导程序样本的预期。
joran 2012年

1
好吧,这是我的选择而不是文档的选择,但是您的观点是正确的。不过,在尝试重新分配平衡时这还是很不方便的,我不知道为什么这是强加于人的限制的原因。
cohoz 2012年

Answers:


5

这不能回答为什么,但是要解决此问题,可以在训练数据中复制稀有课程的数据,然后对结果进行分层抽样。

与“自然”过采样相比,此方法有两个缺点:

  • 预算外的价格不再有意义
  • 需要更多资源来存储对象并进行随机采样

但它允许人们以所需的等级比率建造森林。


4

我有完全相同的问题,并在changeLog中找到randomForest

4.1-0中的更改:

  • 在randomForest()中,如果给出了sampsize,则除了按类分层之外,现在无需替换即可进行采样。因此,采样大小不能大于类频率。

手动设置replace = TRUE似乎也不能覆盖它。


2
在某些情况下,替换参数可能会被忽略,但后来在该更改日志中:4.5-12中的更改:*在randomForest中添加了“ strata”参数,该参数与“ sampsize”一起允许进行采样(使用或而不是替换)根据阶层变量(可以是类变量以外的其他变量)。目前仅适用于分类。
2013年

例如,通过rf <- randomForest(Species ~ ., iris, sampsize=c(51, 1, 1), strata=iris$Species, replace=TRUE)
cohoz 2013年

此外,当前版本(4.6-7)的一些测试用例表明,样品是通过替换获得的,所以这不是解释。
cohoz 2013年

1
在运行randomForest之前,我最终只是超采样。这种方法可能出了点问题,但是当我测试结果时似乎可行。
hgcrpd

1
不,那是我使用的解决方法,它确实可以满足人们的需求。特别是对于一个相对少见的类的用例,在训练样本上并在获取分层样本之前复制该类的数据效果很好,并且在额外的内存/ CPU方面的“成本”不太高。我想写一个“答案”是值得的,即使它确实不是一个……
cohoz 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.