如何使用Ranger绘制OOB误差与树数的关系图?

问题描述

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

所以我的问题是:

  1. 如何使用Ranger绘制OOB误差与树数的关系图?

  2. 还有什么其他方法可以将稀疏矩阵转换为数据帧?到目前为止,我已经尝试过

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

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

  4. 是否存在其他方法来确定最佳树数而不绘制OOB误差与树数的关系(如果上述方法失败)?

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

解决方法

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

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")

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...