Skip to contents

eXtreme Gradient Boosting classification. Calls xgboost::xgb.train() from package xgboost.

If not specified otherwise, the evaluation metric is set to the default "logloss" for binary classification problems and set to "mlogloss" for multiclass problems. This was necessary to silence a deprecation warning.

Note that using the watchlist parameter directly will lead to problems when wrapping this Learner in a mlr3pipelines GraphLearner as the preprocessing steps will not be applied to the data in the watchlist.


To compute on GPUs, you first need to compile xgboost yourself and link against CUDA. See

Initial parameter values

  • nrounds:

    • Actual default: no default.

    • Adjusted default: 1.

    • Reason for change: Without a default construction of the learner would error. Just setting a nonsense default to workaround this. nrounds needs to be tuned by the user.

  • nthread:

    • Actual value: Undefined, triggering auto-detection of the number of CPUs.

    • Adjusted value: 1.

    • Reason for change: Conflicting with parallelization via future.

  • verbose:

    • Actual default: 1.

    • Adjusted default: 0.

    • Reason for change: Reduce verbosity.

Early stopping

Early stopping can be used to find the optimal number of boosting rounds. The early_stopping_set parameter controls which set is used to monitor the performance. Set early_stopping_set = "test" to monitor the performance of the model on the test set while training. The test set for early stopping can be set with the "test" row role in the mlr3::Task. Additionally, the range must be set in which the performance must increase with early_stopping_rounds and the maximum number of boosting rounds with nrounds. While resampling, the test set is automatically applied from the mlr3::Resampling. Not that using the test set for early stopping can potentially bias the performance scores. See the section on early stopping in the examples.


This Learner can be instantiated via the dictionary mlr_learners or with the associated sugar function lrn():


Meta Information

  • Task type: “classif”

  • Predict Types: “response”, “prob”

  • Feature Types: “logical”, “integer”, “numeric”

  • Required Packages: mlr3, mlr3learners, xgboost


alphanumeric0\([0, \infty)\)
approxcontriblogicalFALSETRUE, FALSE-
base_scorenumeric0.5\((-\infty, \infty)\)
boostercharactergbtreegbtree, gblinear, dart-
colsample_bylevelnumeric1\([0, 1]\)
colsample_bynodenumeric1\([0, 1]\)
colsample_bytreenumeric1\([0, 1]\)
disable_default_eval_metriclogicalFALSETRUE, FALSE-
early_stopping_roundsintegerNULL\([1, \infty)\)
early_stopping_setcharacternonenone, train, test-
etanumeric0.3\([0, 1]\)
feature_selectorcharactercycliccyclic, shuffle, random, greedy, thrifty-
gammanumeric0\([0, \infty)\)
grow_policycharacterdepthwisedepthwise, lossguide-
lambdanumeric1\([0, \infty)\)
lambda_biasnumeric0\([0, \infty)\)
max_bininteger256\([2, \infty)\)
max_delta_stepnumeric0\([0, \infty)\)
max_depthinteger6\([0, \infty)\)
max_leavesinteger0\([0, \infty)\)
maximizelogicalNULLTRUE, FALSE-
min_child_weightnumeric1\([0, \infty)\)
missingnumericNA\((-\infty, \infty)\)
normalize_typecharactertreetree, forest-
nroundsinteger-\([1, \infty)\)
nthreadinteger1\([1, \infty)\)
ntreelimitintegerNULL\([1, \infty)\)
num_parallel_treeinteger1\([1, \infty)\)
one_droplogicalFALSETRUE, FALSE-
outputmarginlogicalFALSETRUE, FALSE-
predcontriblogicalFALSETRUE, FALSE-
predictorcharactercpu_predictorcpu_predictor, gpu_predictor-
predinteractionlogicalFALSETRUE, FALSE-
predleaflogicalFALSETRUE, FALSE-
print_every_ninteger1\([1, \infty)\)
process_typecharacterdefaultdefault, update-
rate_dropnumeric0\([0, 1]\)
refresh_leaflogicalTRUETRUE, FALSE-
reshapelogicalFALSETRUE, FALSE-
seed_per_iterationlogicalFALSETRUE, FALSE-
sampling_methodcharacteruniformuniform, gradient_based-
sample_typecharacteruniformuniform, weighted-
save_periodintegerNULL\([0, \infty)\)
scale_pos_weightnumeric1\((-\infty, \infty)\)
skip_dropnumeric0\([0, 1]\)
strict_shapelogicalFALSETRUE, FALSE-
subsamplenumeric1\([0, 1]\)
top_kinteger0\([0, \infty)\)
traininglogicalFALSETRUE, FALSE-
tree_methodcharacterautoauto, exact, approx, hist, gpu_hist-
tweedie_variance_powernumeric1.5\([1, 2]\)
verboseinteger1\([0, 2]\)


