0

我想通过绘制 OOB 误差与树数的关系来获得随机森林的最佳树数,并查看误差在哪一点达到稳定。但是,由于我的问题涉及文本挖掘,我的训练数据是稀疏矩阵类型,即在 dgCMatrix 中。这意味着我不能使用 randomForest 包来训练我的模型,因为 randomForest 不支持稀疏矩阵。相反,我必须使用 ranger 包,但 ranger 没有给出 OOB 错误与树数的关系。我尝试将我的稀疏矩阵转换为维度为 90,000 x 5,500 的数据帧以在 randomForest 中运行,但即使并行执行也需要很长时间,而且我没有这种计算能力。

所以我的问题是:

  1. 如何绘制 OOB 错误与使用 ranger 的树数?

  2. 将稀疏矩阵转换为数据框的其他方法是什么?到目前为止我已经尝试过

    train_matrix <- as.data.frame(as.matrix(train_dtm))

  3. 有哪些方法可以使用转换后的数据帧来减少 randomForest 的运行时间?

  4. 如果上述方法失败,是否有其他方法可以在不绘制 OOB 错误与树数的情况下确定最佳树数?

如果可能的话,将不胜感激。谢谢!

4

1 回答 1

0

我遇到了类似的问题,最后我采用了穷人的方法(这只回答了你的第一个问题):

library(ranger)

# sample data
# install.packages("AmesHousing")
d <- AmesHousing::make_ames()

nt <- seq(1, 501, 10)

oob_mse <- vector("numeric", length(nt))

for(i in 1:length(nt)){
  rf <- ranger(Sale_Price ~ ., d, num.trees = nt[i], write.forest = FALSE)
  oob_mse[i] <- rf$prediction.error
}


plot(x = nt, y = oob_mse, col = "red", type = "l")

我不知道是否存在“最佳”数量的树,但是构建比需要更多的树会大大减慢您的预测速度,尤其是在绘制部分依赖图时。这是我这样做的唯一原因。

于 2021-05-24T23:25:39.340 回答