### for RandomForest-objects, by party::cforest()
set.seed(290875)
readingSkills.cf <- party::cforest(score ~ ., data = party::readingSkills,
control = party::cforest_unbiased(mtry = 2, ntree = 25))
### conditional importance, may take a while...
# party implementation:
set.seed(290875)
party::varimp(readingSkills.cf, conditional = TRUE)
# faster implementation but same results
set.seed(290875)
permimp(readingSkills.cf, conditional = TRUE, asParty = TRUE)
# different implementation with similar results
set.seed(290875)
permimp(readingSkills.cf, conditional = TRUE, asParty = FALSE)
### standard (unconditional) importance is unchanged
set.seed(290875)
party::varimp(readingSkills.cf)
set.seed(290875)
permimp(readingSkills.cf, oldSeedSelection = TRUE)
###
set.seed(290875)
readingSkills.rf <- randomForest::randomForest(score ~ ., data = party::readingSkills,
mtry = 2, ntree = 25, importance = TRUE,
keep.forest = TRUE, keep.inbag = TRUE)
### (unconditional) Permutation Importance
set.seed(290875)
permimp(readingSkills.rf, do_check = FALSE)
# very close to
readingSkills.rf$importance[,1]
### Conditional Permutation Importance
set.seed(290875)
permimp(readingSkills.rf, conditional = TRUE, threshold = .8, do_check = FALSE)
if (FALSE) {
### Parallel processing - Windows
# Only relevant for large trees, for small trees, there may not even be a
# 'speed up', but a 'slow down'
# Make a larger forest
set.seed(290875)
readingSkills.cf <- party::cforest(score ~ ., data = party::readingSkills,
control = party::cforest_unbiased(mtry = 2,
ntree = 200))
# sequentiall processing
set.seed(290875)
system.time(print(permimp(readingSkills.cf, conditional = TRUE, asParty = FALSE)))
# parallel processing
# note that the results are reproducible despite using multiple cores
cluster <- parallel::makeCluster(2)
set.seed(290875)
system.time(print(permimp(readingSkills.cf, conditional = TRUE,
asParty = FALSE, cl = cluster, progressBar = FALSE)))
parallel::stopCluster(cluster)
}
Run the code above in your browser using DataLab