Chen, Tianqi, Guestrin, Carlos (2016). “Xgboost: A scalable tree boosting system.” In Proceedings of the 22nd ACM SIGKDD Conference on Knowledge Discovery and Data Mining, 785--794. ACM. doi:10.1145/2939672.2939785 .

See also

Other Learner: mlr_learners_classif.cv_glmnet, mlr_learners_classif.glmnet, mlr_learners_classif.kknn, mlr_learners_classif.lda, mlr_learners_classif.log_reg, mlr_learners_classif.multinom, mlr_learners_classif.naive_bayes, mlr_learners_classif.nnet, mlr_learners_classif.qda, mlr_learners_classif.ranger, mlr_learners_classif.svm, mlr_learners_regr.cv_glmnet, mlr_learners_regr.glmnet, mlr_learners_regr.kknn,, mlr_learners_regr.lm, mlr_learners_regr.nnet, mlr_learners_regr.ranger, mlr_learners_regr.svm, mlr_learners_regr.xgboost

Super classes

mlr3::Learner -> mlr3::LearnerClassif -> LearnerClassifXgboost


Inherited methods

Method new()

Creates a new instance of this R6 class.


Method importance()

The importance scores are calculated with xgboost::xgb.importance().




Named numeric().

Method clone()

The objects of this class are cloneable with this method.


LearnerClassifXgboost$clone(deep = FALSE)



Whether to make a deep clone.


if (requireNamespace("xgboost", quietly = TRUE)) {
  learner = mlr3::lrn("classif.xgboost")

  # available parameters:
#> <LearnerClassifXgboost:classif.xgboost>: Extreme Gradient Boosting
#> * Model: -
#> * Parameters: nrounds=1, nthread=1, verbose=0, early_stopping_set=none
#> * Packages: mlr3, mlr3learners, xgboost
#> * Predict Types:  [response], prob
#> * Feature Types: logical, integer, numeric
#> * Properties: hotstart_forward, importance, missings, multiclass,
#>   twoclass, weights
#>  [1] "alpha"                       "approxcontrib"              
#>  [3] "base_score"                  "booster"                    
#>  [5] "callbacks"                   "colsample_bylevel"          
#>  [7] "colsample_bynode"            "colsample_bytree"           
#>  [9] "device"                      "disable_default_eval_metric"
#> [11] "early_stopping_rounds"       "early_stopping_set"         
#> [13] "eta"                         "eval_metric"                
#> [15] "feature_selector"            "feval"                      
#> [17] "gamma"                       "grow_policy"                
#> [19] "interaction_constraints"     "iterationrange"             
#> [21] "lambda"                      "lambda_bias"                
#> [23] "max_bin"                     "max_delta_step"             
#> [25] "max_depth"                   "max_leaves"                 
#> [27] "maximize"                    "min_child_weight"           
#> [29] "missing"                     "monotone_constraints"       
#> [31] "normalize_type"              "nrounds"                    
#> [33] "nthread"                     "ntreelimit"                 
#> [35] "num_parallel_tree"           "objective"                  
#> [37] "one_drop"                    "outputmargin"               
#> [39] "predcontrib"                 "predinteraction"            
#> [41] "predleaf"                    "print_every_n"              
#> [43] "process_type"                "rate_drop"                  
#> [45] "refresh_leaf"                "reshape"                    
#> [47] "seed_per_iteration"          "sampling_method"            
#> [49] "sample_type"                 "save_name"                  
#> [51] "save_period"                 "scale_pos_weight"           
#> [53] "skip_drop"                   "strict_shape"               
#> [55] "subsample"                   "top_k"                      
#> [57] "training"                    "tree_method"                
#> [59] "tweedie_variance_power"      "updater"                    
#> [61] "verbose"                     "watchlist"                  
#> [63] "xgb_model"                  

# Train learner with early stopping on spam data set
task = tsk("spam")

# Split task into training and test set
split = partition(task, ratio = 0.8)
task$set_row_roles(split$test, "test")

# Set early stopping parameter
learner = lrn("classif.xgboost",
  nrounds = 1000,
  early_stopping_rounds = 100,
  early_stopping_set = "test"

# Train learner with early stopping