对于大多数实际问题,我同意 Tim。
然而,其他参数确实会影响集成误差何时作为添加树的函数收敛。我猜想限制树的深度通常会使整体收敛得更早一点。我很少会摆弄树的深度,好像计算时间降低了,但它并没有带来任何其他好处。降低 bootstrap 样本量既可以降低运行时间,也可以降低树相关性,因此通常在可比较的运行时间下模型性能更好。
一个未提及的技巧:当 RF 模型解释的方差低于 40%(看似嘈杂的数据)时,可以将样本大小降低到 ~10-50%,并将树增加到例如5000(通常不需要很多)。集成误差稍后将作为树的函数收敛。但是,由于较低的树相关性,模型变得更加稳健,并且将达到较低的 OOB 错误水平收敛平台。
您在下面看到 samplesize 给出了最好的长期收敛,而 maxnodes 从较低的点开始但收敛较少。对于这种嘈杂的数据,限制 maxnodes 仍然比默认 RF 更好。对于低噪声数据,通过降低 maxnodes 或样本大小来减少方差不会因为失拟而导致偏差增加。
对于许多实际情况,如果您只能解释 10% 的方差,您会直接放弃。因此,默认射频通常很好。如果您是 Quant,可以下注成百上千个职位,那么 5-10% 的解释方差非常棒。
绿色曲线是 maxnodes,它有点像树的深度,但不完全是。
library(randomForest)
X = data.frame(replicate(6,(runif(1000)-.5)*3))
ySignal = with(X, X1^2 + sin(X2) + X3 + X4)
yNoise = rnorm(1000,sd=sd(ySignal)*2)
y = ySignal + yNoise
plot(y,ySignal,main=paste("cor="),cor(ySignal,y))
#std RF
rf1 = randomForest(X,y,ntree=5000)
print(rf1)
plot(rf1,log="x",main="black default, red samplesize, green tree depth")
#reduced sample size
rf2 = randomForest(X,y,sampsize=.1*length(y),ntree=5000)
print(rf2)
points(1:5000,rf2$mse,col="red",type="l")
#limiting tree depth (not exact )
rf3 = randomForest(X,y,maxnodes=24,ntree=5000)
print(rf2)
points(1:5000,rf3$mse,col="darkgreen",type="l")