Breiman (2001) 介绍了两个流行的 R 包来构建随机森林:randomForest 和 randomForestSRC。即使我尝试使用相同的输入参数,我也注意到两个包之间在准确性方面存在微小但显着的差异。我知道我们希望随机森林略有不同,但在下面的示例中,randomForestSRC 包始终优于 randomForest 包。我猜还有其他例子可以证明 randomForest 更胜一筹。有人可以解释为什么这些包提供不同的预测吗?有没有办法使用相同的方法为两个包生成随机森林?
在示例中,没有丢失数据,所有值都是不同的,mtry=1,并且树一直生长到 nodesplit=5。我相信也使用了相同的引导方法和拆分规则。增加模拟数据集中的 ntree 或观察数不会改变两个包之间的相对差异。
library(randomForest)
library(randomForestSRC)
set.seed(130948) #Other seeds give similar comparative results
x1<-runif(1000)
y<-rnorm(1000,mean=x1,sd=.3)
data<-data.frame(x1=x1,y=y)
#Compare MSE using OOB samples based on output
(modRF<-randomForest(y~x1,data=data,ntree=500,nodesize=5))
(modRFSRC<-rfsrc(y~x1,data=data,ntree=500,nodesize=5))
#Compare MSE using a test sample
x1new<-runif(10000)
ynew<-rnorm(10000,mean=x1new,sd=.3)
newdata<-data.frame(x1=x1new,y=ynew)
mean((predict(modRF,newdata=newdata)-newdata$y)^2) #MSE using randomForest
mean((predict(modRFSRC,newdata=newdata)$predicted-newdata$y)^2) #MSE using randomForestSRC