Вам нужно установить block.size=1
, а также принять к сведению, что выборка без замены, вы можете проверить виньетка для rfsr c:
В отличие от случайных лесов Бреймана, действие по умолчанию здесь это выборка без замены. Таким образом, «вне пакета» (OOB) технически означает «вне образца», но по унаследованным причинам мы сохраняем термин «OOB».
Итак, используя примерный набор данных,
library(mlbench)
library(randomForestSRC)
data(Sonar)
set.seed(911)
trn = sample(nrow(Sonar),150)
rf <- rfsrc(Class ~ ., data = Sonar[trn,],ntree=500,block.size=1,importance=TRUE)
pred <- predict(rf,Sonar[-trn,],block.size=1)
plot(rf<span class="math-container">$err.rate[,1],type="l",col="steelblue",xlab="ntrees",ylab="err.rate",
ylim=c(0,0.5))
lines(pred$</span>err.rate[,1],col="orange")
legend("topright",fill=c("steelblue","orange"),c("test","OOB.train"))
В randomForest:
library(randomForest)
rf <- randomForest(Class ~ ., data = Sonar[trn,],ntree=500)
pred <- predict(rf,Sonar[-trn,],predict.all=TRUE)
Не совсем уверен, что легче получить ошибку ntrees:
err_by_tree = sapply(1:ncol(pred<span class="math-container">$individual),function(i){
apply(pred$</span>individual[,1:i,drop=FALSE],1,
function(i)with(rle(i),values[which.max(lengths)]))
})
err_by_tree = colMeans(err_by_tree!=Sonar$Class[-trn])
Тогда участок:
plot(rf$err.rate[,1],type="l",col="steelblue",xlab="ntrees",ylab="err.rate",
ylim=c(0,0.5))
lines(err_by_tree,col="orange")
legend("topright",fill=c("steelblue","orange"),c("test","OOB.train"))