问题描述
我想通过绘制OOB误差与树木数的关系图来获得随机森林的最佳树木数,并查看误差平稳点。但是,由于我的问题涉及文本挖掘,因此我的训练数据属于稀疏矩阵类型,即在dgCMatrix中。这意味着我不能使用randomForest包来训练我的模型,因为randomForest不支持稀疏矩阵。相反,我必须使用游侠包,但游侠没有给出OOB错误与树数的关系。我曾尝试将稀疏矩阵转换为尺寸为90,000 x 5,500的数据帧以在randomForest中运行,但是即使并行执行也要花费很长时间,而且我没有那种计算能力。
所以我的问题是:
-
如何使用Ranger绘制OOB误差与树数的关系图?
-
还有什么其他方法可以将稀疏矩阵转换为数据帧?到目前为止,我已经尝试过
train_matrix <- as.data.frame(as.matrix(train_dtm))
-
使用转换后的数据帧有哪些方法可以减少randomForest的运行时间?
如果可以的话,将不胜感激。谢谢!
解决方法
我遇到了类似的问题,最后我采用了穷人的方法(这只回答了您的第一个问题):
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")
我不知道是否有“最佳”数量的树,但是构建比需要更多的树会大大减慢您的预测速度,尤其是在绘制部分依赖图时。这是我这样做的唯一原因。