Глубина и OOB ошибка randomForest и randomForestSRC - PullRequest
1 голос
/ 26 апреля 2020

Вот мой код для случайного леса и rfsr c в R; Есть ли способ включить n_estimators и max_depth как версию sklearn в мой код R? Кроме того, Как я могу изобразить ошибку OBB против числа деревьев, как это показано?

enter image description here

set.seed(2234)
tic("Time to train RFSRC fast")
fast.o <- rfsrc.fast(Label ~ ., data = train[(1:50000),],forest=TRUE)
toc()
print(fast.o)

#print(vimp(fast.o)$importance)

set.seed(2367)
tic("Time to test RFSRC fast ")
#data(breast, package = "randomForestSRC")
fast.pred <- predict(fast.o, test[(1:50000),])
toc()
print(fast.pred)


set.seed(3)
tic("RF model fitting without Parallelization")
rf <-randomForest(Label~.,data=train[(1:50000),])
toc()
print(rf)
plot(rf)
varImp(rf,sort = T)
varImpPlot(rf, sort=T, n.var= 10, main= "Variable Importance", pch=16)

rf_pred <- predict(rf, newdata=test[(1:50000),])
confMatrix <- confusionMatrix(rf_pred,test[(1:50000),]$Label)
confMatrix

Я ценю ваше время.

1 Ответ

0 голосов
/ 26 апреля 2020

Вам нужно установить 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"))

enter image description here

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

enter image description here

...