在 R randomForest 中进行替换采样

机器算法验证 r 采样 随机森林 分层 过采样
2022-03-09 07:44:21

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 时该方法都会获取引导样本,因此我没想到会有这个限制。

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

2个回答

这没有回答为什么,但为了解决这个问题,可以在训练数据中复制稀有类的数据,并对结果进行分层样本。

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

  • 袋外估计不再有意义
  • 需要更多资源来存储对象并随机采样

但它将允许人们以所需的班级比例建造森林。

我有完全相同的问题,并在randomForest的更改日志中找到了这个:

4.1-0 中的变化:

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

手动设置 replace=TRUE 似乎也不会覆盖这一点。