BlockForest Classification Learner
Source:R/learner_blockForest_classif_blockforest.R
mlr_learners_classif.blockforest.RdRandom forests for blocks of clinical and omics covariate data.
Calls blockForest::blockfor() from package blockForest.
In this learner, only the trained forest object ($forest) is retained. The
optimized block-specific tuning parameters (paramvalues) and the biased OOB
error estimate (biased_oob_error_donotuse) are discarded, as they are either
not needed for downstream use or not reliable for performance estimation.
Initial parameter values
num.threadsis initialized to 1 to avoid conflicts with parallelization via future.
Meta Information
Task type: “classif”
Predict Types: “response”, “prob”
Feature Types: “logical”, “integer”, “numeric”, “factor”, “ordered”
Required Packages: mlr3, mlr3extralearners, blockForest
Parameters
| Id | Type | Default | Levels | Range |
| blocks | untyped | - | - | |
| block.method | character | BlockForest | BlockForest, RandomBlock, BlockVarSel, VarProb, SplitWeights | - |
| num.trees | integer | 2000 | \([1, \infty)\) | |
| mtry | untyped | NULL | - | |
| nsets | integer | 300 | \([1, \infty)\) | |
| num.trees.pre | integer | 1500 | \([1, \infty)\) | |
| splitrule | character | extratrees | extratrees, gini | - |
| always.select.block | integer | 0 | \([0, 1]\) | |
| importance | character | - | none, impurity, impurity_corrected, permutation | - |
| num.threads | integer | - | \([1, \infty)\) | |
| seed | integer | NULL | \((-\infty, \infty)\) | |
| verbose | logical | TRUE | TRUE, FALSE | - |
References
Hornung, R., Wright, N. M (2019). “Block Forests: Random forests for blocks of clinical and omics covariate data.” BMC Bioinformatics, 20(1), 1–17. doi:10.1186/s12859-019-2942-y . https://doi.org/10.1186/s12859-019-2942-y.
See also
as.data.table(mlr_learners)for a table of available Learners in the running session (depending on the loaded packages).Chapter in the mlr3book: https://mlr3book.mlr-org.com/chapters/chapter2/data_and_basic_modeling.html#sec-learners
mlr3learners for a selection of recommended learners.
mlr3cluster for unsupervised clustering learners.
mlr3pipelines to combine learners with pre- and postprocessing steps.
mlr3tuning for tuning of hyperparameters, mlr3tuningspaces for established default tuning spaces.
Super classes
mlr3::Learner -> mlr3::LearnerClassif -> LearnerClassifBlockForest
Methods
Inherited methods
mlr3::Learner$base_learner()mlr3::Learner$configure()mlr3::Learner$encapsulate()mlr3::Learner$format()mlr3::Learner$help()mlr3::Learner$predict()mlr3::Learner$predict_newdata()mlr3::Learner$print()mlr3::Learner$reset()mlr3::Learner$selected_features()mlr3::Learner$train()mlr3::LearnerClassif$predict_newdata_fast()
LearnerClassifBlockForest$importance()
The importance scores are extracted from the model slot variable.importance.
Returns
Named numeric().
Examples
# Define a Task
task = tsk("sonar")
# Create train and test set
ids = partition(task)
# check task's features
task$feature_names
#> [1] "V1" "V10" "V11" "V12" "V13" "V14" "V15" "V16" "V17" "V18" "V19" "V2"
#> [13] "V20" "V21" "V22" "V23" "V24" "V25" "V26" "V27" "V28" "V29" "V3" "V30"
#> [25] "V31" "V32" "V33" "V34" "V35" "V36" "V37" "V38" "V39" "V4" "V40" "V41"
#> [37] "V42" "V43" "V44" "V45" "V46" "V47" "V48" "V49" "V5" "V50" "V51" "V52"
#> [49] "V53" "V54" "V55" "V56" "V57" "V58" "V59" "V6" "V60" "V7" "V8" "V9"
# partition features to 2 blocks
blocks = list(bl1 = 1:42, bl2 = 43:60)
# define learner
learner = lrn("classif.blockforest", blocks = blocks,
importance = "permutation", nsets = 10, predict_type = "prob",
num.trees = 50, num.trees.pre = 10, splitrule = "gini")
# Train the learner on the training ids
learner$train(task, row_ids = ids$train)
# feature importance
learner$importance()
#> V11 V9 V37 V36 V12
#> 2.456745e-02 1.660460e-02 1.617900e-02 1.515646e-02 1.489175e-02
#> V45 V48 V19 V16 V15
#> 9.742701e-03 6.658790e-03 5.920587e-03 5.430257e-03 5.063309e-03
#> V8 V51 V2 V55 V21
#> 4.498025e-03 4.494935e-03 4.302920e-03 4.271657e-03 4.100458e-03
#> V22 V20 V23 V13 V44
#> 3.318493e-03 3.302800e-03 3.252842e-03 3.238761e-03 3.235585e-03
#> V33 V10 V26 V6 V3
#> 3.180045e-03 2.991630e-03 2.689020e-03 2.638000e-03 2.607440e-03
#> V14 V27 V1 V31 V7
#> 2.568023e-03 2.518262e-03 2.396104e-03 2.384569e-03 2.327401e-03
#> V34 V52 V47 V49 V29
#> 2.184355e-03 2.013919e-03 1.840835e-03 1.748582e-03 1.656139e-03
#> V32 V18 V58 V24 V54
#> 1.400262e-03 1.084261e-03 1.073745e-03 9.479697e-04 4.546649e-04
#> V50 V42 V28 V30 V53
#> 2.452651e-04 2.153658e-04 2.209888e-05 4.094810e-06 -2.508284e-05
#> V57 V4 V46 V40 V25
#> -1.095593e-04 -1.419246e-04 -1.451425e-04 -7.015111e-04 -7.021957e-04
#> V17 V59 V5 V43 V56
#> -7.687888e-04 -8.917972e-04 -9.091277e-04 -9.110489e-04 -9.974393e-04
#> V39 V41 V38 V35 V60
#> -1.001701e-03 -1.375581e-03 -1.440435e-03 -1.539927e-03 -4.054114e-03
# Make predictions for the test observations
pred = learner$predict(task, row_ids = ids$test)
pred
#>
#> ── <PredictionClassif> for 69 observations: ────────────────────────────────────
#> row_ids truth response prob.M prob.R
#> 3 R M 0.6472540 0.3527460
#> 7 R M 0.5119524 0.4880476
#> 10 R R 0.3213492 0.6786508
#> --- --- --- --- ---
#> 200 M M 0.7712778 0.2287222
#> 205 M M 0.5553730 0.4446270
#> 207 M M 0.6830952 0.3169048
# Score the predictions
pred$score()
#> classif.ce
#> 0.2318841